diff --git a/backend/order/models.py b/backend/order/models.py index 630e1bd..a37a45f 100644 --- a/backend/order/models.py +++ b/backend/order/models.py @@ -77,19 +77,6 @@ class OrderModel(models.Model): super().save(*args, **kwargs) - def discount_list(self): - items_with_discount = self.items.filter(product__discount__gt=0) - discount_amount_dict = [{'product_name': f'{item.product}', 'discount': f'{item.product.discount}', 'discount_amount': ''} for item in items_with_discount] - - if self.discount_code: - - if self.discount_code.is_valid(): - discount_amount_dict['discount_code_discount'] = 10 - else: - self.discount = None - self.save() - - return discount_amount_dict def discount(self): # total_with_item_discount = sum(item.total_with_discount() for item in self.items.all()) diff --git a/backend/order/serializers.py b/backend/order/serializers.py index 3cad965..cf54aff 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -1,7 +1,30 @@ from rest_framework import serializers from .models import OrderItemModel, OrderModel, DiscountCode -from product.serializers import ProductVariantSerialzier +from product.serializers import ProductVariantSerialzier, AttributeValueSerialzier, ProductImageSerailizer from account.serializers import UserAddressSerializer +from product.models import ProductVariant + +class ProductVariantSerialzier(serializers.ModelSerializer): + product_attributes = AttributeValueSerialzier(many=True) + image = serializers.SerializerMethodField() + discount_amount = serializers.SerializerMethodField() + title = serializers.SerializerMethodField() + price = serializers.CharField() + + class Meta: + model = ProductVariant + fields = ['title', 'product_attributes', 'in_stock', 'price', 'discount', 'color', 'image', 'discount_amount'] + + def get_discount_amount(self, obj): + discount_amount = int(obj.price * (obj.discount / 100)) + return f'{discount_amount}' + + def get_image(self, obj): + return self.context.get('request').build_absolute_uri(obj.images.all().first().image.url) + + def get_title(self, obj): + return obj.product.name + class DiscountCodeSerializer(serializers.ModelSerializer): class Meta: model = DiscountCode @@ -13,58 +36,47 @@ class OrderItemSerailzier(serializers.ModelSerializer): product = serializers.SerializerMethodField() class Meta: model = OrderItemModel - fields = "__all__" - read_only_fields = ('order', 'product', 'price') + exclude = ('price', 'order') + 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'] + fields = [ 'discount_code', 'items', 'cart_total', '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 تومان' + 'code': f'{obj.discount_code.code}', + 'percent': obj.discount_code.percent, + 'amount': '100000' } 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 + return '1000' def get_cart_total(self, obj): - return 10000 + return '10000' def get_final_price(self, obj): - return 8000 + return '8000'