From 110d7c6acf4d1457b341e244c2d518a31ba22e86 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 25 Sep 2017 12:48:31 +0200 Subject: [PATCH] Allow to enter a custom text that needs to be confirmed during checkout --- src/pretix/base/services/cart.py | 16 +++++++++++++++- src/pretix/base/settings.py | 4 ++++ src/pretix/control/forms/event.py | 7 +++++++ .../templates/pretixcontrol/event/settings.html | 1 + 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index 8dbfecd825..9719e76334 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -6,6 +6,7 @@ from typing import List, Optional from celery.exceptions import MaxRetriesExceededError from django.db import transaction from django.db.models import Q +from django.dispatch import receiver from django.utils.timezone import now 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.locking import LockTimeoutException 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.presale.signals import fee_calculation_for_cart +from pretix.presale.signals import ( + checkout_confirm_messages, fee_calculation_for_cart, +) class CartError(LazyLocaleException): @@ -761,3 +765,13 @@ def set_cart_addons(self, event: int, addons: List[dict], cart_id: str=None, loc self.retry() except (MaxRetriesExceededError, LockTimeoutException): 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)) + } diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 3c7d20b9cc..c369b6889c 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -209,6 +209,10 @@ DEFAULTS = { 'default': None, 'type': str }, + 'confirm_text': { + 'default': None, + 'type': str + }, 'mail_prefix': { 'default': None, 'type': str diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 19a35f4888..5386c9f087 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -339,6 +339,13 @@ class EventSettingsForm(SettingsForm): label=_("Imprint URL"), 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( label=_("Contact address"), required=False, diff --git a/src/pretix/control/templates/pretixcontrol/event/settings.html b/src/pretix/control/templates/pretixcontrol/event/settings.html index 8f379f566d..366069fcc3 100644 --- a/src/pretix/control/templates/pretixcontrol/event/settings.html +++ b/src/pretix/control/templates/pretixcontrol/event/settings.html @@ -45,6 +45,7 @@ {% bootstrap_field sform.show_times layout="horizontal" %} {% bootstrap_field sform.contact_mail 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.display_net_prices layout="horizontal" %}