feat: add software subscription orders
This commit is contained in:
+48
-2
@@ -18,14 +18,16 @@ from apps.billing.services import (
|
||||
get_balance_snapshot,
|
||||
)
|
||||
from apps.users.models import ApiKey
|
||||
from apps.licensing.models import DeviceCredential, MigrationRequest
|
||||
from apps.licensing.models import DeviceCredential, MigrationRequest, SoftwareEntitlement, SoftwareOrder
|
||||
from apps.licensing.services import (
|
||||
LicensingError,
|
||||
SoftwareOrderError,
|
||||
confirm_migration_request,
|
||||
create_software_order,
|
||||
revoke_device_credential,
|
||||
)
|
||||
|
||||
from .forms import ApiKeyCreateForm, RechargeCreateForm
|
||||
from .forms import ApiKeyCreateForm, RechargeCreateForm, SoftwareOrderCreateForm
|
||||
from .models import DownloadRelease, ImportTemplate
|
||||
|
||||
|
||||
@@ -250,6 +252,50 @@ class RechargePageView(LoginRequiredMixin, FormView):
|
||||
return redirect(f"{recharge_url}?order_no={order.order_no}")
|
||||
|
||||
|
||||
class SubscriptionPageView(LoginRequiredMixin, FormView):
|
||||
template_name = "portal/subscription.html"
|
||||
form_class = SoftwareOrderCreateForm
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
order_no = str(self.request.GET.get("order_no") or "").strip()
|
||||
context["current_order"] = SoftwareOrder.objects.filter(
|
||||
user=self.request.user,
|
||||
order_no=order_no,
|
||||
).first() if order_no else None
|
||||
context["entitlement"] = (
|
||||
SoftwareEntitlement.objects.filter(
|
||||
user=self.request.user,
|
||||
product_code="cmshopee",
|
||||
)
|
||||
.order_by("-expires_at", "-id")
|
||||
.first()
|
||||
)
|
||||
context["recent_orders"] = SoftwareOrder.objects.filter(
|
||||
user=self.request.user,
|
||||
product_code="cmshopee",
|
||||
).order_by("-created_at", "-id")[:10]
|
||||
context["is_mock_payment_mode"] = payment_callback_mode() == "mock"
|
||||
return context
|
||||
|
||||
def form_valid(self, form):
|
||||
try:
|
||||
order = create_software_order(
|
||||
user=self.request.user,
|
||||
plan=form.cleaned_data["plan"],
|
||||
pay_method=form.cleaned_data["pay_method"],
|
||||
)
|
||||
except SoftwareOrderError as exc:
|
||||
form.add_error(None, exc.message)
|
||||
return self.form_invalid(form)
|
||||
except PaymentOrderCreateError:
|
||||
form.add_error(None, "支付下单失败,请稍后重试。")
|
||||
return self.form_invalid(form)
|
||||
messages.success(self.request, "软件订阅订单已创建,请扫码支付。")
|
||||
subscription_url = reverse("portal-subscription")
|
||||
return redirect(f"{subscription_url}?order_no={order.order_no}")
|
||||
|
||||
|
||||
class MigrationConfirmView(LoginRequiredMixin, TemplateView):
|
||||
template_name = "portal/migration_confirm.html"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user