from rest_framework import serializers from .models import OrderItemModel, OrderModel, DiscountCode from product.serializers import ProductVariantSerialzier from account.serializers import UserAddressSerializer class DiscountCodeSerializer(serializers.ModelSerializer): class Meta: model = DiscountCode fields = ('code', 'percent') read_only_fields = ('percent',) class OrderItemSerailzier(serializers.ModelSerializer): product = serializers.SerializerMethodField() class Meta: model = OrderItemModel fields = "__all__" read_only_fields = ('order', 'product') def get_product(self, obj): return ProductVariantSerialzier(instance=obj.product, context={'request': self.context.get('request')}).data class CartSerializer(serializers.ModelSerializer): items = OrderItemSerailzier(many=True) product_discount = serializers.SerializerMethodField() cart_total = serializers.SerializerMethodField() tax = serializers.SerializerMethodField() final_price = serializers.SerializerMethodField() discount_code = serializers.SerializerMethodField() class Meta: model = OrderModel fields = [ 'discount_code', 'items', 'cart_total', 'product_discount', 'tax', 'final_price'] def get_discount_code(self, obj): if obj.discount_code: return { 'code': obj.discount_code.code, 'persent': obj.discount_code.percent, 'amount': '100,000 تومان' } else: return None def get_product_discount(self, obj): return [ { 'product_name': 'iphone 13', 'dicount': '20%', 'discount_amount': '100,000 تومان' }, { 'product_name': 'iphone 12', 'dicount': '10%', 'discount_amount': '50,000 تومان' }, ] def get_tax(self, obj): return 1000 def get_cart_total(self, obj): return 10000 def get_final_price(self, obj): return 8000 class OrderSerializer(serializers.ModelSerializer): count = serializers.SerializerMethodField() images = serializers.SerializerMethodField() class Meta: model = OrderModel fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code', "images", "count", "id"] def get_count(self, obj): return obj.items.all().count() def get_images(self, obj): image_list = [ self.context.get('request').build_absolute_uri(image.image.url) if (image := item.product.images.all().first()) else None for item in obj.items.all()[:3] ] return filter(lambda x: x is not None, image_list)