add: add two new api for finance

This commit is contained in:
behruz-dev
2025-09-15 17:41:20 +05:00
parent 84a9da409a
commit 14dc870d47
5 changed files with 51 additions and 4 deletions

View File

@@ -81,3 +81,7 @@ class ExpenceContractCreateSerializer(serializers.ModelSerializer):
) )
return expence_contract return expence_contract
class ExpenceContractCalculatePriceSerializer(serializers.Serializer):
price = serializers.IntegerField()

View File

@@ -76,4 +76,6 @@ class IncomeContractCreateSerializer(serializers.ModelSerializer):
) )
return income_contract return income_contract
class IncomeContractCalculatePriceSerializer(serializers.Serializer):
price = serializers.IntegerField()

View File

@@ -72,6 +72,7 @@ urlpatterns = [
path('list/', ic_views.IncomeContractListApiView.as_view()), path('list/', ic_views.IncomeContractListApiView.as_view()),
path('create/', ic_views.IncomeContractCreateApiView.as_view()), path('create/', ic_views.IncomeContractCreateApiView.as_view()),
path('statistics/', ic_views.IncomeContractStatisticsApiView.as_view()), path('statistics/', ic_views.IncomeContractStatisticsApiView.as_view()),
path('<uuid:id>/calculate_price/', ic_views.IncomeContractCalculatePriceApiView.as_view()),
] ]
)), )),
path('expence_contract/', include( path('expence_contract/', include(
@@ -79,6 +80,7 @@ urlpatterns = [
path('list/', ec_views.ExpenceContractListApiView.as_view()), path('list/', ec_views.ExpenceContractListApiView.as_view()),
path('create/', ec_views.ExpenceContractCreateApiView.as_view()), path('create/', ec_views.ExpenceContractCreateApiView.as_view()),
path('statistics/', ec_views.ExpenceContractStatisticsApiView.as_view()), path('statistics/', ec_views.ExpenceContractStatisticsApiView.as_view()),
path('<uuid:id>/calculate_price/', ec_views.ExpenceContractCalculatePriceApiView.as_view()),
] ]
)) ))
] ]

View File

@@ -1,5 +1,6 @@
from django.utils.timezone import now from django.utils.timezone import now
from django.db.models import Sum, Q, F from django.db.models import Sum, Q, F
from django.shortcuts import get_object_or_404
from django_filters.rest_framework.backends import DjangoFilterBackend from django_filters.rest_framework.backends import DjangoFilterBackend
@@ -7,7 +8,7 @@ from rest_framework import generics, views, filters
from rest_framework.response import Response from rest_framework.response import Response
from core.apps.finance.models import ExpenceContract from core.apps.finance.models import ExpenceContract
from core.apps.finance.serializers.expence_contract import ExpenceContractSerializer, ExpenceContractCreateSerializer from core.apps.finance.serializers.expence_contract import ExpenceContractSerializer, ExpenceContractCreateSerializer, ExpenceContractCalculatePriceSerializer
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
@@ -99,3 +100,22 @@ class ExpenceContractStatisticsApiView(views.APIView):
'usd': usd 'usd': usd
} }
return Response(res, status=200) return Response(res, status=200)
class ExpenceContractCalculatePriceApiView(generics.GenericAPIView):
serializer_class = ExpenceContractCalculatePriceSerializer
queryset = ExpenceContract.objects.all()
permission_classes = [HasRolePermission]
def get(self, request, id):
expence_contract = get_object_or_404(ExpenceContract, id=id)
serializer = self.serializer_class(data=request.data)
serializer.is_valid()
price = serializer.validated_data.get('price')
expence_contract.price -= price
expence_contract.paid_price += price
expence_contract.save()
return Response({
'success': True,
'message': 'price calculated',
}, status=200)

View File

@@ -9,7 +9,7 @@ from rest_framework.response import Response
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.finance.models import IncomeContract from core.apps.finance.models import IncomeContract
from core.apps.finance.serializers.income_contract import IncomeContractSerializer, IncomeContractCreateSerializer from core.apps.finance.serializers.income_contract import IncomeContractSerializer, IncomeContractCreateSerializer, IncomeContractCalculatePriceSerializer
class IncomeContractCreateApiView(generics.GenericAPIView): class IncomeContractCreateApiView(generics.GenericAPIView):
@@ -99,4 +99,23 @@ class IncomeContractStatisticsApiView(views.APIView):
'uzs': uzs, 'uzs': uzs,
'usd': usd 'usd': usd
} }
return Response(res, status=200) return Response(res, status=200)
class IncomeContractCalculatePriceApiView(generics.GenericAPIView):
serializer_class = IncomeContractCalculatePriceSerializer
queryset = IncomeContract.objects.all()
permission_classes = [HasRolePermission]
def get(self, request, id):
income_contract = get_object_or_404(IncomeContract, id=id)
serializer = self.serializer_class(data=request.data)
serializer.is_valid()
price = serializer.validated_data.get('price')
income_contract.price -= price
income_contract.paid_price += price
income_contract.save()
return Response({
'success': True,
'message': 'price calculated',
}, status=200)