Compare commits

...
Author SHA1 Message Date
Richard Schreiber 65285b7b5f Fix handling unknown payment provider 2026-10-07 09:06:37 +02:00
3 changed files with 38 additions and 3 deletions
+7
View File
@@ -678,6 +678,13 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device
for p in order.payments.filter(state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING)):
try:
if not p.payment_provider:
raise PaymentException(
_("The payment {payment} could not be canceled as the payment provider ({provider}) is not available anymore.").format(
payment=str(p),
provider=p.provider
)
)
with transaction.atomic():
p.payment_provider.cancel_payment(p)
order.log_action(
+27
View File
@@ -874,6 +874,13 @@ class OrderPaymentCancel(OrderView):
def post(self, *args, **kwargs):
if self.payment.state in (OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING):
try:
if not self.payment.payment_provider:
raise PaymentException(
_('The payment {payment} can not be canceled as the payment provider "{provider}" is not available anymore.').format(
payment=str(self.payment),
provider=self.payment.provider
)
)
with transaction.atomic():
self.payment.payment_provider.cancel_payment(self.payment)
self.order.log_action('pretix.event.order.payment.canceled', {
@@ -898,6 +905,16 @@ class OrderPaymentCancel(OrderView):
return redirect(self.get_order_url())
def get(self, *args, **kwargs):
if not self.payment.payment_provider:
messages.error(
self.request,
_('The payment {payment} can not be canceled as the payment provider "{provider}" is not available anymore.').format(
payment=str(self.payment),
provider=self.payment.provider
)
)
return redirect(self.get_order_url())
return render(self.request, 'pretixcontrol/order/pay_cancel.html', {
'order': self.order,
})
@@ -1077,6 +1094,16 @@ class OrderPaymentConfirm(OrderView):
return redirect(self.get_order_url())
def get(self, *args, **kwargs):
if not self.payment.payment_provider:
messages.error(
self.request,
_('The payment {payment} can not be confirmend as the payment provider "{provider}" is not available anymore.').format(
payment=str(self.payment),
provider=self.payment.provider
)
)
return redirect(self.get_order_url())
return render(self.request, 'pretixcontrol/order/pay_complete.html', {
'form': self.mark_paid_form,
'order': self.order,
+4 -3
View File
@@ -355,10 +355,11 @@ class OrderDetails(EventViewMixin, OrderDetailMixin, CartMixin, TicketPageMixin,
ctx['last_payment'] = lp
pp = lp.payment_provider
ctx['last_payment_info'] = pp.payment_pending_render(self.request, ctx['last_payment'])
if pp:
ctx['last_payment_info'] = pp.payment_pending_render(self.request, ctx['last_payment'])
if lp.state == OrderPayment.PAYMENT_STATE_PENDING and not pp._payment_abort_pending_allowed(lp):
ctx['can_pay'] = False
if lp.state == OrderPayment.PAYMENT_STATE_PENDING and not pp._payment_abort_pending_allowed(lp):
ctx['can_pay'] = False
ctx['can_pay'] = ctx['can_pay'] and self.order._can_be_paid() is True