change party command

This commit is contained in:
behruz-dev
2025-10-29 16:24:58 +05:00
parent 9efc8aef40
commit 82d85f8152
7 changed files with 5407 additions and 74 deletions

View File

@@ -1,4 +1,5 @@
import json import json
from django.core.management import BaseCommand from django.core.management import BaseCommand
from core.apps.counterparty.models import Counterparty from core.apps.counterparty.models import Counterparty
@@ -9,24 +10,27 @@ class Command(BaseCommand):
parser.add_argument("file_path", type=str) parser.add_argument("file_path", type=str)
def handle(self, *args, **options): def handle(self, *args, **options):
file_path = options['file_path'] file_path = options["file_path"]
with open(file_path, 'r') as f: with open(file_path, "r") as f:
data = json.load(f) data = json.load(f)
for item in data['data']['data']: for item in data["data"]["data"]:
Counterparty.objects.get_or_create( Counterparty.objects.get_or_create(
name=item['name'], name=item["name"],
defaults={ defaults={
'phone': item['person']['phone'], "phone": item["person"]["phone"],
'inn': item['person']['tin'], "inn": item["person"]["tin"],
'balance_currency': item['balances'][0]['currency']['symbol'].lower() if item['balances'] else 'uzs', "balance_currency": (
'is_archived': item['is_archived'], item["balances"][0]["currency"]["symbol"].lower()
'balance': item['total_amount'], if item["balances"]
'total_debit': item['debt_amount'], else "uzs"
'total_kredit': item['credit_amount'], ),
"is_archived": item["is_archived"],
"balance": item["total_amount"],
"total_debit": item["debt_amount"],
"total_kredit": item["credit_amount"],
}, },
) )
self.stdout.write("Counterparties added") self.stdout.write("Counterparties added")

View File

@@ -5,4 +5,14 @@ from core.apps.orders.models import Order
@admin.register(Order) @admin.register(Order)
class OrderAdmin(admin.ModelAdmin): class OrderAdmin(admin.ModelAdmin):
list_display = ['id', 'product', 'wherehouse', 'currency'] list_display = ['id', 'product', 'wherehouse', 'currency', 'counterparty']
# # Statuslar: {'ORDERED', 'PARTIALLY_RECIEVED', 'pending', "open", "buying", "rejected", "recieved", "passive"}
# open -> yangi == NEW
# ordered -> partiya qilingan == PARTY_IS_MADE
# pending -> kutilmoqda == EXPECTED
# passive -> qoralama == DRAFT
# recieved -> yopilgan == RECIEVED
# rejected -> bekor qilingan == CANCELLED
# buying -> sotib olinmoqda == PURCHASED
# partially_recieved -> jarayonda == PROCESS

View File

@@ -1,6 +1,6 @@
from django.contrib import admin from django.contrib import admin
from core.apps.orders.models import Party, PartyAmount, DeletedParty from core.apps.orders.models import DeletedParty, Party, PartyAmount
class PartyAmountInline(admin.StackedInline): class PartyAmountInline(admin.StackedInline):
@@ -11,17 +11,28 @@ class PartyAmountInline(admin.StackedInline):
@admin.register(Party) @admin.register(Party)
class PartyAdmin(admin.ModelAdmin): class PartyAdmin(admin.ModelAdmin):
list_display = ['id','number','mediator', 'delivery_date', 'payment_date', 'is_deleted'] list_display = [
"id",
"number",
"mediator",
"delivery_date",
"payment_date",
"is_deleted",
]
inlines = [PartyAmountInline] inlines = [PartyAmountInline]
search_fields = [
"number",
]
@admin.register(PartyAmount) @admin.register(PartyAmount)
class PartyAmountAdmin(admin.ModelAdmin): class PartyAmountAdmin(admin.ModelAdmin):
list_display = ['id', 'total_price', 'cost_amount'] list_display = ["id", "total_price", "cost_amount"]
def has_module_permission(self, request): def has_module_permission(self, request):
return False return False
@admin.register(DeletedParty) @admin.register(DeletedParty)
class DeletedPartyAdmin(admin.ModelAdmin): class DeletedPartyAdmin(admin.ModelAdmin):
list_display = ['id', 'deleted_date', 'party'] list_display = ["id", "deleted_date", "party"]

View File

@@ -20,6 +20,8 @@ class Command(BaseCommand):
with open(file_path, 'r', encoding='utf-8') as f: with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f) data = json.load(f)
statuses = set()
for item in data['data']['data']: for item in data['data']['data']:
product_name = item['product']['name']['uz'] product_name = item['product']['name']['uz']
unit_name = item['unit']['name']['uz'] unit_name = item['unit']['name']['uz']
@@ -53,6 +55,8 @@ class Command(BaseCommand):
created_at=created_at, created_at=created_at,
date=delivery_date date=delivery_date
) )
break statuses.add(item['status'].upper())
# break
self.stdout.write(self.style.SUCCESS("Orders imported successfully ✅")) self.stdout.write(self.style.SUCCESS("Orders imported successfully ✅"))
self.stdout.write(f"Statuslar: {statuses}")

View File

