From 96cfcf1fcb143452a600aa26308a08a48997d407 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Mon, 17 Feb 2025 22:40:44 +0330 Subject: [PATCH] persion datetime and serializer ticket udpate --- backend/core/settings/base.py | 22 ++++++++++++++ .../0006_alter_ordermodel_created_at.py | 19 ++++++++++++ ...ename_created_at_ordermodel_created_at1.py | 18 ++++++++++++ ...ename_created_at1_ordermodel_created_at.py | 18 ++++++++++++ .../0009_alter_ordermodel_created_at.py | 19 ++++++++++++ backend/order/models.py | 5 ++-- backend/order/serializers.py | 9 ++++-- .../ticket/migrations/0009_ticket_order.py | 20 +++++++++++++ ...ted_at_alter_ticket_created_at_and_more.py | 29 +++++++++++++++++++ backend/ticket/models.py | 11 +++++-- backend/ticket/serializers.py | 8 +++-- 11 files changed, 168 insertions(+), 10 deletions(-) create mode 100644 backend/order/migrations/0006_alter_ordermodel_created_at.py create mode 100644 backend/order/migrations/0007_rename_created_at_ordermodel_created_at1.py create mode 100644 backend/order/migrations/0008_rename_created_at1_ordermodel_created_at.py create mode 100644 backend/order/migrations/0009_alter_ordermodel_created_at.py create mode 100644 backend/ticket/migrations/0009_ticket_order.py create mode 100644 backend/ticket/migrations/0010_alter_message_created_at_alter_ticket_created_at_and_more.py diff --git a/backend/core/settings/base.py b/backend/core/settings/base.py index 237019d..8d4307b 100644 --- a/backend/core/settings/base.py +++ b/backend/core/settings/base.py @@ -59,6 +59,7 @@ INSTALLED_APPS = [ 'rest_framework_simplejwt.token_blacklist', 'rest_framework.authtoken', 'import_export', + "django_jalali", # custom apps 'product', 'account', @@ -67,8 +68,29 @@ INSTALLED_APPS = [ 'order', 'home', 'blog', + ] +JALALI_SETTINGS = { + # JavaScript static files for the admin Jalali date widget + "ADMIN_JS_STATIC_FILES": [ + "admin/jquery.ui.datepicker.jalali/scripts/jquery-1.10.2.min.js", + "admin/jquery.ui.datepicker.jalali/scripts/jquery.ui.core.js", + "admin/jquery.ui.datepicker.jalali/scripts/jquery.ui.datepicker-cc.js", + "admin/jquery.ui.datepicker.jalali/scripts/calendar.js", + "admin/jquery.ui.datepicker.jalali/scripts/jquery.ui.datepicker-cc-fa.js", + "admin/main.js", + ], + # CSS static files for the admin Jalali date widget + "ADMIN_CSS_STATIC_FILES": { + "all": [ + "admin/jquery.ui.datepicker.jalali/themes/base/jquery-ui.min.css", + "admin/css/main.css", + ] + }, +} + + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', "whitenoise.middleware.WhiteNoiseMiddleware", diff --git a/backend/order/migrations/0006_alter_ordermodel_created_at.py b/backend/order/migrations/0006_alter_ordermodel_created_at.py new file mode 100644 index 0000000..a615cbe --- /dev/null +++ b/backend/order/migrations/0006_alter_ordermodel_created_at.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.2 on 2025-02-17 18:15 + +import django_jalali.db.models +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0005_alter_orderitemmodel_options'), + ] + + operations = [ + migrations.AlterField( + model_name='ordermodel', + name='created_at', + field=django_jalali.db.models.jDateField(blank=True, null=True, verbose_name='تاریخ سفارش'), + ), + ] diff --git a/backend/order/migrations/0007_rename_created_at_ordermodel_created_at1.py b/backend/order/migrations/0007_rename_created_at_ordermodel_created_at1.py new file mode 100644 index 0000000..8d5beb3 --- /dev/null +++ b/backend/order/migrations/0007_rename_created_at_ordermodel_created_at1.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.2 on 2025-02-17 18:24 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0006_alter_ordermodel_created_at'), + ] + + operations = [ + migrations.RenameField( + model_name='ordermodel', + old_name='created_at', + new_name='created_at1', + ), + ] diff --git a/backend/order/migrations/0008_rename_created_at1_ordermodel_created_at.py b/backend/order/migrations/0008_rename_created_at1_ordermodel_created_at.py new file mode 100644 index 0000000..afa9db2 --- /dev/null +++ b/backend/order/migrations/0008_rename_created_at1_ordermodel_created_at.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.2 on 2025-02-17 18:24 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0007_rename_created_at_ordermodel_created_at1'), + ] + + operations = [ + migrations.RenameField( + model_name='ordermodel', + old_name='created_at1', + new_name='created_at', + ), + ] diff --git a/backend/order/migrations/0009_alter_ordermodel_created_at.py b/backend/order/migrations/0009_alter_ordermodel_created_at.py new file mode 100644 index 0000000..cfe3434 --- /dev/null +++ b/backend/order/migrations/0009_alter_ordermodel_created_at.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.2 on 2025-02-17 18:46 + +import django_jalali.db.models +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0008_rename_created_at1_ordermodel_created_at'), + ] + + operations = [ + migrations.AlterField( + model_name='ordermodel', + name='created_at', + field=django_jalali.db.models.jDateField(blank=True, null=True, verbose_name='تاریخ ثبت سفارش'), + ), + ] diff --git a/backend/order/models.py b/backend/order/models.py index 01cf4d1..570351b 100644 --- a/backend/order/models.py +++ b/backend/order/models.py @@ -3,7 +3,7 @@ from account.models import User, UserAddressModel, PushSubscription from product.models import ProductModel, ProductVariant, ProductImageModel from django.utils import timezone from .execptions import DiscountNotAvailableError - +from django_jalali.db import models as jmodels class DiscountCode(models.Model): name = models.CharField(max_length=50, verbose_name='کد تخفیف') @@ -23,6 +23,7 @@ class DiscountCode(models.Model): class OrderModel(models.Model): + objects = jmodels.jManager() STATUS_CHOICES = [ ('CART', 'در سبد خرید'), ('ADMIN_PENDING', 'در انتظار تایید'), @@ -34,7 +35,7 @@ class OrderModel(models.Model): ] user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='orders', verbose_name='کاربر') address = models.ForeignKey(UserAddressModel, on_delete=models.SET_NULL, related_name='orders', null=True, verbose_name='ادرس') - created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ سفارش") + created_at = jmodels.jDateField(blank=True, null=True, verbose_name="تاریخ ثبت سفارش") 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="وضعیت سفارش") diff --git a/backend/order/serializers.py b/backend/order/serializers.py index 2a7d8e8..b9337c0 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -1,9 +1,14 @@ from rest_framework import serializers -from .models import OrderItemModel +from .models import OrderItemModel, OrderModel class OrderItemSerailzier(serializers.ModelSerializer): class Meta: model = OrderItemModel fields = "__all__" - read_only_fields = ('order', 'product') \ No newline at end of file + read_only_fields = ('order', 'product') + +class OrderModelSerializer(serializers.ModelSerializer): + class Meta: + model = OrderModel + fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code'] \ No newline at end of file diff --git a/backend/ticket/migrations/0009_ticket_order.py b/backend/ticket/migrations/0009_ticket_order.py new file mode 100644 index 0000000..47bd507 --- /dev/null +++ b/backend/ticket/migrations/0009_ticket_order.py @@ -0,0 +1,20 @@ +# Generated by Django 5.1.2 on 2025-02-17 18:23 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0006_alter_ordermodel_created_at'), + ('ticket', '0008_alter_ticket_ticket_category'), + ] + + operations = [ + migrations.AddField( + model_name='ticket', + name='order', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='order.ordermodel'), + ), + ] diff --git a/backend/ticket/migrations/0010_alter_message_created_at_alter_ticket_created_at_and_more.py b/backend/ticket/migrations/0010_alter_message_created_at_alter_ticket_created_at_and_more.py new file mode 100644 index 0000000..a680ddf --- /dev/null +++ b/backend/ticket/migrations/0010_alter_message_created_at_alter_ticket_created_at_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 5.1.2 on 2025-02-17 18:46 + +import django_jalali.db.models +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ticket', '0009_ticket_order'), + ] + + operations = [ + migrations.AlterField( + model_name='message', + name='created_at', + field=django_jalali.db.models.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در'), + ), + migrations.AlterField( + model_name='ticket', + name='created_at', + field=django_jalali.db.models.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در'), + ), + migrations.AlterField( + model_name='ticket', + name='updated_at', + field=django_jalali.db.models.jDateTimeField(auto_now=True, verbose_name='اپدیت شده در'), + ), + ] diff --git a/backend/ticket/models.py b/backend/ticket/models.py index c6d7fcb..b59682b 100644 --- a/backend/ticket/models.py +++ b/backend/ticket/models.py @@ -1,7 +1,10 @@ from django.db import models from account.models import User +from order.models import OrderModel +from django_jalali.db import models as jmodels class Ticket(models.Model): + objects = jmodels.jManager() STATUS_CHOICES = [ ('open', 'باز'), ('in_progress', 'در حال پردازش'), @@ -22,8 +25,9 @@ class Ticket(models.Model): customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر') admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین') status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='open', verbose_name='وضعیت تیکت') - created_at = models.DateTimeField(auto_now_add=True, verbose_name='ساخته شده در') - updated_at = models.DateTimeField(auto_now=True, verbose_name='اپدیت شده در') + created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در') + updated_at = jmodels.jDateTimeField(auto_now=True, verbose_name='اپدیت شده در') + order = models.ForeignKey(OrderModel ,blank=True, null=True, on_delete=models.SET_NULL) def __str__(self): return self.subject @@ -35,10 +39,11 @@ class Ticket(models.Model): class Message(models.Model): + objects = jmodels.jManager() ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name="messages", verbose_name='تیکت') sender = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='ارسال کننده') content = models.TextField(verbose_name='محتوای پیام') - created_at = models.DateTimeField(auto_now_add=True, verbose_name='ساخته شده در') + created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در') def __str__(self): return f"Message by {self.sender.full_name} on {self.ticket.subject}" diff --git a/backend/ticket/serializers.py b/backend/ticket/serializers.py index d9afdcb..362d18e 100644 --- a/backend/ticket/serializers.py +++ b/backend/ticket/serializers.py @@ -1,6 +1,7 @@ from rest_framework import serializers from .models import Ticket, Message - +from django.utils.timezone import localtime +from account.serializers import ProfileSerializer class MessageSerializer(serializers.ModelSerializer): class Meta: model = Message @@ -8,7 +9,8 @@ class MessageSerializer(serializers.ModelSerializer): class TicketSerializer(serializers.ModelSerializer): messages = MessageSerializer(many=True, read_only=True) - + admin = ProfileSerializer(read_only=True) class Meta: model = Ticket - fields = '__all__' \ No newline at end of file + exclude = ('customer', ) + read_only_fields = ('status', 'admin', ) \ No newline at end of file