Properly implement quota handling when receiving payments (closes #11)

This commit is contained in:
Raphael Michel
2015-04-14 16:20:05 +02:00
parent 2f7ab1957a
commit df524f31d5
10 changed files with 194 additions and 19 deletions
+18 -8
View File
@@ -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 '
+6 -2
View File
@@ -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:
+6 -1
View File
@@ -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))