finance: fix income and expence logic

This commit is contained in:
behruz-dev
2025-10-31 22:36:04 +05:00
parent 73112a90de
commit f5cebc4f37
5 changed files with 492 additions and 246 deletions

View File

@@ -1,4 +1,5 @@
from django.shortcuts import get_object_or_404
from django.db import transaction
from rest_framework import generics, views, parsers, filters
from rest_framework.response import Response
@@ -84,34 +85,82 @@ class IncomeDeleteApiView(generics.GenericAPIView):
permission_classes = [HasRolePermission]
def post(self, request, id):
income = get_object_or_404(Income, id=id)
income = get_object_or_404(Income, id=id, is_deleted=False)
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):
comment = serializer.validated_data.get('comment')
DeletedIncome.objects.create(
income=income,
comment=comment
)
income.is_deleted = True
if income.currency == 'uzs':
income.cash_transaction.expence_balance_uzs -= income.price
income.cash_transaction.total_balance_uzs -= income.price
income.payment_type.total_uzs -= income.price if income.payment_type.total_uzs > income.price else 0
else:
income.cash_transaction.expence_balance_usd -= income.price
income.cash_transaction.total_balance_usd -= income.price
income.payment_type.total_usd -= income.price if income.payment_type.total_usd > income.price else 0
with transaction.atomic():
comment = serializer.validated_data.get('comment')
currency = income.currency.lower()
DeletedIncome.objects.create(
income=income,
comment=comment
)
cash_transaction = income.cash_transaction
payment_type = income.payment_type
counterparty = income.counterparty
if currency == 'uzs':
cash_transaction.income_balance_uzs -= income.price
cash_transaction.total_balance_uzs = (
cash_transaction.income_balance_uzs - cash_transaction.expence_balance_uzs
)
payment_type.total_uzs -= income.price
if counterparty:
if counterparty.kredit_uzs > 0:
counterparty.kredit_uzs -= income.price
counterparty.total_kredit -= income.price
counterparty.debit_uzs += income.price
counterparty.total_debit += income.price
else:
counterparty.debit_uzs += income.price
counterparty.total_debit += income.price
counterparty.save()
elif currency == 'usd':
cash_transaction.income_balance_usd -= income.price
cash_transaction.total_balance_usd = (
cash_transaction.income_balance_usd - cash_transaction.expence_balance_usd
)
payment_type.total_usd -= income.price
if counterparty:
if counterparty.kredit_usd > 0:
counterparty.kredit_usd -= income.price
counterparty.total_kredit -= income.price
counterparty.debit_usd += income.price
counterparty.total_debit += income.price
else:
counterparty.debit_usd += income.price
counterparty.total_debit += income.price
counterparty.save()
income.is_deleted = True
cash_transaction.save()
payment_type.save()
income.save()
return Response(
{
'success': True,
'message': 'Income o\'chirildi',
'data': {
'income_id': income.id,
'price': income.price,
'currency': income.currency
}
},
status=200
)
income.cash_transaction.save()
income.payment_type.save()
income.save()
return Response(
{
'success': True,
'message': 'Income deleted',
}, status=200
)
class IncomeUpdateApiView(generics.GenericAPIView):
serializer_class = serializers.IncomeUpdateSerializer