Introduces a new /api/choices/ endpoint for fetching model choices with multilingual labels. Updates Django models to use 'cz#' prefix for Czech labels. Adds OpenAPI client generation via orval, refactors frontend API structure, and provides documentation and helper scripts for dynamic choices and OpenAPI usage.
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from django.db import models
|
|
from django.apps import apps
|
|
|
|
# Create your models here.
|
|
|
|
from .client import StripeClient
|
|
|
|
class StripeModel(models.Model):
|
|
class STATUS_CHOICES(models.TextChoices):
|
|
PENDING = "pending", "cz#Čeká se na platbu"
|
|
PAID = "paid", "cz#Zaplaceno"
|
|
FAILED = "failed", "cz#Neúspěšné"
|
|
CANCELLED = "cancelled", "cz#Zrušeno"
|
|
REFUNDING = "refunding", "cz#Platba se vrací"
|
|
REFUNDED = "refunded", "cz#Platba úspěšně vrácena"
|
|
|
|
status = models.CharField(max_length=20, choices=STATUS_CHOICES.choices, default=STATUS_CHOICES.PENDING)
|
|
|
|
stripe_session_id = models.CharField(max_length=255, blank=True, null=True)
|
|
stripe_payment_intent = models.CharField(max_length=255, blank=True, null=True)
|
|
stripe_session_url = models.URLField(blank=True, null=True)
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return f"Order {self.id} - {self.status}"
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
|
#if new
|
|
if self.pk:
|
|
Order = apps.get_model('commerce', 'Order')
|
|
Payment = apps.get_model('commerce', 'Payment')
|
|
|
|
order = Order.objects.get(payment=Payment.objects.get(stripe=self))
|
|
|
|
session = StripeClient.create_checkout_session(order)# <-- předáme self.StripePayment
|
|
|
|
self.stripe_session_id = session.id
|
|
self.stripe_payment_intent = session.payment_intent
|
|
self.stripe_session_url = session.url
|
|
|
|
else:
|
|
self.updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
super().save(*args, **kwargs)
|
|
|
|
def paid(self):
|
|
self.status = self.STATUS_CHOICES.PAID
|
|
self.save()
|
|
|
|
def refund(self):
|
|
StripeClient.refund_order(self.stripe_payment_intent)
|
|
self.status = self.STATUS_CHOICES.REFUNDING
|
|
self.save()
|
|
|
|
def refund_confirmed(self):
|
|
self.status = self.STATUS_CHOICES.REFUNDED
|
|
self.save()
|
|
|
|
def cancel(self):
|
|
StripeClient.cancel_checkout_session(self.stripe_session_id)
|
|
self.status = self.STATUS_CHOICES.CANCELLED
|
|
self.save() |