github.com/ismailbayram/bigpicture@v0.0.0-20231225173155-e4b21f5efcff/internal/browser/pyproject/baskets/resources/serializers.py (about)

     1  from rest_framework import serializers
     2  
     3  from api.fields import EnumField
     4  from baskets.models import Basket, BasketItem, DiscountItem, Campaign
     5  from baskets.enums import PromotionType
     6  from cars.resources.serializers import CarSerializer
     7  from products.resources.serializers import ProductSerializer
     8  from products.models import Product
     9  from products.enums import Currency
    10  
    11  
    12  class CreateBasketItemSerializer(serializers.Serializer):
    13      product = serializers.PrimaryKeyRelatedField(queryset=Product.objects.filter(is_active=True,
    14                                                                                   store__is_approved=True,
    15                                                                                   store__is_active=True))
    16  
    17  
    18  class DiscountItemSerializer(serializers.ModelSerializer):
    19      name = serializers.CharField(source='campaign.name')
    20  
    21      class Meta:
    22          model = DiscountItem
    23          fields = ('name', 'amount')
    24  
    25  
    26  class BasketItemSerializer(serializers.ModelSerializer):
    27      price = serializers.DecimalField(source='get_price', max_digits=6,
    28                                       decimal_places=2, read_only=True)
    29      product = ProductSerializer()
    30  
    31      class Meta:
    32          model = BasketItem
    33          fields = ('product', 'price', 'quantity',)
    34  
    35  
    36  class BasketSerializer(serializers.ModelSerializer):
    37      currency = EnumField(enum=Currency)
    38      total_amount = serializers.DecimalField(source='get_total_amount', max_digits=6,
    39                                              decimal_places=2, read_only=True)
    40      total_quantity = serializers.IntegerField(source='get_total_quantity')
    41      net_amount = serializers.DecimalField(source='get_net_amount', max_digits=6,
    42                                            decimal_places=2, read_only=True)
    43      car = CarSerializer()
    44      basketitem_set = BasketItemSerializer(many=True)
    45      warning_messages = serializers.ListField()
    46      campaign_messages = serializers.ListField()
    47      discountitem_set = DiscountItemSerializer(many=True)
    48  
    49      class Meta:
    50          model = Basket
    51          fields = ('currency', 'total_amount', 'total_quantity', 'net_amount', 'car',
    52                    'basketitem_set', 'discountitem_set', 'warning_messages', 'campaign_messages',)
    53  
    54  
    55  class CampaignSerializer(serializers.ModelSerializer):
    56      promotion_type = EnumField(enum=PromotionType)
    57  
    58      class Meta:
    59          model = Campaign
    60          fields = ('pk', 'name', 'promotion_type')