From 27f89b6d3d04fb5b078ac343b8512fad54927112 Mon Sep 17 00:00:00 2001 From: i701 Date: Sat, 5 Jul 2025 19:54:04 +0500 Subject: [PATCH] =?UTF-8?q?feat(filters):=20add=20is=5Fexpired=20filter=20?= =?UTF-8?q?to=20TopupFilter=20for=20improved=20topup=20management=20?= =?UTF-8?q?=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- billing/filters.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/billing/filters.py b/billing/filters.py index 97af140..2246518 100644 --- a/billing/filters.py +++ b/billing/filters.py @@ -1,6 +1,7 @@ import django_filters from .models import Payment, Topup from django.db.models import Q +from django.utils import timezone class PaymentFilter(django_filters.FilterSet): @@ -24,6 +25,7 @@ class TopupFilter(django_filters.FilterSet): paid = django_filters.BooleanFilter(field_name="paid") user = django_filters.CharFilter(method="filter_user_search") 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): """ @@ -36,11 +38,23 @@ class TopupFilter(django_filters.FilterSet): | 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: - model = Topup # Assuming Topup is a subclass of Payment + model = Topup fields = [ "amount", "paid", + "status", "user", "created_at", + "is_expired", ]