forked from CGM_Public/pretix_original
Do not ever ask people to select a payment method for 0.00
This commit is contained in:
@@ -16,7 +16,9 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||||
from django.views.generic import TemplateView, View
|
from django.views.generic import TemplateView, View
|
||||||
|
|
||||||
from pretix.base.models import CachedTicket, Invoice, Order, OrderPosition
|
from pretix.base.models import (
|
||||||
|
CachedTicket, Invoice, Order, OrderPosition, Quota,
|
||||||
|
)
|
||||||
from pretix.base.models.orders import (
|
from pretix.base.models.orders import (
|
||||||
CachedCombinedTicket, OrderFee, OrderPayment, OrderRefund, QuestionAnswer,
|
CachedCombinedTicket, OrderFee, OrderPayment, OrderRefund, QuestionAnswer,
|
||||||
)
|
)
|
||||||
@@ -25,6 +27,7 @@ from pretix.base.services.invoices import (
|
|||||||
generate_cancellation, generate_invoice, invoice_pdf, invoice_pdf_task,
|
generate_cancellation, generate_invoice, invoice_pdf, invoice_pdf_task,
|
||||||
invoice_qualified,
|
invoice_qualified,
|
||||||
)
|
)
|
||||||
|
from pretix.base.services.mail import SendMailException
|
||||||
from pretix.base.services.orders import cancel_order, change_payment_provider
|
from pretix.base.services.orders import cancel_order, change_payment_provider
|
||||||
from pretix.base.services.tickets import generate
|
from pretix.base.services.tickets import generate
|
||||||
from pretix.base.signals import allow_ticket_download, register_ticket_outputs
|
from pretix.base.signals import allow_ticket_download, register_ticket_outputs
|
||||||
@@ -376,6 +379,33 @@ class OrderPayChangeMethod(EventViewMixin, OrderDetailMixin, TemplateView):
|
|||||||
def _position_sum(self):
|
def _position_sum(self):
|
||||||
return self.order.positions.aggregate(sum=Sum('price'))['sum'] or Decimal('0.00')
|
return self.order.positions.aggregate(sum=Sum('price'))['sum'] or Decimal('0.00')
|
||||||
|
|
||||||
|
@transaction.atomic()
|
||||||
|
def mark_paid_free(self):
|
||||||
|
p = self.order.payments.create(
|
||||||
|
state=OrderPayment.PAYMENT_STATE_CREATED,
|
||||||
|
provider='manual',
|
||||||
|
amount=Decimal('0.00'),
|
||||||
|
fee=None
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
p.confirm()
|
||||||
|
except SendMailException:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
if self.order.pending_sum <= Decimal('0.00'):
|
||||||
|
try:
|
||||||
|
self.mark_paid_free()
|
||||||
|
except Quota.QuotaExceededException as e:
|
||||||
|
messages.error(self.request, str(e))
|
||||||
|
return redirect(self.get_order_url())
|
||||||
|
except PaymentException as e:
|
||||||
|
messages.error(self.request, str(e))
|
||||||
|
return redirect(self.get_order_url())
|
||||||
|
else:
|
||||||
|
return redirect(self.get_order_url() + '?paid=1')
|
||||||
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def provider_forms(self):
|
def provider_forms(self):
|
||||||
providers = []
|
providers = []
|
||||||
|
|||||||
Reference in New Issue
Block a user