From 234e27e90e9b18f49025d62fa7884b2b7a5bc5fd Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Tue, 11 Mar 2025 22:35:49 +0330 Subject: [PATCH] new fields for order model and update cart serialzier --- .../migrations/0013_ordermodel_cart_total.py | 18 ++++++++++++++++++ backend/order/models.py | 18 +++++++++++++----- backend/order/serializers.py | 18 ++++++++++++++---- 3 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 backend/order/migrations/0013_ordermodel_cart_total.py diff --git a/backend/order/migrations/0013_ordermodel_cart_total.py b/backend/order/migrations/0013_ordermodel_cart_total.py new file mode 100644 index 0000000..86b90be --- /dev/null +++ b/backend/order/migrations/0013_ordermodel_cart_total.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.2 on 2025-03-11 18:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0012_rename_name_discountcode_code'), + ] + + operations = [ + migrations.AddField( + model_name='ordermodel', + name='cart_total', + field=models.BigIntegerField(blank=True, null=True, verbose_name='کل سبد خرید'), + ), + ] diff --git a/backend/order/models.py b/backend/order/models.py index 09648ff..d685fc7 100644 --- a/backend/order/models.py +++ b/backend/order/models.py @@ -50,6 +50,12 @@ class OrderModel(models.Model): is_paid = models.BooleanField(default=False, verbose_name="وضعیت پرداخت") discount_code = models.ForeignKey(DiscountCode, on_delete=models.PROTECT, null=True, blank=True, verbose_name="کدتخفیف") status = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name="وضعیت سفارش") + discount = models.BigIntegerField(null=True, blank=True, verbose_name='کل تخقیف') + tax = models.BigIntegerField(null=True, blank=True, verbose_name='مالیات') + final_price = models.BigIntegerField(null=True, blank=True, verbose_name='قیمت نهایی') + cart_total = models.BigIntegerField(null=True, blank=True, verbose_name='کل سبد خرید') + + def __str__(self): return f'سفارش: {self.id}' @@ -58,9 +64,6 @@ class OrderModel(models.Model): verbose_name_plural = 'سفارشات' - # def total_without_tax(self): - # return sum(item.total() for item in self.items.all()) - def save(self, *args, **kwargs): try: @@ -76,7 +79,7 @@ class OrderModel(models.Model): def discount_list(self): items_with_discount = self.items.filter(product__discount__gt=0) - discount_amount_dict = {f'{item.product}': item.product.discount for item in items_with_discount} + 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: @@ -90,9 +93,11 @@ class OrderModel(models.Model): def discount(self): # total_with_item_discount = sum(item.total_with_discount() for item in self.items.all()) - # return total_with_item_discount * ((100 - discount_percent) / 100) # discount_percent = self.discount_code.percent + # return total_with_item_discount * ((100 - discount_percent) / 100) pass + + def tax(self): return self.total_without_tax() * 0.2 @@ -101,9 +106,12 @@ class OrderModel(models.Model): pass # return self.total_with_discount() + self.tax() + def final_price(self): pass + def submit_cart(self): + pass diff --git a/backend/order/serializers.py b/backend/order/serializers.py index 17329b2..cf63163 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -20,20 +20,27 @@ class OrderItemSerailzier(serializers.ModelSerializer): class CartSerializer(serializers.ModelSerializer): items = OrderItemSerailzier(many=True) - discount = serializers.SerializerMethodField() + 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', 'discount', 'tax', 'final_price'] + fields = [ 'discount_code', 'items', 'cart_total', 'product_discount', 'tax', 'final_price'] def get_discount_code(self, obj): - return obj.discount_code.code if obj.discount_code else None + if obj.discount_code: + return { + 'code': obj.discount_code.code, + 'persent': obj.discount_code.percent, + 'amount': '100,000 تومان' + } + else: + return None - def get_discount(self, obj): + def get_product_discount(self, obj): return [ { 'product_name': 'iphone 13', @@ -47,6 +54,9 @@ class CartSerializer(serializers.ModelSerializer): }, ] + + + def get_tax(self, obj): return 1000