0001-agendas-allow-custom-event-api-text-53661.patch
chrono/agendas/models.py | ||
---|---|---|
204 | 204 |
_('Booking form URL'), max_length=200, blank=True, validators=[django_template_validator] |
205 | 205 |
) |
206 | 206 |
desk_simple_management = models.BooleanField(default=False) |
207 |
event_display_template = models.CharField( |
|
208 |
_('Event display template'), |
|
209 |
max_length=256, |
|
210 |
help_text=_( |
|
211 |
'Change event text displayed to users. For example, "{{ event.label }} - {{ event.start_datetime }}" will show event datetime after label.' |
|
212 |
), |
|
213 |
) |
|
207 | 214 | |
208 | 215 |
class Meta: |
209 | 216 |
ordering = ['label'] |
chrono/api/views.py | ||
---|---|---|
23 | 23 |
from django.db.models import Prefetch, Q |
24 | 24 |
from django.http import Http404, HttpResponse |
25 | 25 |
from django.shortcuts import get_object_or_404 |
26 |
from django.template import Context, Template |
|
26 | 27 |
from django.urls import reverse |
27 | 28 |
from django.utils.dateparse import parse_date, parse_datetime |
28 | 29 |
from django.utils.encoding import force_text |
... | ... | |
400 | 401 |
def get_event_detail(request, event, agenda=None, min_places=1): |
401 | 402 |
agenda = agenda or event.agenda |
402 | 403 |
event_text = force_text(event) |
403 |
if event.label and event.primary_event is not None: |
|
404 |
if agenda.event_display_template: |
|
405 |
event_text = Template(agenda.event_display_template).render(Context({'event': event})) |
|
406 |
elif event.label and event.primary_event is not None: |
|
404 | 407 |
event_text = '%s (%s)' % ( |
405 | 408 |
event.label, |
406 | 409 |
date_format(localtime(event.start_datetime), 'DATETIME_FORMAT'), |
chrono/manager/forms.py | ||
---|---|---|
86 | 86 |
'anonymize_delay', |
87 | 87 |
'default_view', |
88 | 88 |
'booking_form_url', |
89 |
'event_display_template', |
|
89 | 90 |
] |
90 | 91 | |
91 | 92 |
def __init__(self, *args, **kwargs): |
92 | 93 |
super(AgendaEditForm, self).__init__(*args, **kwargs) |
93 | 94 |
if kwargs['instance'].kind != 'events': |
94 | 95 |
del self.fields['booking_form_url'] |
96 |
del self.fields['user_display_template'] |
|
95 | 97 |
self.fields['default_view'].choices = [ |
96 | 98 |
(k, v) for k, v in self.fields['default_view'].choices if k != 'open_events' |
97 | 99 |
] |
tests/test_api.py | ||
---|---|---|
514 | 514 |
assert 'data' in resp.json |
515 | 515 | |
516 | 516 | |
517 |
@pytest.mark.freeze_time('2021-05-06 14:00') |
|
517 | 518 |
def test_datetime_api_label(app): |
518 | 519 |
agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0) |
519 | 520 |
Event.objects.create( |
... | ... | |
524 | 525 |
agenda=agenda, |
525 | 526 |
) |
526 | 527 |
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug) |
527 |
assert 'Hello world' in [x['text'] for x in resp.json['data']] |
|
528 |
assert 'Hello world' == resp.json['data'][0]['text'] |
|
529 | ||
530 |
agenda.event_display_template = '{{ event.label }} - {{ event.start_datetime }}' |
|
531 |
agenda.save() |
|
532 |
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug) |
|
533 |
assert 'Hello world - May 7, 2021, 4 p.m.' == resp.json['data'][0]['text'] |
|
528 | 534 | |
529 | 535 | |
530 | 536 |
def test_datetime_api_urls(app): |
531 |
- |