diff --git a/accounts/api/serializers.py b/accounts/api/serializers.py index 7ed4d78..50b426f 100644 --- a/accounts/api/serializers.py +++ b/accounts/api/serializers.py @@ -196,21 +196,25 @@ class ProfileSerializer(serializers.ModelSerializer): "grace_period_end_date": None, } today = timezone.now().date() - active_subscriptions = PrincipalSubscription.objects.filter( + + # Attempt to find the active subscription with the furthest grace_period_end_date + latest_subscription = PrincipalSubscription.objects.filter( principal=obj, is_paid=True, cancelled=False, deleted=False, active=True, status=SubscriptionStatus.ACTIVE, - end_date__gte=today, - ) - if active_subscriptions.exists(): - latest_subscription = active_subscriptions.last() - subscription_status["has_active_subscription"] = latest_subscription.is_paid and latest_subscription.status == SubscriptionStatus.ACTIVE and latest_subscription.end_date >= today - subscription_status["in_grace_period"] = not subscription_status["has_active_subscription"] and latest_subscription.grace_period_end_date >= today - subscription_status["grace_period_end_date"] = latest_subscription.grace_period_end_date if subscription_status["in_grace_period"] else None - return active_subscriptions.exists() + ).order_by('-grace_period_end_date').first() # Order by descending grace_period_end_date and take the first + + if latest_subscription: + # Check if we're within the grace period + if today <= latest_subscription.grace_period_end_date: + subscription_status['has_active_subscription'] = today <= latest_subscription.end_date + subscription_status['in_grace_period'] = latest_subscription.end_date < today <= latest_subscription.grace_period_end_date + subscription_status['grace_period_end_date'] = latest_subscription.grace_period_end_date + + return subscription_status def to_representation(self, instance): data = super().to_representation(instance)