From 2589ac7321a6bc99e6415e95f7f11038150fdf2b Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Tue, 11 Mar 2025 00:09:36 +0330 Subject: [PATCH] discount admin and code to name update --- backend/core/settings/unfold_conf.py | 5 +++++ backend/order/admin.py | 6 +++++ .../0012_rename_name_discountcode_code.py | 18 +++++++++++++++ backend/order/models.py | 22 ++++++++++++------- backend/order/serializers.py | 9 +++++++- 5 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 backend/order/migrations/0012_rename_name_discountcode_code.py diff --git a/backend/core/settings/unfold_conf.py b/backend/core/settings/unfold_conf.py index e6a87e1..3f4deba 100644 --- a/backend/core/settings/unfold_conf.py +++ b/backend/core/settings/unfold_conf.py @@ -135,6 +135,11 @@ UNFOLD = { "link": reverse_lazy("admin:product_dollormodel_changelist"), "badge": "utils.admin.dollor_price", }, + { + "title": _("کد تخفیف"), + "icon": "payments", + "link": reverse_lazy("admin:order_discountcode_changelist"), + }, ], }, diff --git a/backend/order/admin.py b/backend/order/admin.py index 3626c1a..0cc6e52 100644 --- a/backend/order/admin.py +++ b/backend/order/admin.py @@ -19,6 +19,12 @@ class OrderItemModelInline(StackedInline): +@admin.register(DiscountCode) +class DiscountCodeAdmin(ModelAdmin, ImportExportModelAdmin): + import_form_class = ImportForm + export_form_class = ExportForm + list_display = ['code', 'expiration_date', 'percent', 'quantity'] + @admin.register(OrderModel) class OrderAdmin(ModelAdmin, ImportExportModelAdmin): diff --git a/backend/order/migrations/0012_rename_name_discountcode_code.py b/backend/order/migrations/0012_rename_name_discountcode_code.py new file mode 100644 index 0000000..6dda311 --- /dev/null +++ b/backend/order/migrations/0012_rename_name_discountcode_code.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.2 on 2025-03-10 20:10 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0011_orderitemmodel_price'), + ] + + operations = [ + migrations.RenameField( + model_name='discountcode', + old_name='name', + new_name='code', + ), + ] diff --git a/backend/order/models.py b/backend/order/models.py index 1251999..ea67986 100644 --- a/backend/order/models.py +++ b/backend/order/models.py @@ -6,20 +6,31 @@ from .execptions import DiscountNotAvailableError from django_jalali.db import models as jmodels class DiscountCode(models.Model): - name = models.CharField(max_length=50, verbose_name='کد تخفیف') + code = models.CharField(max_length=50, verbose_name='کد تخفیف') percent = models.DecimalField(max_digits=4, decimal_places=2, verbose_name='درصد') quantity = models.PositiveIntegerField(verbose_name='تعداد') expiration_date = models.DateTimeField(verbose_name='تاریخ انقضا') def __str__(self): - return self.name + return self.code class Meta: verbose_name = 'کد تخفیف' verbose_name_plural = 'کد های تخفیف' + def is_valid(self): return self.expiration_date > timezone.now() and self.quantity > 0 + def not_valid_reason(self): + if self.expiration_date > timezone.now() and self.quantity > 0: + return 'این کد معتبر میباشد' + elif not self.expiration_date > timezone.now(): + return 'تایم کد تخفیف تمام شده' + elif not self.quantity > 0: + return 'این کد تخفیف تمام شده است' + else: + print('log later bug') + class OrderModel(models.Model): @@ -82,15 +93,10 @@ class OrderModel(models.Model): pass # return self.total_with_discount() + self.tax() - def remove_order_item(self, item_pk, quantity): + def final_price(self): pass - def add_order_item(self, item_pk, quantity): - status = '' - return status - def clear_cart(self): - pass diff --git a/backend/order/serializers.py b/backend/order/serializers.py index f796e5b..5b1b340 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -1,7 +1,14 @@ from rest_framework import serializers -from .models import OrderItemModel, OrderModel +from .models import OrderItemModel, OrderModel, DiscountCode from product.serializers import ProductVariantSerialzier +class DiscountCodeSerializer(serializers.ModelSerializer): + class Meta: + model = DiscountCode + fields = ('code', 'percent') + read_only_fields = ('percent',) + + class OrderItemSerailzier(serializers.ModelSerializer): product = serializers.SerializerMethodField() class Meta: