This commit is contained in:
behruz-dev
2025-11-12 13:54:21 +05:00
parent 1878e8696e
commit 32ec86b3b4
4 changed files with 97 additions and 93 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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")

View File

@@ -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)