WIP (Payments) Add PaymentFilter for filtering payment records 🚧

This commit is contained in:
2025-06-28 23:23:04 +05:00
parent 7d641e95d7
commit cb15aed94b
2 changed files with 23 additions and 0 deletions

18
billing/filters.py Normal file
View File

@ -0,0 +1,18 @@
import django_filters
from .models import Payment
class PaymentFilter(django_filters.FilterSet):
amount = django_filters.NumericRangeFilter(field_name="amount")
number_of_months = django_filters.NumericRangeFilter(field_name="number_of_months")
paid = django_filters.BooleanFilter(field_name="paid")
method = django_filters.ChoiceFilter(
choices=Payment.PAYMENT_TYPES, lookup_expr="iexact"
)
mib_reference = django_filters.CharFilter(lookup_expr="icontains")
paid_at = django_filters.DateFromToRangeFilter()
created_at = django_filters.DateFromToRangeFilter()
class Meta:
model = Payment
fields = "__all__"

View File

@ -6,6 +6,7 @@ from datetime import timedelta
import requests import requests
from django.utils import timezone from django.utils import timezone
from django.utils.timezone import localtime from django.utils.timezone import localtime
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, status from rest_framework import generics, status
from rest_framework.response import Response from rest_framework.response import Response
@ -16,6 +17,7 @@ import logging
from .models import Device, Payment from .models import Device, Payment
from .serializers import PaymentSerializer, UpdatePaymentSerializer from .serializers import PaymentSerializer, UpdatePaymentSerializer
from .filters import PaymentFilter
env.read_env(os.path.join(BASE_DIR, ".env")) env.read_env(os.path.join(BASE_DIR, ".env"))
@ -31,6 +33,9 @@ class InsufficientFundsError(Exception):
class ListCreatePaymentView(StaffEditorPermissionMixin, generics.ListCreateAPIView): class ListCreatePaymentView(StaffEditorPermissionMixin, generics.ListCreateAPIView):
serializer_class = PaymentSerializer serializer_class = PaymentSerializer
queryset = Payment.objects.all().select_related("user") queryset = Payment.objects.all().select_related("user")
filter_backends = [DjangoFilterBackend]
filterset_fields = "__all__"
filterset_class = PaymentFilter
def get_queryset(self): def get_queryset(self):
queryset = super().get_queryset() queryset = super().get_queryset()