diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index be9af95a1..d19901489 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -1,5 +1,9 @@ from decimal import Decimal +from django.forms import Form +from django.template import Context +from django.template.loader import get_template + from pretix.base.settings import SettingsSandbox @@ -50,6 +54,41 @@ class BasePaymentProvider: def settings_form_fields(self) -> dict: """ A dictionary. The keys should be (unprefixed) EventSetting keys, - the values should be corresponding django form fields + the values should be corresponding django form fields. + + We suggest returning a collections.OrderedDict object instead of a dict. """ raise NotImplementedError() + + @property + def checkout_form_fields(self) -> dict: + """ + A dictionary. The keys should be unprefixed field names, + the values should be corresponding django form fields. + + We suggest returning a collections.OrderedDict object instead of a dict. + """ + # TODO: Proper handling of required=True fields in HTML + return {} + + def checkout_form(self, request) -> Form: + """ + Returns the Form object of the form that should be displayed when the + user selects this provider as his payment method. + """ + form = Form( + data=(request.POST if request.method == 'POST' else None), + prefix='payment_%s' % self.identifier + ) + form.fields = self.checkout_form_fields + return form + + def checkout_form_render(self, request) -> str: + """ + Returns the HTML of the form that should be displayed when the user + selects this provider as his payment method. + """ + form = self.checkout_form(request) + template = get_template('pretixpresale/event/checkout_payment_form_default.html') + ctx = Context({'request': request, 'form': form}) + return template.render(ctx) diff --git a/src/pretix/control/templates/pretixcontrol/event/payment.html b/src/pretix/control/templates/pretixcontrol/event/payment.html index c965ace7f..dec5bf91b 100644 --- a/src/pretix/control/templates/pretixcontrol/event/payment.html +++ b/src/pretix/control/templates/pretixcontrol/event/payment.html @@ -24,6 +24,8 @@ {% bootstrap_form provider.form layout='horizontal' %} + {% empty %} + {% trans "There are no payment providers available. Please go to the plugin settings and activate one or more payment plugins." %} {% endfor %}
{% blocktrans trimmed %} + After completing your purchase, we will ask you to transfer the money to the following + bank account, using a personal reference code. +{% endblocktrans %}
+ + + {{ settings.bank_details|linebreaksbr }} + \ No newline at end of file diff --git a/src/pretix/plugins/stripe/payment.py b/src/pretix/plugins/stripe/payment.py index da996d5bc..a8ca31c05 100644 --- a/src/pretix/plugins/stripe/payment.py +++ b/src/pretix/plugins/stripe/payment.py @@ -10,3 +10,10 @@ class Stripe(BasePaymentProvider): verbose_name = _('Credit Card via Stripe') settings_form_fields = OrderedDict([ ]) + checkout_form_fields = OrderedDict([ + ('cc_number', + forms.CharField( + label=_('Credit card number'), + required=False + )) + ]) diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_payment.html b/src/pretix/presale/templates/pretixpresale/event/checkout_payment.html index 9a51a68e4..4d3a5952f 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_payment.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_payment.html @@ -23,6 +23,7 @@