From 7e2e62d48ce435594bf83f3cba9295821a46f9cd Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Thu, 21 Aug 2025 10:17:59 +0500 Subject: [PATCH] add party model --- core/apps/orders/admin/__init__.py | 3 +- core/apps/orders/admin/party.py | 9 +++ ...der_currency_order_total_price_and_more.py | 57 +++++++++++++++++++ core/apps/orders/models/__init__.py | 3 +- core/apps/orders/models/order.py | 9 +++ core/apps/orders/models/party.py | 25 ++++++++ 6 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 core/apps/orders/admin/party.py create mode 100644 core/apps/orders/migrations/0009_order_counterparty_order_currency_order_total_price_and_more.py create mode 100644 core/apps/orders/models/party.py diff --git a/core/apps/orders/admin/__init__.py b/core/apps/orders/admin/__init__.py index 93e5e7a..b001516 100644 --- a/core/apps/orders/admin/__init__.py +++ b/core/apps/orders/admin/__init__.py @@ -1,2 +1,3 @@ from .order import * -from .offer import * \ No newline at end of file +from .offer import * +from .party import * \ No newline at end of file diff --git a/core/apps/orders/admin/party.py b/core/apps/orders/admin/party.py new file mode 100644 index 0000000..cd71f0e --- /dev/null +++ b/core/apps/orders/admin/party.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from core.apps.orders.models import Party + + +@admin.register(Party) +class PartyAdmin(admin.ModelAdmin): + list_display = ['mediator', 'delivery_date', 'payment_date'] + \ No newline at end of file diff --git a/core/apps/orders/migrations/0009_order_counterparty_order_currency_order_total_price_and_more.py b/core/apps/orders/migrations/0009_order_counterparty_order_currency_order_total_price_and_more.py new file mode 100644 index 0000000..db14d52 --- /dev/null +++ b/core/apps/orders/migrations/0009_order_counterparty_order_currency_order_total_price_and_more.py @@ -0,0 +1,57 @@ +# Generated by Django 5.2.4 on 2025-08-21 10:14 + +import django.db.models.deletion +import uuid +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('counterparty', '0001_initial'), + ('orders', '0008_remove_offer_name_offer_counterparty'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='counterparty', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='order', to='counterparty.counterparty'), + ), + migrations.AddField( + model_name='order', + name='currency', + field=models.CharField(blank=True, choices=[('uzs', 'uzs'), ('usd', 'usd')], default='uzs', max_length=3, null=True), + ), + migrations.AddField( + model_name='order', + name='total_price', + field=models.PositiveBigIntegerField(blank=True, default=0, null=True), + ), + migrations.AddField( + model_name='order', + name='unit_amount', + field=models.PositiveBigIntegerField(blank=True, default=0, null=True), + ), + migrations.CreateModel( + name='Party', + 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)), + ('delivery_date', models.DateField()), + ('payment_date', models.DateField()), + ('comment', models.TextField(blank=True, null=True)), + ('audit', models.CharField(blank=True, choices=[('CHECKED', 'tekshirildi'), ('PROCESS', 'jarayonda')], max_length=20, null=True)), + ('audit_comment', models.TextField(blank=True, null=True)), + ('mediator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='parties', to=settings.AUTH_USER_MODEL)), + ('orders', models.ManyToManyField(blank=True, null=True, related_name='parties', to='orders.order')), + ], + options={ + 'verbose_name': 'Partiya', + 'verbose_name_plural': 'Partiyalar', + }, + ), + ] diff --git a/core/apps/orders/models/__init__.py b/core/apps/orders/models/__init__.py index 5b5e519..d2231f2 100644 --- a/core/apps/orders/models/__init__.py +++ b/core/apps/orders/models/__init__.py @@ -1,2 +1,3 @@ from .order import * -from .order_offer import * \ No newline at end of file +from .order_offer import * +from .party import * \ No newline at end of file diff --git a/core/apps/orders/models/order.py b/core/apps/orders/models/order.py index ec66d11..f9fc8b3 100644 --- a/core/apps/orders/models/order.py +++ b/core/apps/orders/models/order.py @@ -6,6 +6,7 @@ from core.apps.products.models import Product, Unity from core.apps.projects.models import Project, ProjectFolder from core.apps.accounts.models import User from core.apps.wherehouse.models import WhereHouse +from core.apps.counterparty.models import Counterparty class Order(BaseModel): @@ -34,6 +35,14 @@ class Order(BaseModel): quantity = models.PositiveBigIntegerField(default=1) status = models.CharField(max_length=20, choices=STATUS, default="NEW") employee = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders', null=True) + unit_amount = models.PositiveBigIntegerField(default=0, null=True, blank=True) + counterparty = models.ForeignKey( + Counterparty, on_delete=models.SET_NULL, null=True, blank=True, related_name='order' + ) + currency = models.CharField( + choices=[('uzs', 'uzs'), ('usd', 'usd')], default='uzs', null=True, blank=True, max_length=3 + ) + total_price = models.PositiveBigIntegerField(default=0, null=True, blank=True) def __str__(self): return f"{self.product} {self.unity} quantity order" diff --git a/core/apps/orders/models/party.py b/core/apps/orders/models/party.py new file mode 100644 index 0000000..5c63367 --- /dev/null +++ b/core/apps/orders/models/party.py @@ -0,0 +1,25 @@ +from django.db import models + +from core.apps.shared.models import BaseModel +from core.apps.orders.models.order import Order +from core.apps.accounts.models import User + + +class Party(BaseModel): + orders = models.ManyToManyField(Order, related_name='parties', null=True, blank=True) + mediator = models.ForeignKey(User, on_delete=models.CASCADE, related_name='parties') + delivery_date = models.DateField() + payment_date = models.DateField() + comment = models.TextField(null=True, blank=True) + audit = models.CharField( + max_length=20, choices=[('CHECKED', 'tekshirildi'),('PROCESS', 'jarayonda')], + null=True, blank=True + ) + audit_comment = models.TextField(null=True, blank=True) + + def __str__(self): + return f'{self.mediator.full_name} {self.delivery_date}' + + class Meta: + verbose_name = 'Partiya' + verbose_name_plural = 'Partiyalar'