From 6a89d228a97c6ed7d9d006377c9e3b93a33120ed Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Thu, 11 Sep 2025 15:14:23 +0500 Subject: [PATCH] add: add new two api --- core/apps/finance/filters/expence.py | 2 +- core/apps/finance/urls.py | 2 ++ core/apps/finance/views/expence.py | 22 +++++++++++++++++++++- core/apps/finance/views/income.py | 17 +++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/core/apps/finance/filters/expence.py b/core/apps/finance/filters/expence.py index ebf7d5b..780461b 100644 --- a/core/apps/finance/filters/expence.py +++ b/core/apps/finance/filters/expence.py @@ -7,5 +7,5 @@ class ExpenceFilter(django_filters.FilterSet): class Meta: model = Expence fields = [ - 'w' + 'payment_type', 'project_folder', 'project', 'user', 'expence_type' ] \ No newline at end of file diff --git a/core/apps/finance/urls.py b/core/apps/finance/urls.py index 5c7216e..4471a3e 100644 --- a/core/apps/finance/urls.py +++ b/core/apps/finance/urls.py @@ -47,6 +47,7 @@ urlpatterns = [ [ path('list/', income_views.IncomeListApiView.as_view()), path('create/', income_views.IncomeCreateApiView.as_view()), + path('/list/', income_views.CounterpartyIncomeListApiView.as_view()), ] )), path('expence_type/', include( @@ -61,6 +62,7 @@ urlpatterns = [ [ path('list/', expence_views.ExpenceListApiView.as_view()), path('create/', expence_views.ExpenceCreateApiView.as_view()), + path('/list/', expence_views.CounterpartyExpenceListApiView.as_view()), ] )) ] \ No newline at end of file diff --git a/core/apps/finance/views/expence.py b/core/apps/finance/views/expence.py index 54340c3..8758211 100644 --- a/core/apps/finance/views/expence.py +++ b/core/apps/finance/views/expence.py @@ -1,3 +1,5 @@ +from django.shortcuts import get_object_or_404 + from rest_framework import generics, views, parsers, filters from rest_framework.response import Response @@ -7,6 +9,7 @@ from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.finance.models import Expence from core.apps.finance.serializers import expence as serializers from core.apps.finance.filters.expence import ExpenceFilter +from core.apps.counterparty.models import Counterparty class ExpenceCreateApiView(generics.GenericAPIView): @@ -60,4 +63,21 @@ class ExpenceListApiView(generics.GenericAPIView): if page is not None: serializer = self.serializer_class(page, many=True) return self.get_paginated_response(serializer.data) - \ No newline at end of file + + + +class CounterpartyExpenceListApiView(generics.GenericAPIView): + permission_classes = [HasRolePermission] + queryset = Expence.objects.select_related( + 'cash_transaction', 'payment_type', 'project_folder', 'project', 'counterparty', 'expence_type', + 'user' + ).exclude(counterparty__isnull=True) + serializer_class = serializers.ExpenceListSerializer + + def get(self, request, counterparty_id): + counterparty = get_object_or_404(Counterparty, id=counterparty_id) + page = self.paginate_queryset(self.queryset.filter(counterparty=counterparty)) + if page is not None: + ser = self.serializer_class(page, many=True) + return self.get_paginated_response(ser.data) + \ No newline at end of file diff --git a/core/apps/finance/views/income.py b/core/apps/finance/views/income.py index 1cafa2c..6a8356d 100644 --- a/core/apps/finance/views/income.py +++ b/core/apps/finance/views/income.py @@ -9,6 +9,7 @@ from core.apps.finance.models import Income from core.apps.finance.serializers import income as serializers from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.finance.filters.income import IncomeFilter +from core.apps.counterparty.models import Counterparty class IncomeListApiView(generics.GenericAPIView): @@ -60,3 +61,19 @@ class IncomeCreateApiView(generics.GenericAPIView): status=400 ) + +class CounterpartyIncomeListApiView(generics.GenericAPIView): + permission_classes = [HasRolePermission] + queryset = Income.objects.select_related( + 'cash_transaction', 'payment_type', 'project_folder', 'project', 'counterparty', 'type_income', + 'user' + ).exclude(counterparty__isnull=True) + serializer_class = serializers.IncomeListSerializer + + def get(self, request, counterparty_id): + counterparty = get_object_or_404(Counterparty, id=counterparty_id) + page = self.paginate_queryset(self.queryset.filter(counterparty=counterparty)) + if page is not None: + ser = self.serializer_class(page, many=True) + return self.get_paginated_response(ser.data) + \ No newline at end of file