diff --git a/billing/filters.py b/billing/filters.py new file mode 100644 index 0000000..858e6c4 --- /dev/null +++ b/billing/filters.py @@ -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__" diff --git a/billing/views.py b/billing/views.py index ce187d7..584925c 100644 --- a/billing/views.py +++ b/billing/views.py @@ -6,6 +6,7 @@ from datetime import timedelta import requests from django.utils import timezone from django.utils.timezone import localtime +from django_filters.rest_framework import DjangoFilterBackend from rest_framework import generics, status from rest_framework.response import Response @@ -16,6 +17,7 @@ import logging from .models import Device, Payment from .serializers import PaymentSerializer, UpdatePaymentSerializer +from .filters import PaymentFilter env.read_env(os.path.join(BASE_DIR, ".env")) @@ -31,6 +33,9 @@ class InsufficientFundsError(Exception): class ListCreatePaymentView(StaffEditorPermissionMixin, generics.ListCreateAPIView): serializer_class = PaymentSerializer queryset = Payment.objects.all().select_related("user") + filter_backends = [DjangoFilterBackend] + filterset_fields = "__all__" + filterset_class = PaymentFilter def get_queryset(self): queryset = super().get_queryset()