feat(payment): add is_expired filter and serializer method for payment expiration tracking

This commit is contained in:
2025-07-06 21:23:56 +05:00
parent 6bc2d71a0e
commit 4f794571e9
2 changed files with 16 additions and 0 deletions

View File

@ -14,6 +14,18 @@ class PaymentFilter(django_filters.FilterSet):
mib_reference = django_filters.CharFilter(lookup_expr="icontains")
paid_at = django_filters.DateFromToRangeFilter()
created_at = django_filters.DateFromToRangeFilter()
is_expired = django_filters.BooleanFilter(method="filter_is_expired")
def filter_is_expired(self, queryset, name, value):
"""
Filter payments based on whether they are expired or not
"""
now = timezone.now()
queryset = queryset.filter(paid=False)
if value:
return queryset.filter(expires_at__isnull=False, expires_at__lt=now)
else:
return queryset.filter(Q(expires_at__isnull=True) | Q(expires_at__gte=now))
class Meta:
model = Payment

View File

@ -5,6 +5,10 @@ from devices.serializers import DeviceSerializer
class PaymentSerializer(serializers.ModelSerializer):
devices = DeviceSerializer(many=True, read_only=True)
is_expired = serializers.SerializerMethodField()
def get_is_expired(self, obj):
return obj.is_expired
class Meta: # type: ignore
model = Payment