JourneyJoker/payment/models/invoicepayment.py
Klaus-Uwe Mitterer d2792b8aa3 Refactor payment app
Generate invoice from HTML
Remove now unused dependency on PyInvoice
2021-06-10 13:18:52 +02:00

43 lines
No EOL
1.3 KiB
Python

from django.db import models
from django.utils import timezone
import uuid
from polymorphic.models import PolymorphicModel
from .invoice import Invoice
from ..signals import initiate_payment
class InvoicePayment(PolymorphicModel):
uuid = models.UUIDField(default=uuid.uuid4)
invoice = models.ForeignKey(Invoice, models.PROTECT)
amount = models.DecimalField(max_digits=9, decimal_places=2)
gateway_id = models.CharField(max_length=256)
timestamp = models.DateTimeField(default=timezone.now)
@property
def gateway(self):
raise NotImplementedError("%s does not implement gateway" % type(self))
@property
def status(self):
raise NotImplementedError("%s does not implement status" % type(self))
@classmethod
def initiate(cls, invoice):
raise NotImplementedError("%s does not implement initiate()" % cls.__name__)
def finalize(self, *args, **kwargs):
return self.invoice.finalize(*args, **kwargs)
@classmethod
def from_invoice(cls, invoice, gateway):
if not invoice.is_paid:
responses = initiate_payment.send_robust(sender=cls, invoice=invoice, gateway=gateway)
for handler, response in responses:
try:
return response["redirect"]
except:
continue
return False