diff --git a/chrono/agendas/migrations/0149_booking_extra_user_block.py b/chrono/agendas/migrations/0149_booking_extra_user_block.py new file mode 100644 index 00000000..a9a083c9 --- /dev/null +++ b/chrono/agendas/migrations/0149_booking_extra_user_block.py @@ -0,0 +1,22 @@ +from django.db import migrations, models + +import chrono.agendas.models + + +class Migration(migrations.Migration): + dependencies = [ + ('agendas', '0148_agenda_minimal_booking_time'), + ] + + operations = [ + migrations.AddField( + model_name='agenda', + name='booking_extra_user_block_template', + field=models.TextField( + blank=True, + help_text='Displayed on check page', + validators=[chrono.agendas.models.django_template_validator], + verbose_name='Extra user block template', + ), + ), + ] diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index 12f397b5..fe7fdcfc 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -51,7 +51,14 @@ from django.db.models import ( Value, ) from django.db.models.functions import Cast, Coalesce, Concat, ExtractWeek, ExtractWeekDay, JSONObject -from django.template import Context, Template, TemplateSyntaxError, VariableDoesNotExist, engines +from django.template import ( + Context, + RequestContext, + Template, + TemplateSyntaxError, + VariableDoesNotExist, + engines, +) from django.urls import reverse from django.utils import functional from django.utils.dates import WEEKDAYS @@ -240,6 +247,12 @@ class Agenda(models.Model): blank=True, validators=[django_template_validator], ) + booking_extra_user_block_template = models.TextField( + _('Extra user block template'), + blank=True, + validators=[django_template_validator], + help_text=_('Displayed on check page'), + ) event_display_template = models.CharField( _('Event display template'), max_length=256, @@ -2240,6 +2253,18 @@ class Booking(models.Model): except (VariableDoesNotExist, TemplateSyntaxError): return + def get_extra_user_block(self, request): + context = RequestContext(request) + context.update( + { + 'booking': self, + } + ) + try: + return Template(self.event.agenda.booking_extra_user_block_template).render(context) + except (VariableDoesNotExist, TemplateSyntaxError): + return + @classmethod def anonymize_bookings(cls, bookings_queryset): bookings_queryset.update( @@ -3303,6 +3328,18 @@ class Subscription(models.Model): except (VariableDoesNotExist, TemplateSyntaxError): return + def get_extra_user_block(self, request): + context = RequestContext(request) + context.update( + { + 'booking': self, + } + ) + try: + return Template(self.agenda.booking_extra_user_block_template).render(context) + except (VariableDoesNotExist, TemplateSyntaxError): + return + class Person(models.Model): user_external_id = models.CharField(max_length=250, unique=True) diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index feae4064..04a035f5 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -1417,7 +1417,9 @@ class AgendaBookingCheckSettingsForm(forms.ModelForm): 'mark_event_checked_auto', 'disable_check_update', 'enable_check_for_future_events', + 'booking_extra_user_block_template', ] + widgets = {'booking_extra_user_block_template': forms.Textarea(attrs={'rows': 3})} class AgendaNotificationsForm(forms.ModelForm): diff --git a/chrono/manager/static/css/style.scss b/chrono/manager/static/css/style.scss index ef3ab357..a7480327 100644 --- a/chrono/manager/static/css/style.scss +++ b/chrono/manager/static/css/style.scss @@ -574,3 +574,24 @@ div.agenda-settings .pk-tabs--container { } } } + +span.togglable { + padding: 1em 2ex; + cursor: pointer; +} + +.untoggled span.togglable:after { + font-family: FontAwesome; + content: "\f107"; /* angle-down */ + cursor: pointer; +} + +.toggled span.togglable:after { + font-family: FontAwesome; + content: "\f106"; /* angle-up */ + cursor: pointer; +} + +.extra-user-block { + padding-left: 2em; +} diff --git a/chrono/manager/templates/chrono/manager_event_check.html b/chrono/manager/templates/chrono/manager_event_check.html index 83967ce5..5ddaff92 100644 --- a/chrono/manager/templates/chrono/manager_event_check.html +++ b/chrono/manager/templates/chrono/manager_event_check.html @@ -73,7 +73,7 @@ {% endif %} {% endif %} {% for result in results %} -
{{ booking.get_user_block }}{% if booking.places_count > 1 %} ({{ booking.places_count }} {% trans "places" %}){% endif %} | +|
+ {% if agenda.booking_extra_user_block_template %}{% endif %} + {{ booking.get_user_block }}{% if booking.places_count > 1 %} ({{ booking.places_count }} {% trans "places" %}){% endif %} + | {% if booking.cancellation_datetime %}({% trans "Cancelled" %}){% endif %} | {{ booking.get_user_block }}{% if booking.places_count > 1 %} ({{ booking.places_count }} {% trans "places" %}){% endif %} | ++ {% if agenda.booking_extra_user_block_template %}{% endif %} + {{ booking.get_user_block }}{% if booking.places_count > 1 %} ({{ booking.places_count }} {% trans "places" %}){% endif %} + |
{% if booking.kind == "subscription" %}
({% trans "Not booked" %})
diff --git a/chrono/manager/templates/chrono/manager_events_agenda_settings.html b/chrono/manager/templates/chrono/manager_events_agenda_settings.html
index 11fa6cfd..f31af097 100644
--- a/chrono/manager/templates/chrono/manager_events_agenda_settings.html
+++ b/chrono/manager/templates/chrono/manager_events_agenda_settings.html
@@ -114,6 +114,10 @@
{{ agenda.booking_extra_user_block_template }}+ |