Projet

Général

Profil

0001-family-add-button-to-booking-form-62244.patch

Lauréline Guérin, 28 février 2022 18:15

Télécharger (8,76 ko)

Voir les différences:

Subject: [PATCH] family: add button to booking form (#62244)

 combo/apps/family/forms.py                    |  1 +
 .../migrations/0012_booking_form_url.py       | 73 +++++++++++++++++++
 combo/apps/family/models.py                   | 28 +++++--
 .../templates/combo/family/weekly_agenda.html |  1 +
 tests/test_family.py                          | 34 +++++++++
 5 files changed, 131 insertions(+), 6 deletions(-)
 create mode 100644 combo/apps/family/migrations/0012_booking_form_url.py
combo/apps/family/forms.py
30 30
            'start_date_filter',
31 31
            'end_date_filter',
32 32
            'user_external_template',
33
            'booking_form_url',
33 34
        ]
34 35

  
35 36
    def save(self, *args, **kwargs):
combo/apps/family/migrations/0012_booking_form_url.py
1
from django.db import migrations, models
2

  
3
import combo.data.models
4

  
5

  
6
class Migration(migrations.Migration):
7

  
8
    dependencies = [
9
        ('family', '0011_agenda_subscribed_and_dates'),
10
    ]
11

  
12
    operations = [
13
        migrations.AddField(
14
            model_name='weeklyagendacell',
15
            name='booking_form_url',
16
            field=models.CharField(
17
                blank=True,
18
                max_length=2000,
19
                validators=[combo.data.models.django_template_validator],
20
                verbose_name='URL to the booking Form',
21
            ),
22
        ),
23
        migrations.AlterField(
24
            model_name='weeklyagendacell',
25
            name='agenda_categories',
26
            field=models.CharField(
27
                blank=True,
28
                max_length=2000,
29
                validators=[combo.data.models.django_template_validator],
30
                verbose_name='Agenda categories',
31
            ),
32
        ),
33
        migrations.AlterField(
34
            model_name='weeklyagendacell',
35
            name='agenda_references_template',
36
            field=models.CharField(
37
                blank=True,
38
                max_length=2000,
39
                validators=[combo.data.models.django_template_validator],
40
                verbose_name='Agenda references template',
41
            ),
42
        ),
43
        migrations.AlterField(
44
            model_name='weeklyagendacell',
45
            name='end_date_filter',
46
            field=models.CharField(
47
                blank=True,
48
                max_length=250,
49
                validators=[combo.data.models.django_template_validator],
50
                verbose_name='End date filter template',
51
            ),
52
        ),
53
        migrations.AlterField(
54
            model_name='weeklyagendacell',
55
            name='start_date_filter',
56
            field=models.CharField(
57
                blank=True,
58
                max_length=250,
59
                validators=[combo.data.models.django_template_validator],
60
                verbose_name='Start date filter template',
61
            ),
62
        ),
63
        migrations.AlterField(
64
            model_name='weeklyagendacell',
65
            name='user_external_template',
66
            field=models.CharField(
67
                blank=True,
68
                max_length=255,
69
                validators=[combo.data.models.django_template_validator],
70
                verbose_name='User external reference template',
71
            ),
72
        ),
73
    ]
combo/apps/family/models.py
19 19
from django.utils.translation import ugettext_lazy as _
20 20

  
21 21
from combo.data.library import register_cell_class
22
from combo.data.models import JsonCellBase
22
from combo.data.models import JsonCellBase, django_template_validator
23
from combo.utils import get_templated_url
23 24

  
24 25

  
25 26
@register_cell_class
......
35 36
        ],
36 37
    )
37 38
    agenda_references_template = models.CharField(
38
        _('Agenda references template'), max_length=2000, blank=True
39
        _('Agenda references template'), max_length=2000, blank=True, validators=[django_template_validator]
40
    )
41
    agenda_categories = models.CharField(
42
        _('Agenda categories'), max_length=2000, blank=True, validators=[django_template_validator]
43
    )
44
    start_date_filter = models.CharField(
45
        _('Start date filter template'), max_length=250, blank=True, validators=[django_template_validator]
46
    )
47
    end_date_filter = models.CharField(
48
        _('End date filter template'), max_length=250, blank=True, validators=[django_template_validator]
39 49
    )
40
    agenda_categories = models.CharField(_('Agenda categories'), max_length=2000, blank=True)
41
    start_date_filter = models.CharField(_('Start date filter template'), max_length=250, blank=True)
42
    end_date_filter = models.CharField(_('End date filter template'), max_length=250, blank=True)
43 50
    user_external_template = models.CharField(
44
        _('User external reference template'), max_length=255, blank=True
51
        _('User external reference template'),
52
        max_length=255,
53
        blank=True,
54
        validators=[django_template_validator],
55
    )
56
    booking_form_url = models.CharField(
57
        _('URL to the booking Form'), max_length=2000, blank=True, validators=[django_template_validator]
45 58
    )
46 59

  
47 60
    default_template_name = 'combo/family/weekly_agenda.html'
......
90 103
    def get_cell_extra_context(self, context):
91 104
        if context.get('placeholder_search_mode'):
92 105
            return {}
106
        if self.booking_form_url:
107
            context['booking_form_url'] = get_templated_url(self.booking_form_url, context=context)
108

  
93 109
        return super().get_cell_extra_context(context)
94 110

  
95 111
    def get_default_form_class(self):
combo/apps/family/templates/combo/family/weekly_agenda.html
37 37
  {% endwith %}
38 38
{% if day.weekday == 6 %}
39 39
</ul>
40
{% if booking_form_url %}<p class="booking-btn"><a class="pk-button" href="{{ booking_form_url }}{% if '?' in booking_form_url %}&{% else %}?{% endif %}current={{ day|adjust_to_week_monday|date:"Y-m-d" }}">{% trans "Update bookings" %}</a></p>{% endif %}
40 41
<p class="no-activity">{% trans "No activity this week" %}</p>
41 42
</li>
42 43
{% endif %}
tests/test_family.py
264 264
            'http://chrono.example.org/api/agendas/datetimes/'
265 265
            '?%s&date_start=&date_end=xyz&user_external_id=&show_past_events=true' % agenda_param
266 266
        )
267

  
268

  
269
def test_weeklyagenda_cell_booking_form_url(context):
270
    page = Page.objects.create(title='Family', slug='index', template_name='standard')
271
    cell = WeeklyAgendaCell.objects.create(page=page, placeholder='content', order=0)
272
    data = {
273
        'data': [
274
            {'text': 'Foo', 'date': '2022-02-28'},
275
        ]
276
    }
277

  
278
    context['synchronous'] = True  # to get fresh content
279
    context['request'].user = MockUserWithNameId()
280

  
281
    with mock.patch('combo.utils.requests.get') as requests_get:
282
        requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
283
        result = cell.render(context)
284
        assert 'booking-btn' not in result
285

  
286
    cell.booking_form_url = 'http://example.com/foobar/'
287
    cell.save()
288
    with mock.patch('combo.utils.requests.get') as requests_get:
289
        requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
290
        result = cell.render(context)
291
        assert 'booking-btn' in result
292
        assert 'http://example.com/foobar/?current=2022-02-28' in result
293

  
294
    cell.booking_form_url = 'http://example.com/foobar/?user={{ user_nameid }}'
295
    cell.save()
296
    with mock.patch('combo.utils.requests.get') as requests_get:
297
        requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
298
        result = cell.render(context)
299
        assert 'booking-btn' in result
300
        assert 'http://example.com/foobar/?user=xyz&current=2022-02-28' in result
267
-