From 52daf9513b721f2b891320908259c25d4d1b4466 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Mon, 3 Nov 2025 18:25:43 +0500 Subject: [PATCH] fix import party command --- .../management/commands/import_party.py | 197 +++++++++--------- 1 file changed, 100 insertions(+), 97 deletions(-) diff --git a/core/apps/orders/management/commands/import_party.py b/core/apps/orders/management/commands/import_party.py index 2e4b1ff..3305dfd 100644 --- a/core/apps/orders/management/commands/import_party.py +++ b/core/apps/orders/management/commands/import_party.py @@ -11,109 +11,112 @@ from core.apps.products.models import Product, Unity from core.apps.projects.models import Project, ProjectFolder from core.apps.wherehouse.models import WhereHouse -token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTgzMzg2OSwiZXhwIjoxNzYxOTIwMjY5LCJuYmYiOjE3NjE4MzM4NjksImp0aSI6IjZSQWE1RzlyT0pGbXF1T2kiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.ACT7oxl-A2eit_bzxeal2jF_xLa0klFObNBpp1HuheE" +token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjE1NzIzNywiZXhwIjoxNzYyMjQzNjM3LCJuYmYiOjE3NjIxNTcyMzcsImp0aSI6Ijh3WXVpbHBIUU43eVdhdE4iLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.uAebDLZUDKbImw8M9ZLEYApc2Li19a1XD6RJRcMvchY" + +headers = {"Authorization": f"Bearer {token}"} + +def get_data(page): + url = f"https://backend.app.uyqur.uz/main/supply/order-view?size=1000&page={page}" + response = requests.get(url, headers=headers) + + if response.status_code == 200: + return response.json() + print(response.json()) class Command(BaseCommand): - def add_arguments(self, parser): - parser.add_argument("file_path", type=str) - def handle(self, *args, **options): - file_path = options["file_path"] - headers = {"Authorization": f"Bearer {token}"} + for page in range(1,6): + data = get_data(page) + statuses = { + "open": "NEW", + "ordered": "PARTY_IS_MADE", + "pending": "EXPECTED", + "passive": "DRAFT", + "recieved": "RECIEVED", + "rejected": "CANCELLED", + "buying": "PURCHASED", + "partially_recieved": "PROCESS" + } - with open(file_path, "r") as f: - data = json.load(f) - - statuses = { - "open": "NEW", - "ordered": "PARTY_IS_MADE", - "pending": "EXPECTED", - "passive": "DRAFT", - "recieved": "RECIEVED", - "rejected": "CANCELLED", - "buying": "PURCHASED", - "partially_recieved": "PROCESS" - } - - for item in data["data"]["data"]: - url = f"https://backend.app.uyqur.uz/main/supply/order-view?id={item['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 - for i in data["warehouse_products"]: - product = Product.objects.filter( - name__icontains=i["product"]["name"]["uz"] - ).first() - if not product: + for item in data["data"]["data"]: + url = f"https://backend.app.uyqur.uz/main/supply/order-view?id={item['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 - 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() - 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', + 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 + for i in data["warehouse_products"]: + product = Product.objects.filter( + name__icontains=i["product"]["name"]["uz"] + ).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"] + ).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"] + 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, + }, ) - total_price += i["total_amount"] - paid_amount += i["paid_amount"] - calculated_amount += i["calculated_amount"] - must_pay_amount += i["must_pay_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, - }, - ) self.stdout.write("Parties added") \ No newline at end of file