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 = expences.filter(currency='uzs').aggregate( total=Sum('price') )['total'] or 0 # INCOME -> KREDIT incomes = Income.objects.filter( counterparty=counterparty, is_deleted=False ) kredit_usd = incomes.filter(currency='usd').aggregate( total=Sum('price') )['total'] or 0 kredit_uzs = incomes.filter(currency='uzs').aggregate( total=Sum('price') )['total'] or 0 # 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 = debit_uzs counterparty.total_debit = total_debit counterparty.kredit_usd = kredit_usd 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' ])