finance: expence delete api fixed
This commit is contained in:
@@ -4,7 +4,6 @@ from django.db import models
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
|
|
||||||
from core.apps.shared.models import BaseModel, Region, District
|
from core.apps.shared.models import BaseModel, Region, District
|
||||||
from core.apps.accounts.models import User
|
|
||||||
|
|
||||||
|
|
||||||
class CounterpartyFolder(BaseModel):
|
class CounterpartyFolder(BaseModel):
|
||||||
@@ -101,10 +100,9 @@ class CounterpartyBalance(BaseModel):
|
|||||||
@property
|
@property
|
||||||
def total_balance_usd(self):
|
def total_balance_usd(self):
|
||||||
Party = apps.get_model('orders', 'Party')
|
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(
|
party_payment = Party.objects.filter(
|
||||||
orders__counterparty=self.counterparty,
|
orders__counterparty=self.counterparty,
|
||||||
is_deleted=False,
|
is_deleted=False,
|
||||||
@@ -122,16 +120,21 @@ class CounterpartyBalance(BaseModel):
|
|||||||
)['overdue_amount'] or 0
|
)['overdue_amount'] or 0
|
||||||
|
|
||||||
party_amount = Decimal(party_payment or 0) - Decimal(party_overdue 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
|
@property
|
||||||
def total_balance_uzs(self):
|
def total_balance_uzs(self):
|
||||||
Party = apps.get_model('orders', 'Party')
|
Party = apps.get_model('orders', 'Party')
|
||||||
|
Income = apps.get_model('finance', 'Income')
|
||||||
debit = Decimal(self.debit_uzs or 0)
|
Expence = apps.get_model('finance', 'Expence')
|
||||||
kredit = Decimal(self.kredit_uzs or 0)
|
|
||||||
|
|
||||||
party_payment = Party.objects.filter(
|
party_payment = Party.objects.filter(
|
||||||
orders__counterparty=self.counterparty,
|
orders__counterparty=self.counterparty,
|
||||||
@@ -150,8 +153,19 @@ class CounterpartyBalance(BaseModel):
|
|||||||
)['overdue_amount'] or 0
|
)['overdue_amount'] or 0
|
||||||
|
|
||||||
party_amount = Decimal(party_payment or 0) - Decimal(party_overdue or 0)
|
party_amount = Decimal(party_payment or 0) - Decimal(party_overdue or 0)
|
||||||
|
party_total_amount = Party.objects.filter(
|
||||||
return debit - kredit + party_amount
|
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):
|
def __str__(self):
|
||||||
return f"{self.counterparty.name}"
|
return f"{self.counterparty.name}"
|
||||||
|
|||||||
@@ -142,18 +142,9 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
|
|||||||
)
|
)
|
||||||
payment_type.total_uzs += expence.price
|
payment_type.total_uzs += expence.price
|
||||||
|
|
||||||
if counterparty:
|
if counterparty and hasattr(counterparty, 'balance'):
|
||||||
if counterparty.debit_uzs > 0:
|
counterparty.balance.balance_uzs -= expence.price
|
||||||
counterparty.debit_uzs += expence.price
|
counterparty.balance.save()
|
||||||
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()
|
|
||||||
|
|
||||||
elif currency == 'usd':
|
elif currency == 'usd':
|
||||||
cash_transaction.expence_balance_usd -= expence.price
|
cash_transaction.expence_balance_usd -= expence.price
|
||||||
@@ -162,18 +153,9 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
|
|||||||
)
|
)
|
||||||
payment_type.total_usd += expence.price
|
payment_type.total_usd += expence.price
|
||||||
|
|
||||||
if counterparty:
|
if counterparty and hasattr(counterparty, 'balance'):
|
||||||
if counterparty.debit_usd > 0:
|
counterparty.balance.balance_usd -= expence.price
|
||||||
counterparty.debit_usd += expence.price
|
counterparty.balance.save()
|
||||||
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()
|
|
||||||
|
|
||||||
expence.is_deleted = True
|
expence.is_deleted = True
|
||||||
|
|
||||||
@@ -184,7 +166,7 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
|
|||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
'success': True,
|
'success': True,
|
||||||
'message': 'Expence o\'chirildi',
|
'message': "Expence o'chirildi",
|
||||||
'data': {
|
'data': {
|
||||||
'expence_id': expence.id,
|
'expence_id': expence.id,
|
||||||
'price': expence.price,
|
'price': expence.price,
|
||||||
@@ -193,34 +175,6 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
|
|||||||
},
|
},
|
||||||
status=200
|
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):
|
class ExpenceUpdateApiView(generics.GenericAPIView):
|
||||||
|
|||||||
@@ -18,10 +18,12 @@ class PartyAdmin(admin.ModelAdmin):
|
|||||||
"delivery_date",
|
"delivery_date",
|
||||||
"payment_date",
|
"payment_date",
|
||||||
"is_deleted",
|
"is_deleted",
|
||||||
|
"party_amount__total_price",
|
||||||
|
"currency"
|
||||||
]
|
]
|
||||||
inlines = [PartyAmountInline]
|
inlines = [PartyAmountInline]
|
||||||
search_fields = [
|
search_fields = [
|
||||||
"number",
|
"number", "orders__counterparty__name"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user