mirror of
https://github.com/pretix/pretix.git
synced 2026-08-26 13:14:40 +00:00
Properly implement quota handling when receiving payments (closes #11)
This commit is contained in:
@@ -8,7 +8,7 @@ from django.core.urlresolvers import reverse
|
||||
from django.shortcuts import redirect, render
|
||||
from django.utils.timezone import now
|
||||
from django.views.generic import TemplateView
|
||||
from pretix.base.models import Order
|
||||
from pretix.base.models import Order, Quota
|
||||
from pretix.control.permissions import EventPermissionRequiredMixin
|
||||
from pretix.plugins.banktransfer import csvimport, mt940import
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
@@ -33,15 +33,25 @@ class ImportView(EventPermissionRequiredMixin, TemplateView):
|
||||
if 'confirm' in self.request.POST:
|
||||
orders = Order.objects.filter(event=self.request.event,
|
||||
code__in=self.request.POST.getlist('mark_paid'))
|
||||
some_failed = False
|
||||
for order in orders:
|
||||
order.mark_paid(provider='banktransfer', info=json.dumps({
|
||||
'reference': self.request.POST.get('reference_%s' % order.code),
|
||||
'date': self.request.POST.get('date_%s' % order.code),
|
||||
'payer': self.request.POST.get('payer_%s' % order.code),
|
||||
'import': now().isoformat(),
|
||||
}))
|
||||
try:
|
||||
order.mark_paid(provider='banktransfer', info=json.dumps({
|
||||
'reference': self.request.POST.get('reference_%s' % order.code),
|
||||
'date': self.request.POST.get('date_%s' % order.code),
|
||||
'payer': self.request.POST.get('payer_%s' % order.code),
|
||||
'import': now().isoformat(),
|
||||
}))
|
||||
except Quota.QuotaExceededException:
|
||||
some_failed = True
|
||||
|
||||
messages.success(self.request, _('The selected orders have been marked as paid.'))
|
||||
if some_failed:
|
||||
messages.success(self.request, _('The selected orders have been marked as paid.'))
|
||||
else:
|
||||
messages.warning(self.request, _('Not all of the selected orders could be marked as '
|
||||
'paid as some of them have expired and the selected '
|
||||
'items are sold out.'))
|
||||
# TODO: Display a list of them!
|
||||
return self.redirect_back()
|
||||
|
||||
messages.error(self.request, _('We were unable to detect the file type of this import. Please '
|
||||
|
||||
@@ -9,6 +9,7 @@ from django.utils.translation import ugettext as __
|
||||
from django import forms
|
||||
|
||||
import paypalrestsdk
|
||||
from pretix.base.models import Quota
|
||||
|
||||
from pretix.base.payment import BasePaymentProvider
|
||||
|
||||
@@ -175,8 +176,11 @@ class Paypal(BasePaymentProvider):
|
||||
logger.error('Invalid state: %s' % str(payment))
|
||||
return
|
||||
|
||||
order.mark_paid('paypal', json.dumps(payment.to_dict()))
|
||||
messages.success(request, _('We successfully received your payment. Thank you!'))
|
||||
try:
|
||||
order.mark_paid('paypal', json.dumps(payment.to_dict()))
|
||||
messages.success(request, _('We successfully received your payment. Thank you!'))
|
||||
except Quota.QuotaExceededException as e:
|
||||
messages.error(request, str(e))
|
||||
return None
|
||||
|
||||
def order_pending_render(self, request, order) -> str:
|
||||
|
||||
@@ -5,6 +5,7 @@ from django.contrib import messages
|
||||
from django.template.loader import get_template
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django import forms
|
||||
from pretix.base.models import Quota
|
||||
import stripe
|
||||
|
||||
from pretix.base.payment import BasePaymentProvider
|
||||
@@ -67,7 +68,11 @@ class Stripe(BasePaymentProvider):
|
||||
)
|
||||
logging.info(charge)
|
||||
if charge.status == 'succeeded' and charge.paid:
|
||||
order.mark_paid('stripe', str(charge))
|
||||
try:
|
||||
order.mark_paid('paypal', str(charge))
|
||||
messages.success(request, _('We successfully received your payment. Thank you!'))
|
||||
except Quota.QuotaExceededException as e:
|
||||
messages.error(request, str(e))
|
||||
messages.success(request, _('We successfully received your payment. Thank you!'))
|
||||
else:
|
||||
messages.warning(request, _('Stripe reported an error: %s' % charge.failure_message))
|
||||
|
||||
Reference in New Issue
Block a user