@@ -1,86 +1,110 @@
import json, requests import json
import requests
from django.core.management import BaseCommand from django.core.management import BaseCommand
from core.apps.orders.models import Order, Party, PartyAmount
from core.apps.accounts.models import User from core.apps.accounts.models import User
from core.apps.products.models import Product, Unity
from core.apps.counterparty.models import Counterparty from core.apps.counterparty.models import Counterparty
from core.apps.wherehouse.models import WhereHouse from core.apps.orders.models import Order, Party, PartyAmount
from core.apps.projects.models import Project, ProjectFolder
from core.apps.orders.utils.parse_date import parse_date 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.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTczMTI4MSwiZXhwIjoxNzYxODE3NjgxLCJuYmYiOjE3NjE3MzEyODEsImp0aSI6ImszNVRQUDBiblpSU3ZFS24iLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.G5rjiIV-roIgEZzH9s8XgLYnS9tunnMgnCa2U6S3vd0"
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JhY2tlbmQuYXBwLnV5cXVyLnV6L21haW4vYXV0aC9sb2dpbiIsImlhdCI6MTc2MTI4NjcwMywiZXhwIjoxNzYxNjQ2NzAzLCJuYmYiOjE3NjEyODY3MDMsImp0aSI6IjRBNkh4aHI5WkRqOGxVMzUiLCJzdWIiOiIxMDQiLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.O4NGZL_a3WIrjko5W2sEOBAbM5lv0miVgVa9tfYuyhM'
class Command(BaseCommand): class Command(BaseCommand):
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('file_path', type=str) parser.add_argument("file_path", type=str)
def handle(self, *args, **options): def handle(self, *args, **options):
file_path = options['file_path'] file_path = options["file_path"]
headers = { headers = {"Authorization": f"Bearer {token}"}
"Authorization": f"Bearer {token}"
}
with open(file_path, 'r') as f: with open(file_path, "r") as f:
data = json.load(f) data = json.load(f)
for item in data['data']['data']: statuses = {
url = f'https://backend.app.uyqur.uz/main/supply/order-view?id={item['id']}' "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) res = requests.get(url, headers=headers)
data = res.json()['data'] data = res.json()["data"]
user = None user = None
if data.get('agent'): if data.get("agent"):
user = User.objects.filter(full_name=data['agent']['full_name']).first() user = User.objects.filter(full_name=data["agent"]["full_name"]).first()
if not user: if not user:
continue continue
party, created = Party.objects.get_or_create(
number=data['id'], party, created = Party.objects.update_or_create(
number=data["id"],
defaults={ defaults={
'mediator': user, "mediator": user,
'delivery_date': parse_date(data['delivery_date']), "delivery_date": parse_date(data["delivery_date"]),
'closed_date': parse_date(data['recieved_date']), "closed_date": parse_date(data["recieved_date"]),
'order_date': parse_date(data['ordered_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']), "payment_date": (
'status': data['status'].upper(), parse_date(data["payment_date"])
'payment_percentage': data['payment_percent'], if parse_date(data["payment_date"])
'process': data['percent'], else parse_date(data["ordered_date"])
} ),
"status": statuses.get(data["status"].lower()),
"payment_percentage": data["payment_percent"],
"process": data["percent"],
},
) )
statuses.add(data["status"].upper())
orders = [] orders = []
total_price = 0 total_price = 0
paid_amount = 0 paid_amount = 0
calculated_amount = 0 calculated_amount = 0
must_pay_amount = 0 must_pay_amount = 0
for i in data['warehouse_products']: for i in data["warehouse_products"]:
product = Product.objects.filter(name__icontains=i['product']['name']['uz']).first() product = Product.objects.filter(
name__icontains=i["product"]["name"]["uz"]
).first()
if not product: if not product:
continue continue
unit = Unity.objects.filter(value=i['unit']['name']['uz']).first() unit = Unity.objects.filter(value=i["unit"]["name"]["uz"]).first()
counterparty = Counterparty.objects.filter(name=i['company_person']['name']).first() counterparty = Counterparty.objects.filter(
name=i["company_person"]["name"]
).first()
wherehouse = None wherehouse = None
if i.get('warehouse'): if i.get("warehouse"):
wherehouse = WhereHouse.objects.filter(name=i.get('warehouse').get('name')).first() wherehouse = WhereHouse.objects.filter(
name=i.get("warehouse").get("name")
).first()
project_folder = None project_folder = None
if i.get('project'): if i.get("project"):
project_folder = ProjectFolder.objects.filter(name=i['project']['name']).first() project_folder = ProjectFolder.objects.filter(
name=i["project"]["name"]
).first()
order, created = Order.objects.get_or_create( order = Order.objects.create(
product=product, product=product,
amount=i["amount"],
total_price=i["total_amount"],
quantity=i["quantity"],
unity=unit, unity=unit,
counterparty=counterparty, currency=i["currency"]["symbol"].lower(),
currency=i['currency']['symbol'].lower(),
wherehouse=wherehouse,
project_folder=project_folder, project_folder=project_folder,
amount=i['amount'], wherehouse=wherehouse,
total_price=i['total_amount'], counterparty=counterparty,
quantity=i['quantity'],
) )
total_price += i['total_amount'] total_price += i["total_amount"]
paid_amount += i['paid_amount'] paid_amount += i["paid_amount"]
calculated_amount += i['calculated_amount'] calculated_amount += i["calculated_amount"]
must_pay_amount += i['must_pay_amount'] must_pay_amount += i["must_pay_amount"]
orders.append(order) orders.append(order)
party.orders.set(orders) party.orders.set(orders)
PartyAmount.objects.get_or_create( PartyAmount.objects.get_or_create(
@@ -90,6 +114,7 @@ class Command(BaseCommand):
"calculated_amount": calculated_amount, "calculated_amount": calculated_amount,
"paid_amount": paid_amount, "paid_amount": paid_amount,
"payment_amount": must_pay_amount, "payment_amount": must_pay_amount,
} },
) )
self.stdout.write("Parties added") self.stdout.write("Parties added")
self.stdout.write(f"Statuslar: {statuses}")

5279
data/counterparty/cp1.json Normal file

File diff suppressed because it is too large Load Diff