diff --git a/core/apps/counterparty/admin/counterparty.py b/core/apps/counterparty/admin/counterparty.py index 6bf7b6f..50001ea 100644 --- a/core/apps/counterparty/admin/counterparty.py +++ b/core/apps/counterparty/admin/counterparty.py @@ -15,6 +15,7 @@ class CounterpartyBalanceInline(admin.StackedInline): class CounterpartyAdmin(admin.ModelAdmin): list_display = ['id', 'name', 'phone', 'type', 'inn'] inlines = [CounterpartyBalanceInline] + search_fields = ['name'] def get_queryset(self, request): return super().get_queryset(request).select_related('balance') diff --git a/core/apps/counterparty/management/commands/import_counterparty.py b/core/apps/counterparty/management/commands/import_counterparty.py index a5d9f63..4d20d4f 100644 --- a/core/apps/counterparty/management/commands/import_counterparty.py +++ b/core/apps/counterparty/management/commands/import_counterparty.py @@ -1,8 +1,9 @@ import json +from datetime import datetime from django.core.management import BaseCommand -from core.apps.counterparty.models import Counterparty +from core.apps.counterparty.models import Counterparty, CounterpartyBalance class Command(BaseCommand): @@ -16,21 +17,26 @@ class Command(BaseCommand): data = json.load(f) for item in data["data"]["data"]: - Counterparty.objects.update_or_create( + counterparty, created = Counterparty.objects.update_or_create( name=item["name"], defaults={ "phone": item["person"]["phone"], "inn": item["person"]["tin"], - "balance_currency": ( - item["balances"][0]["currency"]["symbol"].lower() - if item["balances"] - else "uzs" - ), "is_archived": item["is_archived"], - "balance": item["total_amount"], - "total_debit": item["debt_amount"], - "total_kredit": item["credit_amount"], }, ) - + if item.get("balances"): + balance = CounterpartyBalance.objects.create( + counterparty=counterparty, + balance_date=datetime.strptime(item['balances'][0]['start_date'], "%d.%m.%Y"), + kredit_uzs=item['credit_amount'], + debit_uzs=item['debt_amount'], + ) + for b in item["balances"]: + if b["currency"]["symbol"].lower() == 'uzs': + balance.balance_uzs = b['amount'] + elif item["balances"][0]["currency"]["symbol"].lower() == 'usd': + balance.balance_usd = b['amount'] + balance.save() + self.stdout.write("Counterparties added") diff --git a/core/apps/counterparty/management/commands/import_cp_folder.py b/core/apps/counterparty/management/commands/import_cp_folder.py index aeef761..1d1059a 100644 --- a/core/apps/counterparty/management/commands/import_cp_folder.py +++ b/core/apps/counterparty/management/commands/import_cp_folder.py @@ -1,11 +1,12 @@ import json, requests +from datetime import datetime from django.core.management import BaseCommand -from core.apps.counterparty.models import CounterpartyFolder, Counterparty +from core.apps.counterparty.models import CounterpartyFolder, Counterparty, CounterpartyBalance headers = { - "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjMzNjg2MSwiZXhwIjoxNzYyNDIzMjYxLCJuYmYiOjE3NjIzMzY4NjEsImp0aSI6Ino1SVpXRmlTVUJpMDA2eDciLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.yVOvrb-QjdYvCx6GJOW4T5y_N9-Lq2ThYFPu8_J0K3w" + "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjUxMDQyMywiZXhwIjoxNzYyNTk2ODIzLCJuYmYiOjE3NjI1MTA0MjMsImp0aSI6IlNPMmx5VjJ3Mllmb3BlSXEiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.3DemwyRz2FMzMm-JRBOqGPSgu_m4s4ndWz56e_ROp8A" } def get_counterparty(folder_id): @@ -16,24 +17,28 @@ def get_counterparty(folder_id): return None -def create_counterparty(data, folder): - Counterparty.objects.get_or_create( - name=data["name"], +def create_counterparty(item, folder): + counterparty, created = Counterparty.objects.update_or_create( + name=item["name"], defaults={ - "phone": data["person"]["phone"], - "inn": data["person"]["tin"], - "balance_currency": ( - data["balances"][0]["currency"]["symbol"].lower() - if data["balances"] - else "uzs" - ), - "is_archived": data["is_archived"], - "balance": data["total_amount"], - "total_debit": data["debt_amount"], - "total_kredit": data["credit_amount"], - "folder": folder + "phone": item["person"]["phone"], + "inn": item["person"]["tin"], + "is_archived": item["is_archived"], }, ) + if item.get("balances"): + balance = CounterpartyBalance.objects.create( + counterparty=counterparty, + balance_date=datetime.strptime(item['balances'][0]['start_date'], "%d.%m.%Y"), + kredit_uzs=item['credit_amount'], + debit_uzs=item['debt_amount'], + ) + for b in item["balances"]: + if b["currency"]["symbol"].lower() == 'uzs': + balance.balance_uzs = b['amount'] + elif item["balances"][0]["currency"]["symbol"].lower() == 'usd': + balance.balance_usd = b['amount'] + balance.save() class Command(BaseCommand): diff --git a/core/apps/counterparty/models/conterparty.py b/core/apps/counterparty/models/conterparty.py index e9ee5ac..b79ae1a 100644 --- a/core/apps/counterparty/models/conterparty.py +++ b/core/apps/counterparty/models/conterparty.py @@ -85,8 +85,8 @@ class CounterpartyBalance(BaseModel): super().save(*args, **kwargs) - total_usd = self.total_balance_usd - total_uzs = self.total_balance_uzs + total_usd = Decimal(self.total_balance_usd) + total_uzs = Decimal(self.total_balance_uzs) if total_usd < 0 or total_uzs < 0: self.counterparty.status = 'CREDITOR' @@ -99,11 +99,15 @@ class CounterpartyBalance(BaseModel): @property def total_balance_usd(self): - return (self.debit_usd or Decimal(0)) - (self.kredit_usd or Decimal(0)) + debit = Decimal(self.debit_usd or 0) + kredit = Decimal(self.kredit_usd or 0) + return debit - kredit @property def total_balance_uzs(self): - return (self.debit_uzs or Decimal(0)) - (self.kredit_uzs or Decimal(0)) + debit = Decimal(self.debit_uzs or 0) + kredit = Decimal(self.kredit_uzs or 0) + return debit - kredit def __str__(self): return f"{self.counterparty.name} | USD: {self.total_balance_usd} | UZS: {self.total_balance_uzs}" diff --git a/core/apps/finance/management/commands/import_expence.py b/core/apps/finance/management/commands/import_expence.py index d9b1414..7864abd 100644 --- a/core/apps/finance/management/commands/import_expence.py +++ b/core/apps/finance/management/commands/import_expence.py @@ -19,7 +19,7 @@ from core.apps.orders.models import Party headers = { - "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjMzNjg2MSwiZXhwIjoxNzYyNDIzMjYxLCJuYmYiOjE3NjIzMzY4NjEsImp0aSI6Ino1SVpXRmlTVUJpMDA2eDciLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.yVOvrb-QjdYvCx6GJOW4T5y_N9-Lq2ThYFPu8_J0K3w" + "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjUxMDQyMywiZXhwIjoxNzYyNTk2ODIzLCJuYmYiOjE3NjI1MTA0MjMsImp0aSI6IlNPMmx5VjJ3Mllmb3BlSXEiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.3DemwyRz2FMzMm-JRBOqGPSgu_m4s4ndWz56e_ROp8A" } diff --git a/core/apps/finance/management/commands/import_income.py b/core/apps/finance/management/commands/import_income.py index d3870d0..f8940f4 100644 --- a/core/apps/finance/management/commands/import_income.py +++ b/core/apps/finance/management/commands/import_income.py @@ -19,7 +19,7 @@ from core.apps.orders.models import Party headers = { - "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjMzNjg2MSwiZXhwIjoxNzYyNDIzMjYxLCJuYmYiOjE3NjIzMzY4NjEsImp0aSI6Ino1SVpXRmlTVUJpMDA2eDciLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.yVOvrb-QjdYvCx6GJOW4T5y_N9-Lq2ThYFPu8_J0K3w" + "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjUxMDQyMywiZXhwIjoxNzYyNTk2ODIzLCJuYmYiOjE3NjI1MTA0MjMsImp0aSI6IlNPMmx5VjJ3Mllmb3BlSXEiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.3DemwyRz2FMzMm-JRBOqGPSgu_m4s4ndWz56e_ROp8A" } diff --git a/core/apps/orders/management/commands/import_party.py b/core/apps/orders/management/commands/import_party.py index 5d64d19..5df4a03 100644 --- a/core/apps/orders/management/commands/import_party.py +++ b/core/apps/orders/management/commands/import_party.py @@ -11,7 +11,7 @@ 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.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjMzNjg2MSwiZXhwIjoxNzYyNDIzMjYxLCJuYmYiOjE3NjIzMzY4NjEsImp0aSI6Ino1SVpXRmlTVUJpMDA2eDciLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.yVOvrb-QjdYvCx6GJOW4T5y_N9-Lq2ThYFPu8_J0K3w" +token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MjUxMDQyMywiZXhwIjoxNzYyNTk2ODIzLCJuYmYiOjE3NjI1MTA0MjMsImp0aSI6IlNPMmx5VjJ3Mllmb3BlSXEiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.3DemwyRz2FMzMm-JRBOqGPSgu_m4s4ndWz56e_ROp8A" headers = {"Authorization": f"Bearer {token}"}