From 32ec86b3b4245c26c2f64f123beaa15e78bdfaa3 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 12 Nov 2025 13:54:21 +0500 Subject: [PATCH] fix --- core/apps/orders/admin/order.py | 1 + core/apps/orders/admin/party.py | 3 + .../commands/import_party_by_number.py | 183 +++++++++--------- core/apps/orders/models/party.py | 3 +- 4 files changed, 97 insertions(+), 93 deletions(-) diff --git a/core/apps/orders/admin/order.py b/core/apps/orders/admin/order.py index e653faa..85df595 100644 --- a/core/apps/orders/admin/order.py +++ b/core/apps/orders/admin/order.py @@ -7,6 +7,7 @@ from core.apps.orders.models import Order class OrderAdmin(admin.ModelAdmin): list_display = ['id', 'product', 'wherehouse', 'currency', 'counterparty'] list_filter = ['counterparty'] + search_fields = ['parties__number'] # # Statuslar: {'ORDERED', 'PARTIALLY_RECIEVED', 'pending', "open", "buying", "rejected", "recieved", "passive"} # open -> yangi == NEW diff --git a/core/apps/orders/admin/party.py b/core/apps/orders/admin/party.py index 95784fc..7a585db 100644 --- a/core/apps/orders/admin/party.py +++ b/core/apps/orders/admin/party.py @@ -26,6 +26,9 @@ class PartyAdmin(admin.ModelAdmin): "number", "orders__counterparty__name" ] + def get_queryset(self, request): + return super().get_queryset(request).select_related('party_amount') + @admin.register(PartyAmount) class PartyAmountAdmin(admin.ModelAdmin): diff --git a/core/apps/orders/management/commands/import_party_by_number.py b/core/apps/orders/management/commands/import_party_by_number.py index 937e659..9fa1a6a 100644 --- a/core/apps/orders/management/commands/import_party_by_number.py +++ b/core/apps/orders/management/commands/import_party_by_number.py @@ -25,104 +25,103 @@ headers = {"Authorization": f"Bearer {token}"} class Command(BaseCommand): def add_arguments(self, parser): - parser.add_argument("ids", type=list) + parser.add_argument("ids", type=int, nargs="+") def handle(self, *args, **options): - for page in range(1,6): - data = options['ids'] - statuses = { - "open": "NEW", - "ordered": "PARTY_IS_MADE", - "pending": "EXPECTED", - "passive": "DRAFT", - "recieved": "RECIEVED", - "rejected": "CANCELLED", - "buying": "PURCHASED", - "partially_recieved": "PROCESS" - } + ids = options['ids'] + statuses = { + "open": "NEW", + "ordered": "PARTY_IS_MADE", + "pending": "EXPECTED", + "passive": "DRAFT", + "recieved": "RECIEVED", + "rejected": "CANCELLED", + "buying": "PURCHASED", + "partially_recieved": "PROCESS" + } - for id in data: - url = f"https://backend.app.uyqur.uz/main/supply/order-view?id={id}" - res = requests.get(url, headers=headers) - data = res.json()["data"] - user = None - if data.get("agent"): - user = User.objects.filter(full_name=data["agent"]["full_name"]).first() - if not user: + for id in ids: + url = f"https://backend.app.uyqur.uz/main/supply/order-view?id={id}" + res = requests.get(url, headers=headers) + data = res.json()['data'] + user = None + if data.get("agent"): + user = User.objects.filter(full_name=data["agent"]["full_name"]).first() + if not user: + continue + + party, created = Party.objects.update_or_create( + number=data["id"], + defaults={ + "mediator": user, + "delivery_date": parse_date(data["delivery_date"]), + "closed_date": parse_date(data["recieved_date"]), + "order_date": parse_date(data["ordered_date"]), + "payment_date": ( + parse_date(data["payment_date"]) + if parse_date(data["payment_date"]) + else parse_date(data["ordered_date"]) + ), + "status": statuses.get(data["status"].lower()), + "payment_percentage": data["payment_percent"], + "process": data["percent"], + }, + ) + orders = [] + total_price = 0 + paid_amount = 0 + calculated_amount = 0 + must_pay_amount = 0 + debt_amount = 0 + for i in data["warehouse_products"]: + product = Product.objects.filter( + name__icontains=i["product"]["name"]["uz"] + ).first() + if not product: continue - - party, created = Party.objects.update_or_create( - number=data["id"], - defaults={ - "mediator": user, - "delivery_date": parse_date(data["delivery_date"]), - "closed_date": parse_date(data["recieved_date"]), - "order_date": parse_date(data["ordered_date"]), - "payment_date": ( - parse_date(data["payment_date"]) - if parse_date(data["payment_date"]) - else parse_date(data["ordered_date"]) - ), - "status": statuses.get(data["status"].lower()), - "payment_percentage": data["payment_percent"], - "process": data["percent"], - }, - ) - orders = [] - total_price = 0 - paid_amount = 0 - calculated_amount = 0 - must_pay_amount = 0 - debt_amount = 0 - for i in data["warehouse_products"]: - product = Product.objects.filter( - name__icontains=i["product"]["name"]["uz"] + unit, created = Unity.objects.get_or_create(value=i["unit"]["name"]["uz"]) + counterparty = Counterparty.objects.filter( + name=i["company_person"]["name"] + ).first() + wherehouse = None + if i.get("warehouse"): + wherehouse = WhereHouse.objects.filter( + name=i.get("warehouse").get("name") ).first() - if not product: - continue - unit, created = Unity.objects.get_or_create(value=i["unit"]["name"]["uz"]) - counterparty = Counterparty.objects.filter( - name=i["company_person"]["name"] + project_folder = None + if i.get("project"): + project_folder = ProjectFolder.objects.filter( + name=i["project"]["name"] ).first() - wherehouse = None - if i.get("warehouse"): - wherehouse = WhereHouse.objects.filter( - name=i.get("warehouse").get("name") - ).first() - project_folder = None - if i.get("project"): - project_folder = ProjectFolder.objects.filter( - name=i["project"]["name"] - ).first() - order = Order.objects.create( - product=product, - amount=i["amount"], - total_price=i["total_amount"], - quantity=i["quantity"], - unity=unit, - currency=i["currency"]["symbol"].lower(), - project_folder=project_folder, - wherehouse=wherehouse, - counterparty=counterparty, - type='party', - ) - total_price += i["total_amount"] - paid_amount += i["paid_amount"] - calculated_amount += i["calculated_amount"] - must_pay_amount += i["must_pay_amount"] - debt_amount += i['debt_amount'] - orders.append(order) - party.orders.set(orders) - PartyAmount.objects.get_or_create( - party=party, - defaults={ - "total_price": total_price, - "calculated_amount": calculated_amount, - "paid_amount": paid_amount, - "payment_amount": must_pay_amount, - "debt_amount": debt_amount, - # "total_expense_amount": item['total_expense_amount'], - }, + order = Order.objects.create( + product=product, + amount=i["amount"], + total_price=i["total_amount"], + quantity=i["quantity"], + unity=unit, + currency=i["currency"]["symbol"].lower(), + project_folder=project_folder, + wherehouse=wherehouse, + counterparty=counterparty, + type='party', ) + total_price += i["total_amount"] + paid_amount += i["paid_amount"] + calculated_amount += i["calculated_amount"] + must_pay_amount += i["must_pay_amount"] + debt_amount += i['debt_amount'] + orders.append(order) + party.orders.set(orders) + PartyAmount.objects.get_or_create( + party=party, + defaults={ + "total_price": total_price, + "calculated_amount": calculated_amount, + "paid_amount": paid_amount, + "payment_amount": must_pay_amount, + "debt_amount": debt_amount, + # "total_expense_amount": item['total_expense_amount'], + }, + ) self.stdout.write("Parties added") \ No newline at end of file diff --git a/core/apps/orders/models/party.py b/core/apps/orders/models/party.py index a5f2628..7f5bcd8 100644 --- a/core/apps/orders/models/party.py +++ b/core/apps/orders/models/party.py @@ -76,7 +76,8 @@ class Party(BaseModel): for order in self.orders.all(): count += 1 percentage += order.completion_percentage - self.process = percentage / count + if percentage > 0 and count > 0: + self.process = percentage / count return super().save(*args, **kwargs)