finance: fucking income expence

This commit is contained in:
behruz-dev
2025-10-31 22:49:14 +05:00
parent 700a92710f
commit 9d83ccd7ed
5 changed files with 589 additions and 241 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
@@ -116,6 +117,93 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
permission_classes = [HasRolePermission]
def post(self, request, id):
expence = get_object_or_404(Expence, id=id, is_deleted=False)
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):
with transaction.atomic():
comment = serializer.validated_data.get('comment')
currency = expence.currency.lower()
# Deleted record yaratish
DeletedExpence.objects.create(
expence=expence,
comment=comment
)
cash_transaction = expence.cash_transaction
payment_type = expence.payment_type
counterparty = expence.counterparty
if currency == 'uzs':
# Balanslarni qaytarish (o'chirilgani teskari qilish)
cash_transaction.expence_balance_uzs -= expence.price # ✅ KAMAYISHI KERAK
cash_transaction.total_balance_uzs = (
cash_transaction.income_balance_uzs - cash_transaction.expence_balance_uzs
)
payment_type.total_uzs += expence.price # ✅ QAYTARISH
# Kontrapartiya hisobini qaytarish
if counterparty:
if counterparty.debit_uzs > 0:
# Agar debit bo'lsa, uni oshirish (teskari)
counterparty.debit_uzs += expence.price
counterparty.total_debit += expence.price
counterparty.kredit_uzs -= expence.price
counterparty.total_kredit -= expence.price
else:
# Agar kredit bo'lsa, uni kamayitish (teskari)
counterparty.kredit_uzs -= expence.price
counterparty.total_kredit -= expence.price
counterparty.save()
elif currency == 'usd':
# Balanslarni qaytarish (o'chirilgani teskari qilish)
cash_transaction.expence_balance_usd -= expence.price # ✅ KAMAYISHI KERAK
cash_transaction.total_balance_usd = (
cash_transaction.income_balance_usd - cash_transaction.expence_balance_usd
)
payment_type.total_usd += expence.price # ✅ QAYTARISH
# Kontrapartiya hisobini qaytarish
if counterparty:
if counterparty.debit_usd > 0:
# Agar debit bo'lsa, uni oshirish (teskari)
counterparty.debit_usd += expence.price
counterparty.total_debit += expence.price
counterparty.kredit_usd -= expence.price
counterparty.total_kredit -= expence.price
else:
# Agar kredit bo'lsa, uni kamayitish (teskari)
counterparty.kredit_usd -= expence.price
counterparty.total_kredit -= expence.price
counterparty.save()
# is_deleted = True qilish (hard delete emas, soft delete)
expence.is_deleted = True
# Barcha o'zgarishlari saqlash
cash_transaction.save()
payment_type.save()
expence.save()
return Response(
{
'success': True,
'message': 'Expence o\'chirildi',
'data': {
'expence_id': expence.id,
'price': expence.price,
'currency': expence.currency
}
},
status=200
)
expence = get_object_or_404(Expence, id=id)
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):