From 85853c2e7d9260150912bf2be1af3f7fc91c53d5 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Mon, 3 Nov 2025 13:42:27 +0500 Subject: [PATCH] counterparty: update counterparty balance fixed --- core/apps/counterparty/utils/counterparty.py | 48 ++++++-------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/core/apps/counterparty/utils/counterparty.py b/core/apps/counterparty/utils/counterparty.py index 231c877..c6c8415 100644 --- a/core/apps/counterparty/utils/counterparty.py +++ b/core/apps/counterparty/utils/counterparty.py @@ -1,39 +1,28 @@ -from django.db.models import Sum, Case, F, DecimalField, When - -from core.apps.finance.models import Expence -from core.apps.finance.models import Income +from django.db.models import Sum +from core.apps.finance.models import Expence, Income def update_counterparty_balance(counterparty): if not counterparty: return + # EXPENCE -> DEBIT expences = Expence.objects.filter( counterparty=counterparty, is_deleted=False, ) + # Valutasi bo'yicha qo'shish debit_usd = expences.filter(currency='usd').aggregate( total=Sum('price') )['total'] or 0 - debit_uzs_direct = expences.filter(currency='uzs').aggregate( + debit_uzs = expences.filter(currency='uzs').aggregate( total=Sum('price') )['total'] or 0 - debit_uzs_from_usd = expences.filter(currency='usd').aggregate( - total=Sum( - Case( - When(exchange_rate__gt=0, then=F('price') * F('exchange_rate') / 100), - default=0, - output_field=DecimalField() - ) - ) - )['total'] or 0 - - debit_uzs = debit_uzs_direct + debit_uzs_from_usd - + # INCOME -> KREDIT incomes = Income.objects.filter( counterparty=counterparty, is_deleted=False @@ -43,32 +32,23 @@ def update_counterparty_balance(counterparty): total=Sum('price') )['total'] or 0 - kredit_uzs_direct = incomes.filter(currency='uzs').aggregate( + kredit_uzs = incomes.filter(currency='uzs').aggregate( total=Sum('price') )['total'] or 0 - kredit_uzs_from_usd = incomes.filter(currency='usd').aggregate( - total=Sum( - Case( - When(exchange_rate__gt=0, then=F('price') * F('exchange_rate') / 100), - default=0, - output_field=DecimalField() - ) - ) - )['total'] or 0 - - kredit_uzs = kredit_uzs_direct + kredit_uzs_from_usd - + # Total (faqat bir valutada qo'shish) total_debit = debit_usd + debit_uzs total_kredit = kredit_usd + kredit_uzs + + # Modelni yangilash counterparty.debit_usd = debit_usd - counterparty.debit_uzs = int(debit_uzs) - counterparty.total_debit = int(total_debit) + counterparty.debit_uzs = debit_uzs + counterparty.total_debit = total_debit counterparty.kredit_usd = kredit_usd - counterparty.kredit_uzs = int(kredit_uzs) - counterparty.total_kredit = int(total_kredit) + counterparty.kredit_uzs = kredit_uzs + counterparty.total_kredit = total_kredit counterparty.save(update_fields=[ 'debit_usd', 'debit_uzs', 'total_debit', 'kredit_usd', 'kredit_uzs', 'total_kredit'