0002-manager-add-recurrences-on-event-creation-60504.patch
chrono/manager/forms.py | ||
---|---|---|
24 | 24 |
from django.conf import settings |
25 | 25 |
from django.contrib.auth.models import Group |
26 | 26 |
from django.core.exceptions import FieldDoesNotExist |
27 |
from django.db import transaction |
|
27 | 28 |
from django.forms import ValidationError |
28 | 29 |
from django.utils.encoding import force_text |
29 | 30 |
from django.utils.six import StringIO |
... | ... | |
198 | 199 |
'recurrence_end_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'), |
199 | 200 |
} |
200 | 201 | |
202 |
def clean(self): |
|
203 |
super().clean() |
|
204 |
if self.cleaned_data.get('frequency') == 'unique': |
|
205 |
self.cleaned_data['recurrence_days'] = None |
|
206 |
self.cleaned_data['recurrence_end_date'] = None |
|
207 | ||
201 | 208 |
def clean_recurrence_days(self): |
202 | 209 |
recurrence_days = self.cleaned_data['recurrence_days'] |
203 | 210 |
if recurrence_days == []: |
204 | 211 |
return None |
205 | 212 |
return recurrence_days |
206 | 213 | |
214 |
def save(self, *args, **kwargs): |
|
215 |
with transaction.atomic(): |
|
216 |
event = super().save(*args, **kwargs) |
|
217 |
if event.recurrence_end_date: |
|
218 |
event.create_all_recurrences() |
|
219 |
return event |
|
220 | ||
207 | 221 | |
208 | 222 |
class EventForm(NewEventForm): |
209 | 223 |
protected_fields = ( |
... | ... | |
281 | 295 |
): |
282 | 296 |
raise ValidationError(_('Bookings exist after this date.')) |
283 | 297 | |
284 |
if self.cleaned_data.get('frequency') == 'unique': |
|
285 |
self.cleaned_data['recurrence_days'] = None |
|
286 |
self.cleaned_data['recurrence_end_date'] = None |
|
287 | ||
288 | 298 |
def save(self, *args, **kwargs): |
289 | 299 |
with self.instance.update_recurrences( |
290 | 300 |
self.changed_data, |
tests/manager/test_event.py | ||
---|---|---|
62 | 62 |
) |
63 | 63 | |
64 | 64 | |
65 |
@pytest.mark.freeze_time('2021-05-06 14:00') |
|
66 |
def test_add_recurring_event(app, admin_user): |
|
67 |
agenda = Agenda.objects.create(label='Foo bar', kind='events') |
|
68 |
Desk.objects.create(agenda=agenda, slug='_exceptions_holder') |
|
69 | ||
70 |
app = login(app) |
|
71 |
resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200) |
|
72 |
resp = resp.click('New Event') |
|
73 |
resp.form['start_datetime_0'] = '2021-06-01' |
|
74 |
resp.form['start_datetime_1'] = '17:00' |
|
75 |
resp.form['places'] = 10 |
|
76 |
resp.form['frequency'] = 'unique' # not a recurring event |
|
77 |
resp.form['recurrence_days'] = [1] |
|
78 |
resp.form.submit().follow() |
|
79 | ||
80 |
event = Event.objects.get() |
|
81 |
assert event.recurrence_days is None |
|
82 |
event.delete() |
|
83 | ||
84 |
# add recurring event |
|
85 |
resp.form['frequency'] = 'recurring' |
|
86 |
resp.form.submit().follow() |
|
87 | ||
88 |
event = Event.objects.get() |
|
89 |
assert event.recurrence_days == [1] |
|
90 |
event.delete() |
|
91 | ||
92 |
# add recurring event with end date |
|
93 |
resp.form['recurrence_end_date'] = '2021-07-01' |
|
94 |
resp.form.submit().follow() |
|
95 | ||
96 |
event = Event.objects.get(primary_event__isnull=True) |
|
97 |
assert event.recurrence_days == [1] |
|
98 |
assert Event.objects.filter(primary_event=event).count() == 5 |
|
99 | ||
100 | ||
65 | 101 |
def test_add_event_on_missing_agenda(app, admin_user): |
66 | 102 |
app = login(app) |
67 | 103 |
app.get('/manage/agendas/%s/add-event' % '0', status=404) |
68 |
- |