neptune/core/views.py

67 lines
2.1 KiB
Python
Raw Normal View History

import stripe
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
from django.shortcuts import redirect, render
from django.urls import reverse, reverse_lazy
from django.views import View
from django.views.generic.edit import CreateView
from core.forms import NewUserForm
from core.lib.products import assemble_plan_map
from core.models import Plan, Session
# Create your views here
2022-07-21 12:47:56 +00:00
# fmt: off
2022-07-21 12:45:57 +00:00
class Home(View):
template_name = "index.html"
def get(self, request):
return render(request, self.template_name)
2022-07-21 12:47:45 +00:00
class Billing(LoginRequiredMixin, View):
template_name = "billing.html"
def get(self, request):
2022-07-21 12:47:56 +00:00
context = {"plans": Plan.objects.all(),
"user_plans": request.user.plans.all()}
return render(request, self.template_name, context)
class Order(LoginRequiredMixin, View):
def get(self, request, product_id):
try:
session = stripe.checkout.Session.create(
payment_method_types=settings.ALLOWED_PAYMENT_METHODS,
mode='subscription',
customer=request.user.stripe_id,
line_items=assemble_plan_map(product_id_filter=product_id),
success_url=request.build_absolute_uri(reverse("success")),
cancel_url=request.build_absolute_uri(reverse("cancel")),
)
Session.objects.create(email=request.user.email, session=session.id)
return redirect(session.url)
# return JsonResponse({'id': session.id})
except Exception as e:
# Raise a server error
return JsonResponse({"error": str(e)}, status=500)
class Signup(CreateView):
form_class = NewUserForm
success_url = reverse_lazy("login")
template_name = "registration/signup.html"
class Portal(LoginRequiredMixin, View):
def get(self, request):
session = stripe.billing_portal.Session.create(
customer=request.user.stripe_id,
return_url=request.build_absolute_uri(),
)
return redirect(session.url)