diff --git a/core/apps/counterparty/management/commands/update_counterparty.py b/core/apps/counterparty/management/commands/update_counterparty.py new file mode 100644 index 0000000..0fba268 --- /dev/null +++ b/core/apps/counterparty/management/commands/update_counterparty.py @@ -0,0 +1,17 @@ +from django.core.management.base import BaseCommand +from core.apps.finance.models import Counterparty +from core.apps.counterparty.utils.counterparty import update_counterparty_balance + + +class Command(BaseCommand): + help = 'Barcha counterpartylardagi debit va kredit balanslarini yangilash' + + def handle(self, *args, **options): + counterparties = Counterparty.objects.all() + for counterparty in counterparties: + update_counterparty_balance(counterparty) + self.stdout.write( + self.style.SUCCESS( + f'✓ {counterparties.count()} ta counterparty yangilandi' + ) + ) \ No newline at end of file diff --git a/core/apps/counterparty/utils/counterparty.py b/core/apps/counterparty/utils/counterparty.py new file mode 100644 index 0000000..88e3695 --- /dev/null +++ b/core/apps/counterparty/utils/counterparty.py @@ -0,0 +1,51 @@ +from django.db.models import Sum + + +from core.apps.finance.models import Expence +from core.apps.finance.models import Income + + +def update_counterparty_balance(counterparty): + if not counterparty: + return + + expences = Expence.objects.filter( + counterparty=counterparty, + is_deleted=False, + status='CONFIRMED' + ) + + 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 + + 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_debit = debit_usd + debit_uzs + total_kredit = kredit_usd + kredit_uzs + + 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' + ]) \ No newline at end of file