diff --git a/billing/filters.py b/billing/filters.py index 9fe4487..06bf0aa 100644 --- a/billing/filters.py +++ b/billing/filters.py @@ -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 diff --git a/billing/serializers.py b/billing/serializers.py index 72e71e9..b2d9eda 100644 --- a/billing/serializers.py +++ b/billing/serializers.py @@ -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