diff --git a/core/apps/counterparty/models/conterparty.py b/core/apps/counterparty/models/conterparty.py index c809c81..d72253b 100644 --- a/core/apps/counterparty/models/conterparty.py +++ b/core/apps/counterparty/models/conterparty.py @@ -4,7 +4,6 @@ from django.db import models from django.apps import apps from core.apps.shared.models import BaseModel, Region, District -from core.apps.accounts.models import User class CounterpartyFolder(BaseModel): @@ -101,10 +100,9 @@ class CounterpartyBalance(BaseModel): @property def total_balance_usd(self): Party = apps.get_model('orders', 'Party') + Income = apps.get_model('finance', 'Income') + Expence = apps.get_model('finance', 'Expence') - debit = Decimal(self.debit_usd or 0) - kredit = Decimal(self.kredit_usd or 0) - party_payment = Party.objects.filter( orders__counterparty=self.counterparty, is_deleted=False, @@ -122,16 +120,21 @@ class CounterpartyBalance(BaseModel): )['overdue_amount'] or 0 party_amount = Decimal(party_payment or 0) - Decimal(party_overdue or 0) - - return debit - kredit + party_amount + + income = Income.objects.filter(currency='usd', counterparty=self.counterparty).aggregate( + total_price=models.Sum("price") + )['total_price'] or 0 + expence = Expence.objects.filter(currency='usd', counterparty=self.counterparty).aggregate( + total_price=models.Sum("price") + )['total_price'] or 0 + return (party_amount + income) - expence @property def total_balance_uzs(self): Party = apps.get_model('orders', 'Party') - - debit = Decimal(self.debit_uzs or 0) - kredit = Decimal(self.kredit_uzs or 0) + Income = apps.get_model('finance', 'Income') + Expence = apps.get_model('finance', 'Expence') party_payment = Party.objects.filter( orders__counterparty=self.counterparty, @@ -150,8 +153,19 @@ class CounterpartyBalance(BaseModel): )['overdue_amount'] or 0 party_amount = Decimal(party_payment or 0) - Decimal(party_overdue or 0) - - return debit - kredit + party_amount + party_total_amount = Party.objects.filter( + orders__counterparty=self.counterparty, + is_deleted=False, + currency='uzs' + ).aggregate(total_price=models.Sum('party_amount__paid_amount'))['total_price'] or 0 + income = Income.objects.filter(currency='uzs', counterparty=self.counterparty).aggregate( + total_price=models.Sum("price") + )['total_price'] or 0 + expence = Expence.objects.filter(currency='uzs', counterparty=self.counterparty).aggregate( + total_price=models.Sum("price") + )['total_price'] or 0 + print(party_total_amount, income, expence) + return (party_total_amount + income) - expence def __str__(self): return f"{self.counterparty.name}" diff --git a/core/apps/finance/views/expence.py b/core/apps/finance/views/expence.py index 289236b..7997e9c 100644 --- a/core/apps/finance/views/expence.py +++ b/core/apps/finance/views/expence.py @@ -142,18 +142,9 @@ class ExpenceDeleteApiView(generics.GenericAPIView): ) payment_type.total_uzs += expence.price - if counterparty: - if counterparty.debit_uzs > 0: - counterparty.debit_uzs += expence.price - counterparty.total_debit += expence.price - - counterparty.kredit_uzs -= expence.price - counterparty.total_kredit -= expence.price - else: - counterparty.kredit_uzs -= expence.price - counterparty.total_kredit -= expence.price - - counterparty.save() + if counterparty and hasattr(counterparty, 'balance'): + counterparty.balance.balance_uzs -= expence.price + counterparty.balance.save() elif currency == 'usd': cash_transaction.expence_balance_usd -= expence.price @@ -162,18 +153,9 @@ class ExpenceDeleteApiView(generics.GenericAPIView): ) payment_type.total_usd += expence.price - if counterparty: - if counterparty.debit_usd > 0: - counterparty.debit_usd += expence.price - counterparty.total_debit += expence.price - - counterparty.kredit_usd -= expence.price - counterparty.total_kredit -= expence.price - else: - counterparty.kredit_usd -= expence.price - counterparty.total_kredit -= expence.price - - counterparty.save() + if counterparty and hasattr(counterparty, 'balance'): + counterparty.balance.balance_usd -= expence.price + counterparty.balance.save() expence.is_deleted = True @@ -184,7 +166,7 @@ class ExpenceDeleteApiView(generics.GenericAPIView): return Response( { 'success': True, - 'message': 'Expence o\'chirildi', + 'message': "Expence o'chirildi", 'data': { 'expence_id': expence.id, 'price': expence.price, @@ -193,34 +175,6 @@ class ExpenceDeleteApiView(generics.GenericAPIView): }, status=200 ) - - expence = get_object_or_404(Expence, id=id) - serializer = self.serializer_class(data=request.data) - if serializer.is_valid(raise_exception=True): - comment = serializer.validated_data.get('comment') - DeletedExpence.objects.create( - expence=expence, - comment=comment - ) - expence.is_deleted = True - if expence.currency == 'uzs': - expence.cash_transaction.expence_balance_uzs += expence.price - expence.cash_transaction.total_balance_uzs += expence.price - expence.payment_type.total_uzs += expence.price - else: - expence.cash_transaction.expence_balance_usd += expence.price - expence.cash_transaction.total_balance_usd += expence.price - expence.payment_type.total_usd += expence.price - - expence.cash_transaction.save() - expence.payment_type.save() - expence.save() - return Response( - { - 'success': True, - 'message': 'Expence deleted', - }, status=200 - ) class ExpenceUpdateApiView(generics.GenericAPIView): diff --git a/core/apps/orders/admin/party.py b/core/apps/orders/admin/party.py index 0e43a65..95784fc 100644 --- a/core/apps/orders/admin/party.py +++ b/core/apps/orders/admin/party.py @@ -18,10 +18,12 @@ class PartyAdmin(admin.ModelAdmin): "delivery_date", "payment_date", "is_deleted", + "party_amount__total_price", + "currency" ] inlines = [PartyAmountInline] search_fields = [ - "number", + "number", "orders__counterparty__name" ]