Projet

Général

Profil

0003-manager-preview-booking-reminders-45293.patch

Valentin Deniaud, 15 septembre 2020 14:25

Télécharger (7,65 ko)

Voir les différences:

Subject: [PATCH 3/3] manager: preview booking reminders (#45293)

 chrono/manager/static/css/style.scss          |  4 +++
 .../manager_agenda_reminder_preview.html      | 22 ++++++++++++
 .../chrono/manager_agenda_settings.html       |  8 +++++
 chrono/manager/urls.py                        |  5 +++
 chrono/manager/views.py                       | 36 +++++++++++++++++++
 tests/test_manager.py                         | 34 ++++++++++++++++++
 6 files changed, 109 insertions(+)
 create mode 100644 chrono/manager/templates/chrono/manager_agenda_reminder_preview.html
chrono/manager/static/css/style.scss
307 307
div.booking a.cancel {
308 308
	float: right;
309 309
}
310

  
311
p.email-subject {
312
	text-align: center;
313
}
chrono/manager/templates/chrono/manager_agenda_reminder_preview.html
1
{% extends "chrono/manager_agenda_view.html" %}
2
{% load i18n %}
3

  
4
{% block breadcrumb %}
5
{{ block.super }}
6
<a href="">{% trans "Reminder message preview" %}</a>
7
{% endblock %}
8

  
9
{% block appbar %}
10
<h2>{% trans "Reminder message preview" %}</h2>
11
{% endblock %}
12

  
13
{% block content %}
14
{% if subject %}
15
<p>{% trans "Users will receive the following email:" %}</p>
16
<p class="email-subject"><strong>{% trans "Subject:" %}</strong> {{ subject }}</p>
17
{% else %}
18
<p>{% trans "Users will receive the following SMS:" %}</p>
19
{% endif %}
20
<p>{{ message }}</p>
21
<a class="button" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Return to settings' %}</a>
22
{% endblock %}
chrono/manager/templates/chrono/manager_agenda_settings.html
45 45
{{ agenda.reminder_settings.display_info }}
46 46
{% endif %}
47 47
</p>
48
<p>
49
{% if agenda.reminder_settings.send_email %}
50
<a href="{% url 'chrono-manager-agenda-reminder-preview' pk=object.id type='email' %}">{% trans "Preview email" %}</a>
51
{% endif %}
52
{% if agenda.reminder_settings.send_sms %}
53
<a href="{% url 'chrono-manager-agenda-reminder-preview' pk=object.id type='sms' %}">{% trans "Preview SMS" %}</a>
54
{% endif %}
55
</p>
48 56
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-reminder-settings' pk=object.id %}">{% trans "Configure" %}</a>
49 57
</div>
50 58
</div>
chrono/manager/urls.py
83 83
        views.agenda_reminder_settings,
84 84
        name='chrono-manager-agenda-reminder-settings',
85 85
    ),
86
    url(
87
        r'^agendas/(?P<pk>\d+)/reminder/preview/(?P<type>(email|sms))/$',
88
        views.agenda_reminder_preview,
89
        name='chrono-manager-agenda-reminder-preview',
90
    ),
