Allow to enter a custom text that needs to be confirmed during checkout

This commit is contained in:
Raphael Michel
2017-09-25 12:48:31 +02:00
parent 244b767f8f
commit 110d7c6acf
4 changed files with 27 additions and 1 deletions

View File

@@ -6,6 +6,7 @@ from typing import List, Optional
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from django.db import transaction from django.db import transaction
from django.db.models import Q from django.db.models import Q
from django.dispatch import receiver
from django.utils.timezone import now from django.utils.timezone import now
from django.utils.translation import pgettext_lazy, ugettext as _ from django.utils.translation import pgettext_lazy, ugettext as _
@@ -19,8 +20,11 @@ from pretix.base.models.tax import TAXED_ZERO, TaxedPrice, TaxRule
from pretix.base.services.async import ProfiledTask from pretix.base.services.async import ProfiledTask
from pretix.base.services.locking import LockTimeoutException from pretix.base.services.locking import LockTimeoutException
from pretix.base.services.pricing import get_price from pretix.base.services.pricing import get_price
from pretix.base.templatetags.rich_text import rich_text
from pretix.celery_app import app from pretix.celery_app import app
from pretix.presale.signals import fee_calculation_for_cart from pretix.presale.signals import (
checkout_confirm_messages, fee_calculation_for_cart,
)
class CartError(LazyLocaleException): class CartError(LazyLocaleException):
@@ -761,3 +765,13 @@ def set_cart_addons(self, event: int, addons: List[dict], cart_id: str=None, loc
self.retry() self.retry()
except (MaxRetriesExceededError, LockTimeoutException): except (MaxRetriesExceededError, LockTimeoutException):
raise CartError(error_messages['busy']) raise CartError(error_messages['busy'])
@receiver(checkout_confirm_messages, dispatch_uid="cart_confirm_messages")
def confirm_messages(sender, *args, **kwargs):
if not sender.settings.confirm_text:
return {}
return {
'confirm_text': rich_text(str(sender.settings.confirm_text))
}

View File

@@ -209,6 +209,10 @@ DEFAULTS = {
'default': None, 'default': None,
'type': str 'type': str
}, },
'confirm_text': {
'default': None,
'type': str
},
'mail_prefix': { 'mail_prefix': {
'default': None, 'default': None,
'type': str 'type': str

View File

@@ -339,6 +339,13 @@ class EventSettingsForm(SettingsForm):
label=_("Imprint URL"), label=_("Imprint URL"),
required=False, required=False,
) )
confirm_text = forms.CharField(
label=_('Confirmation text'),
help_text=_('This text needs to be confirmed by the user before a purchase is possible. You could for example '
'link your terms of service here. If you use the Pages feature to publish your terms of service, '
'you don\'t need this setting since you can configure it there.'),
widget=forms.Textarea(attrs={"rows": 3})
)
contact_mail = forms.EmailField( contact_mail = forms.EmailField(
label=_("Contact address"), label=_("Contact address"),
required=False, required=False,

View File

@@ -45,6 +45,7 @@
{% bootstrap_field sform.show_times layout="horizontal" %} {% bootstrap_field sform.show_times layout="horizontal" %}
{% bootstrap_field sform.contact_mail layout="horizontal" %} {% bootstrap_field sform.contact_mail layout="horizontal" %}
{% bootstrap_field sform.imprint_url layout="horizontal" %} {% bootstrap_field sform.imprint_url layout="horizontal" %}
{% bootstrap_field sform.confirm_text layout="horizontal" %}
{% bootstrap_field sform.show_quota_left layout="horizontal" %} {% bootstrap_field sform.show_quota_left layout="horizontal" %}
{% bootstrap_field sform.display_net_prices layout="horizontal" %} {% bootstrap_field sform.display_net_prices layout="horizontal" %}
</fieldset> </fieldset>