From 731f16253175de4ffffdfb0331e59f3867d1efed Mon Sep 17 00:00:00 2001 From: rizwanisready Date: Thu, 1 Aug 2024 14:01:00 +0530 Subject: [PATCH] auto recurring testing phase 12 --- manage_coupons/utils.py | 4 ++-- manage_subscriptions/views.py | 45 ++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/manage_coupons/utils.py b/manage_coupons/utils.py index 57578a3..2cacf99 100644 --- a/manage_coupons/utils.py +++ b/manage_coupons/utils.py @@ -39,9 +39,9 @@ def handle_stripe_coupon(coupon_instance, stripe_secret_key): # Saving the coupon instance after successful Stripe operation coupon_instance.save() - return True, "Coupon successfully created or updated." + return True, "Coupon successfully created." except Exception as e: - error_message = f"Error creating/updating Stripe coupon: {e}" + error_message = f"Error creating Stripe coupon: {e}" print(error_message) return False, error_message diff --git a/manage_subscriptions/views.py b/manage_subscriptions/views.py index a7349e8..d1da35d 100644 --- a/manage_subscriptions/views.py +++ b/manage_subscriptions/views.py @@ -649,27 +649,51 @@ def validate_coupon(request): # Validating Coupon try: coupon = Coupon.objects.get(coupon_code=coupon_code) + if not coupon.is_valid(): return JsonResponse({"error": "Coupon is not valid."}, status=400) + + # Check discount amount if coupon.discount_amount and coupon.discount_amount > subscription.amount: return JsonResponse( {"error": "Coupon discount amount exceeds subscription amount."}, status=400, ) - if ( - coupon.discount_percentage - and (coupon.discount_percentage / Decimal("100")) * subscription.amount - > subscription.amount - ): + + # Check discount percentage + if coupon.discount_percentage: + discount_amount = ( + coupon.discount_percentage / Decimal("100") + ) * subscription.amount + if discount_amount > subscription.amount: + return JsonResponse( + { + "error": "Coupon discount percentage exceeds subscription amount." + }, + status=400, + ) + + # Retrieving coupon from Stripe if applicable + if coupon.coupon_id: + try: + stripe_coupon = stripe.Coupon.retrieve(coupon.coupon_id) + return JsonResponse({"message": stripe_coupon}, status=200) + except stripe.error.InvalidRequestError: + return JsonResponse( + {"error": f"Invalid coupon code: {coupon_code}"}, status=400 + ) + except stripe.error.StripeError as e: + return JsonResponse({"error": f"Stripe error: {str(e)}"}, status=400) + else: return JsonResponse( - {"error": "Coupon discount percentage exceeds subscription amount."}, + { + "error": "Coupon is either invalid, expired, or not associated with Stripe." + }, status=400, ) except Coupon.DoesNotExist: return JsonResponse({"error": "Coupon not found."}, status=404) - return JsonResponse({"message": "Coupon is valid."}, status=200) - @csrf_exempt @require_POST @@ -722,7 +746,10 @@ def create_checkout_session(request): ) else: return JsonResponse( - {"error": "Invalid or expired coupon code."}, status=400 + { + "error": "Either coupon is Invalid/Expired or coupon not related with stripe." + }, + status=400, ) except Coupon.DoesNotExist: return JsonResponse({"error": "Coupon not found."}, status=404)