add: add filter to income and expence list apis

This commit is contained in:
behruz-dev
2025-09-11 14:51:21 +05:00
parent 1c955c09f7
commit 2ea839bb5f
4 changed files with 34 additions and 2 deletions

View File

@@ -0,0 +1,11 @@
import django_filters
from core.apps.finance.models import Expence
class ExpenceFilter(django_filters.FilterSet):
class Meta:
model = Expence
fields = [
'w'
]

View File

@@ -0,0 +1,11 @@
import django_filters
from core.apps.finance.models import Income
class IncomeFilter(django_filters.FilterSet):
class Meta:
model = Income
fields = [
'payment_type', 'project_folder', 'project', 'user', 'type_income'
]

View File

@@ -1,9 +1,12 @@
from rest_framework import generics, views, parsers from rest_framework import generics, views, parsers
from rest_framework.response import Response from rest_framework.response import Response
from django_filters.rest_framework.backends import DjangoFilterBackend
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.finance.models import Expence from core.apps.finance.models import Expence
from core.apps.finance.serializers import expence as serializers from core.apps.finance.serializers import expence as serializers
from core.apps.finance.filters.expence import ExpenceFilter
class ExpenceCreateApiView(generics.GenericAPIView): class ExpenceCreateApiView(generics.GenericAPIView):
@@ -43,12 +46,14 @@ class ExpenceListApiView(generics.GenericAPIView):
'counterparty', 'expence_type', 'counterparty', 'expence_type',
) )
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
filter_backends = [DjangoFilterBackend]
filterset_class = ExpenceFilter
def get(self, request): def get(self, request):
cash_transaction_ids = request.query_params.getlist('cash_transaction') cash_transaction_ids = request.query_params.getlist('cash_transaction')
if cash_transaction_ids: if cash_transaction_ids:
self.queryset = self.queryset.filter(cash_transaction__in=cash_transaction_ids) self.queryset = self.queryset.filter(cash_transaction__in=cash_transaction_ids)
page = self.paginate_queryset(self.queryset) page = self.paginate_queryset(self.filter_queryset(self.queryset))
if page is not None: if page is not None:
serializer = self.serializer_class(page, many=True) serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)

View File

@@ -3,9 +3,12 @@ from django.shortcuts import get_object_or_404
from rest_framework import generics, views, parsers from rest_framework import generics, views, parsers
from rest_framework.response import Response from rest_framework.response import Response
from django_filters.rest_framework.backends import DjangoFilterBackend
from core.apps.finance.models import Income from core.apps.finance.models import Income
from core.apps.finance.serializers import income as serializers from core.apps.finance.serializers import income as serializers
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.finance.filters.income import IncomeFilter
class IncomeListApiView(generics.GenericAPIView): class IncomeListApiView(generics.GenericAPIView):
@@ -15,12 +18,14 @@ class IncomeListApiView(generics.GenericAPIView):
'user' 'user'
) )
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
filter_backends = [DjangoFilterBackend]
filterset_class = IncomeFilter
def get(self, request): def get(self, request):
cash_transaction_ids = request.query_params.getlist('cash_transaction') cash_transaction_ids = request.query_params.getlist('cash_transaction')
if cash_transaction_ids: if cash_transaction_ids:
self.queryset = self.queryset.filter(cash_transaction__in=cash_transaction_ids) self.queryset = self.queryset.filter(cash_transaction__in=cash_transaction_ids)
page = self.paginate_queryset(self.queryset) page = self.paginate_queryset(self.filter_queryset(self.queryset))
if page is not None: if page is not None:
serializer = self.serializer_class(page, many=True) serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)