diff --git a/core/apps/orders/management/commands/import_party_by_number.py b/core/apps/orders/management/commands/import_party_by_number.py new file mode 100644 index 0000000..937e659 --- /dev/null +++ b/core/apps/orders/management/commands/import_party_by_number.py @@ -0,0 +1,128 @@ +import json + +import requests +from django.core.management import BaseCommand + +from core.apps.accounts.models import User +from core.apps.counterparty.models import Counterparty +from core.apps.orders.models import Order, Party, PartyAmount +from core.apps.orders.utils.parse_date import parse_date +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.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2Mjg2MzgyOCwiZXhwIjoxNzYyOTUwMjI4LCJuYmYiOjE3NjI4NjM4MjgsImp0aSI6IlBPd2xJd1kwQXZSQlE3UkoiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.1Pi_4vJaTqPRi92zsueZ-eGoTAiIJa-xd2AbRHvg5Gk" + +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() + + +class Command(BaseCommand): + def add_arguments(self, parser): + parser.add_argument("ids", type=list) + + 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" + } + + 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: + 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 + 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"] + 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