feat(filters): add is_expired filter to TopupFilter for improved topup management
All checks were successful
Build and Push Docker Images / Build and Push Docker Images (push) Successful in 4m25s

This commit is contained in:
2025-07-05 19:54:04 +05:00
parent 63b1a6b9ef
commit 27f89b6d3d

View File

@ -1,6 +1,7 @@
import django_filters import django_filters
from .models import Payment, Topup from .models import Payment, Topup
from django.db.models import Q from django.db.models import Q
from django.utils import timezone
class PaymentFilter(django_filters.FilterSet): class PaymentFilter(django_filters.FilterSet):
@ -24,6 +25,7 @@ class TopupFilter(django_filters.FilterSet):
paid = django_filters.BooleanFilter(field_name="paid") paid = django_filters.BooleanFilter(field_name="paid")
user = django_filters.CharFilter(method="filter_user_search") user = django_filters.CharFilter(method="filter_user_search")
created_at = django_filters.DateFromToRangeFilter(field_name="created_at") created_at = django_filters.DateFromToRangeFilter(field_name="created_at")
is_expired = django_filters.BooleanFilter(method="filter_is_expired")
def filter_user_search(self, queryset, name, value): def filter_user_search(self, queryset, name, value):
""" """
@ -36,11 +38,23 @@ class TopupFilter(django_filters.FilterSet):
| Q(user__mobile__icontains=value) | Q(user__mobile__icontains=value)
) )
def filter_is_expired(self, queryset, name, value):
"""
Filter topups based on whether they are expired or not
"""
now = timezone.now()
if value: # Filter for expired topups
return queryset.filter(expires_at__isnull=False, expires_at__lt=now)
else: # Filter for non-expired topups
return queryset.filter(Q(expires_at__isnull=True) | Q(expires_at__gte=now))
class Meta: class Meta:
model = Topup # Assuming Topup is a subclass of Payment model = Topup
fields = [ fields = [
"amount", "amount",
"paid", "paid",
"status",
"user", "user",
"created_at", "created_at",
"is_expired",
] ]