fix
This commit is contained in:
@@ -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'
|
||||||
|
)
|
||||||
|
)
|
||||||
51
core/apps/counterparty/utils/counterparty.py
Normal file
51
core/apps/counterparty/utils/counterparty.py
Normal file
@@ -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'
|
||||||
|
])
|
||||||
Reference in New Issue
Block a user