diff --git a/core/apps/orders/admin/order.py b/core/apps/orders/admin/order.py index 3b4c4b9..c09e579 100644 --- a/core/apps/orders/admin/order.py +++ b/core/apps/orders/admin/order.py @@ -5,5 +5,4 @@ from core.apps.orders.models import Order @admin.register(Order) class OrderAdmin(admin.ModelAdmin): - list_display = ['quantity', 'product', 'unity', 'project', 'wherehouse'] - list_display = ['unity', 'project', 'wherehouse'] + list_display = ['unity', 'project', 'wherehouse', 'currency'] diff --git a/core/apps/orders/apps.py b/core/apps/orders/apps.py index 4250ca1..305d1cb 100644 --- a/core/apps/orders/apps.py +++ b/core/apps/orders/apps.py @@ -7,4 +7,4 @@ class OrdersConfig(AppConfig): def ready(self): from . import admin - \ No newline at end of file + from . import signals \ No newline at end of file diff --git a/core/apps/orders/migrations/0021_party_currency.py b/core/apps/orders/migrations/0021_party_currency.py new file mode 100644 index 0000000..4929783 --- /dev/null +++ b/core/apps/orders/migrations/0021_party_currency.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.4 on 2025-08-23 11:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0020_party_discount_currency'), + ] + + operations = [ + migrations.AddField( + model_name='party', + name='currency', + field=models.CharField(choices=[('usd', 'usd'), ('uzs', 'uzs')], default='uzs', max_length=3), + ), + ] diff --git a/core/apps/orders/models/party.py b/core/apps/orders/models/party.py index ef1d451..6966bce 100644 --- a/core/apps/orders/models/party.py +++ b/core/apps/orders/models/party.py @@ -39,6 +39,7 @@ class Party(BaseModel): status = models.CharField(max_length=20, choices=STATUS, default='NEW') payment_status = models.CharField(max_length=20, choices=PAYMENT_STATUS, default='NOT_PAID') confirmation = models.CharField(max_length=20, choices=CONFIRMATION, default='EXPECTED') + currency = models.CharField(choices=[('usd', 'usd'), ('uzs', 'uzs')], max_length=3, default='uzs') # percentages payment_percentage = models.FloatField(null=True, blank=True) process = models.FloatField(null=True, blank=True) diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index f64755e..7538662 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -92,12 +92,13 @@ class OrderListSerializer(serializers.ModelSerializer): wherehouse = WhereHouseListSerializer() project_folder = ProjectFolderListSerializer() employee = serializers.SerializerMethodField(method_name='get_employee') + counterparty = serializers.SerializerMethodField(method_name='get_counterparty') class Meta: model = Order fields = [ 'id', 'product', 'unity', 'quantity', 'project', 'project_folder', - 'wherehouse', 'date', 'status', 'employee' + 'wherehouse', 'date', 'status', 'employee', 'counterparty' ] def get_employee(self, obj): @@ -107,6 +108,12 @@ class OrderListSerializer(serializers.ModelSerializer): "phone_number": obj.employee.phone_number } if obj.employee else None + def get_counterparty(self, obj): + return { + 'id': obj.counterparty.id, + 'name': obj.counterparty.name, + } if obj.counterparty else None + class OrderUpdateSerializer(serializers.ModelSerializer): class Meta: diff --git a/core/apps/orders/signals/__init__.py b/core/apps/orders/signals/__init__.py new file mode 100644 index 0000000..c4ac242 --- /dev/null +++ b/core/apps/orders/signals/__init__.py @@ -0,0 +1 @@ +from .party import * \ No newline at end of file diff --git a/core/apps/orders/signals/party.py b/core/apps/orders/signals/party.py new file mode 100644 index 0000000..5049afa --- /dev/null +++ b/core/apps/orders/signals/party.py @@ -0,0 +1,36 @@ +from django.db.models.signals import m2m_changed, post_save +from django.dispatch import receiver + +from core.apps.orders.models.party import Party, PartyAmount + + +# @receiver(m2m_changed, sender=Party) +# def change_party_currency(sender, instance, action, **kwargs): +# currencies = set(instance.orders.values_list("currency", flat=True)) +# print(instance.orders) +# for order in instance.orders.all(): +# print(order.currency) +# print(currencies) +# if "usd" in currencies and "uzs" in currencies: +# instance.currency = "uzs" +# elif currencies == {"usd"}: +# instance.currency = "usd" +# elif currencies == {"uzs"}: +# instance.currency = "uzs" +# instance.save() + + +# @receiver(post_save, sender=Party) +# def change_party_currency(sender, instance, created, **kwargs): +# currencies = set() +# for order in instance.orders.all(): +# currencies.add(order.currency) +# print(order.currency) +# if "usd" in currencies and "uzs" in currencies: +# instance.currency = "uzs" +# elif currencies == {"usd"}: +# instance.currency = "usd" +# elif currencies == {"uzs"}: +# instance.currency = "uzs" + +# instance.save(update_fields=["currency"]) diff --git a/core/apps/shared/admin/__init__.py b/core/apps/shared/admin/__init__.py index 08c1add..f8a0716 100644 --- a/core/apps/shared/admin/__init__.py +++ b/core/apps/shared/admin/__init__.py @@ -1 +1,2 @@ -from .region import * \ No newline at end of file +from .region import * +from .usd_course import * \ No newline at end of file diff --git a/core/apps/shared/admin/usd_course.py b/core/apps/shared/admin/usd_course.py new file mode 100644 index 0000000..760339d --- /dev/null +++ b/core/apps/shared/admin/usd_course.py @@ -0,0 +1,23 @@ +from django.contrib import admin +from django.http import HttpResponseRedirect +from django.urls import reverse + +from core.apps.shared.models import UsdCourse + + +@admin.register(UsdCourse) +class UsdCourseAdmin(admin.ModelAdmin): + def has_add_permission(self, request): + return not UsdCourse.objects.exists() + + def has_delete_permission(self, request, obj = ...): + return False + + def changelist_view(self, request, extra_context=None): + config, created = UsdCourse.objects.get_or_create( + defaults=dict( + value=0 + ) + ) + url = reverse("admin:shared_usdcourse_change", args=[config.id]) + return HttpResponseRedirect(url) \ No newline at end of file diff --git a/core/apps/shared/migrations/0002_usdcourse.py b/core/apps/shared/migrations/0002_usdcourse.py new file mode 100644 index 0000000..c654bde --- /dev/null +++ b/core/apps/shared/migrations/0002_usdcourse.py @@ -0,0 +1,27 @@ +# Generated by Django 5.2.4 on 2025-08-23 11:35 + +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shared', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='UsdCourse', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('value', models.PositiveBigIntegerField()), + ], + options={ + 'verbose_name': 'dollar kursi', + 'verbose_name_plural': 'dollar kursi', + }, + ), + ] diff --git a/core/apps/shared/models/__init__.py b/core/apps/shared/models/__init__.py index d9458e2..e881cfd 100644 --- a/core/apps/shared/models/__init__.py +++ b/core/apps/shared/models/__init__.py @@ -1,2 +1,3 @@ from .base import BaseModel -from .region import * \ No newline at end of file +from .region import * +from .usd_course import * \ No newline at end of file diff --git a/core/apps/shared/models/usd_course.py b/core/apps/shared/models/usd_course.py new file mode 100644 index 0000000..32e5f25 --- /dev/null +++ b/core/apps/shared/models/usd_course.py @@ -0,0 +1,12 @@ +from django.db import models + +from core.apps.shared.models import BaseModel + + +class UsdCourse(BaseModel): + value = models.PositiveBigIntegerField() + + class Meta: + verbose_name = 'dollar kursi' + verbose_name_plural = 'dollar kursi' +