Refator payment provider, deal with cancellations

This commit is contained in:
Raphael Michel
2019-09-19 10:06:26 +02:00
parent e099fad0ca
commit 346f215c50
8 changed files with 99 additions and 85 deletions

View File

@@ -15,13 +15,12 @@ from django.utils.translation import (
from django.views.generic.base import TemplateResponseMixin
from django_scopes import scopes_disabled
from pretix.base.models import GiftCard, Order
from pretix.base.models import Order
from pretix.base.models.orders import InvoiceAddress, OrderPayment
from pretix.base.services.cart import (
get_fees, set_cart_addons, update_tax_rates,
)
from pretix.base.services.orders import perform_order
from pretix.base.templatetags.money import money_filter
from pretix.base.views.tasks import AsyncAction
from pretix.multidomain.urlreverse import eventreverse
from pretix.presale.forms.checkout import (
@@ -531,40 +530,6 @@ class PaymentStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
def post(self, request):
self.request = request
if request.POST.get("giftcard") and request.POST.get("payment") == "giftcard":
# TODO: cross-organizer acceptance, …
try:
gc = request.organizer.accepted_gift_cards.get(
secret=request.POST.get("giftcard")
)
if gc.currency != request.event.currency:
messages.error(self.request, _("This gift card does not support this currency."))
return self.render()
if gc.value <= Decimal("0.00"):
messages.error(self.request, _("All credit on this gift card has been used."))
return self.render()
if 'gift_cards' not in self.cart_session:
self.cart_session['gift_cards'] = []
elif gc.pk in self.cart_session['gift_cards']:
messages.error(self.request, _("This gift card is already used for your payment."))
return self.render()
self.cart_session['gift_cards'] = self.cart_session['gift_cards'] + [gc.pk]
remainder = self._total_order_value - gc.value
if remainder >= Decimal('0.00'):
messages.success(self.request, _("Your gift card has been applied, but {} still need to be paid. Please select a payment method.").format(
money_filter(remainder, self.event.currency)
))
else:
messages.success(self.request, _("Your gift card has been applied."))
return redirect(self.get_step_url(request))
except GiftCard.DoesNotExist:
messages.error(self.request, _("This gift card is not known."))
return self.render()
except GiftCard.MultipleObjectsReturned:
messages.error(self.request, _("This gift card can not be redeemed since its code is not unique. Please contact the organizer of this event."))
return self.render()
for p in self.provider_forms:
if p['provider'].identifier == request.POST.get('payment', ''):
self.cart_session['payment'] = p['provider'].identifier
@@ -589,7 +554,6 @@ class PaymentStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
if len(self.provider_forms) == 1:
ctx['selected'] = self.provider_forms[0]['provider'].identifier
ctx['cart'] = self.get_cart()
ctx['has_gift_cards'] = self.request.organizer.has_gift_cards
return ctx
@cached_property

View File

@@ -51,33 +51,6 @@
</div>
</div>
{% endfor %}
{% if has_gift_cards %}
<div class="panel panel-default">
<label class="accordion-radio">
<div class="panel-heading">
<h4 class="panel-title">
<input type="radio" name="payment" value="giftcard"
data-parent="#payment_accordion"
data-toggle="radiocollapse" data-target="#payment_giftcard"/>
<strong>{% trans "Redeem a gift card" %}</strong>
</h4>
</div>
</label>
<div id="payment_giftcard"
class="panel-collapse collapsed">
<div class="panel-body form-horizontal">
<p>
{% blocktrans %}
If you have a gift card, please enter the gift card code here. If the gift card does not have
enough credit to pay for the full order, you will be shown this page again and you can either
redeem another gift card or select a different payment method for the difference.
{% endblocktrans %}
</p>
<input name="giftcard" class="form-control" placeholder="{% trans "Gift card code" %}">
</div>
</div>
</div>
{% endif %}
{% if not providers %}
<p><em>{% trans "There are no payment providers enabled." %}</em></p>
{% if not event.live %}