diff --git a/manage_subscriptions/forms.py b/manage_subscriptions/forms.py index 303a58c..ffbe30e 100644 --- a/manage_subscriptions/forms.py +++ b/manage_subscriptions/forms.py @@ -26,6 +26,7 @@ class SubscriptionForm(forms.ModelForm): model = Subscription fields = [ "title", + "stripe_product", "plan", "high_amount", "amount", diff --git a/manage_subscriptions/urls.py b/manage_subscriptions/urls.py index 5f2bfe2..fee84c5 100644 --- a/manage_subscriptions/urls.py +++ b/manage_subscriptions/urls.py @@ -22,6 +22,20 @@ urlpatterns = [ views.SubscriptionDeleteView.as_view(), name="subscription_delete", ), + # Stripe Products + path( + "product/list/", views.StripeProductView.as_view(), name="stripe_product_list" + ), + path( + "product/add/", + views.StripeProductCreateOrUpdateView.as_view(), + name="stripe_product_add", + ), + path( + "product/delete/", + views.StripeProductDeleteView.as_view(), + name="stripe_product_delete", + ), # PLANS path("plan/list/", views.PlanView.as_view(), name="plan_list"), # path( diff --git a/manage_subscriptions/views.py b/manage_subscriptions/views.py index 318cad3..08caeff 100644 --- a/manage_subscriptions/views.py +++ b/manage_subscriptions/views.py @@ -226,7 +226,7 @@ class StripeProductCreateOrUpdateView(LoginRequiredMixin, generic.View): template_name = "manage_subscriptions/product_add.html" model = StripeProduct form_class = StripeProductForm - success_url = reverse_lazy("manage_subscriptions:product_list") + success_url = reverse_lazy("manage_subscriptions:stripe_product_list") error_message = "An error occurred while saving the data." # Determine the success message dynamically based on whether it's an update or create @@ -273,10 +273,35 @@ class StripeProductCreateOrUpdateView(LoginRequiredMixin, generic.View): print(form.errors) context = self.get_context_data(form=form) return render(request, self.template_name, context=context) + + success, message = self.handle_stripe_product(form) + if not success: + messages.error(self.request, message) + context = self.get_context_data(form=form) + return render(request, self.template_name, context=context) + form.save() messages.success(self.request, self.get_success_message()) return redirect(self.success_url) + def handle_stripe_product(self, form): + try: + stripe.api_key = settings.STRIPE_SECRET_KEY + + stripe_product = stripe.Product.create( + name=form.cleaned_data.get("title"), + description=form.cleaned_data.get("description"), + ) + + # Save Stripe Product ID to the form instance + form.instance.product_id = stripe_product.id + + return True, "" # Success + except stripe.error.StripeError as e: + return False, f"Stripe error: {str(e)}" + except Exception as e: + return False, f"An error occurred: {str(e)}" + class StripeProductView(LoginRequiredMixin, generic.ListView): page_name = resource_action.RESOURCE_MANAGE_SUBSCRIPTIONS diff --git a/templates/manage_subscriptions/subscription_add.html b/templates/manage_subscriptions/subscription_add.html index d2cdba4..b35c711 100644 --- a/templates/manage_subscriptions/subscription_add.html +++ b/templates/manage_subscriptions/subscription_add.html @@ -16,7 +16,7 @@
-

{{operation}} {{page_name}}

+

Add Subscription

--> Add Subscriptions + Add Stripe Product