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", "Čeká se na platbu" PAID = "paid", "Zaplaceno" FAILED = "failed", "Neúspěšné" CANCELLED = "cancelled", "Zrušeno" REFUNDING = "refunding", "Platba se vrací" REFUNDED = "refunded", "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()