86 91
    url(
87 92
        r'^agendas/(?P<pk>\d+)/events/(?P<event_pk>\d+)/$',
88 93
        views.event_view,
chrono/manager/views.py
28 28
from django.http import Http404, HttpResponse, HttpResponseRedirect
29 29
from django.shortcuts import get_object_or_404
30 30
from django.shortcuts import redirect
31
from django.template.loader import render_to_string
31 32
from django.template.response import TemplateResponse
32 33
from django.urls import reverse, reverse_lazy
33 34
from django.utils.dates import MONTHS
......
1388 1389
agenda_reminder_settings = AgendaReminderSettingsView.as_view()
1389 1390

  
1390 1391

  
1392
class AgendaReminderPreviewView(ManagedAgendaMixin, TemplateView):
1393
    template_name = 'chrono/manager_agenda_reminder_preview.html'
1394

  
1395
    def dispatch(self, request, *args, **kwargs):
1396
        self.type_ = kwargs['type']
1397
        return super().dispatch(request, *args, **kwargs)
1398

  
1399
    def get_context_data(self, **kwargs):
1400
        ctx = super().get_context_data(**kwargs)
1401
        kind = self.agenda.kind
1402
        days = self.agenda.reminder_settings.days
1403
        reminder_ctx = {
1404
            'event': '{{ event_label }}',
1405
            'meeting': '{{ user_display_label }}',
1406
            'form_url': '#',
1407
            'in_x_days': _('tomorrow') if days == 1 else _('in %s days') % days,
1408
            'time': '14:30',
1409
            'date': 'Monday 2 June',
1410
            'date_short': '02/06',
1411
            'email_extra_info': self.agenda.reminder_settings.email_extra_info,
1412
            'sms_extra_info': self.agenda.reminder_settings.sms_extra_info,
1413
        }
1414

  
1415
        if self.type_ == 'email':
1416
            ctx['subject'] = render_to_string('agendas/%s_reminder_subject.txt' % kind, reminder_ctx).strip()
1417
            ctx['message'] = render_to_string('agendas/%s_reminder_body.html' % kind, reminder_ctx)
1418
        elif self.type_ == 'sms':
1419
            ctx['message'] = render_to_string('agendas/%s_reminder_message.txt' % kind, reminder_ctx)
1420

  
1421
        return ctx
1422

  
1423

  
1424
agenda_reminder_preview = AgendaReminderPreviewView.as_view()
1425

  
1426

  
1391 1427
class EventDetailView(ViewableAgendaMixin, DetailView):
1392 1428
    model = Event
1393 1429
    pk_url_kwarg = 'event_pk'
tests/test_manager.py
35 35
    TimePeriodException,
36 36
    TimePeriodExceptionSource,
37 37
    VirtualMember,
38
    AgendaReminderSettings,
38 39
)
39 40
from chrono.manager.forms import TimePeriodExceptionForm
40 41
from chrono.utils.signature import check_query
......
4005 4006
    agenda = Agenda.objects.create(label='Virtual', kind='virtual')
4006 4007
    resp = app.get('/manage/agendas/%s/settings' % agenda.id)
4007 4008
    assert not 'Booking reminders' in resp.text
4009

  
4010

  
4011
def test_manager_reminders_preview(app, admin_user):
4012
    agenda = Agenda.objects.create(label='Events', kind='events')
4013
    AgendaReminderSettings.objects.create(
4014
        agenda=agenda,
4015
        days=1,
4016
        send_email=True,
4017
        email_extra_info='An ID will be required in order to process your form.',
4018
        send_sms=True,
4019
        sms_extra_info='Take ID card.',
4020
    )
4021

  
4022
    login(app)
4023
    resp = app.get('/manage/agendas/%s/settings' % agenda.id)
4024
    assert (
4025
        'Users will be reminded of their booking both by email and by SMS, one day in advance.' in resp.text
4026
    )
4027

  
4028
    resp = resp.click('Preview email')
4029
    assert 'Users will receive the following email:' in resp.text
4030
    assert len(resp.pyquery.find('p.email-subject')) == 1
4031
    assert '<strong>Subject:</strong> Reminder for your booking tomorrow at 14:30' in resp.text
4032
    assert 'You have a booking for event "{{ event_label }}", on Monday 2 June at 14:30.' in resp.text
4033
    assert 'An ID will be required' in resp.text
4034

  
4035
    resp = resp.click('Return to settings')
4036
    resp = resp.click('Preview SMS')
4037
    assert 'Users will receive the following SMS:' in resp.text
4038
    assert (
4039
        'Reminder: you have a booking for event "{{ event_label }}", on 02/06 at 14:30. Take ID card.'
4040
        in resp.text
4041
    )
4008
-