manager: add recurrences on event creation (#60504)
This commit is contained in:
parent
c9337d47b7
commit
39f78e0cc2
|
@ -24,6 +24,7 @@ from django import forms
|
|||
from django.conf import settings
|
||||
from django.contrib.auth.models import Group
|
||||
from django.core.exceptions import FieldDoesNotExist
|
||||
from django.db import transaction
|
||||
from django.forms import ValidationError
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.six import StringIO
|
||||
|
@ -198,12 +199,25 @@ class NewEventForm(forms.ModelForm):
|
|||
'recurrence_end_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'),
|
||||
}
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
if self.cleaned_data.get('frequency') == 'unique':
|
||||
self.cleaned_data['recurrence_days'] = None
|
||||
self.cleaned_data['recurrence_end_date'] = None
|
||||
|
||||
def clean_recurrence_days(self):
|
||||
recurrence_days = self.cleaned_data['recurrence_days']
|
||||
if recurrence_days == []:
|
||||
return None
|
||||
return recurrence_days
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
with transaction.atomic():
|
||||
event = super().save(*args, **kwargs)
|
||||
if event.recurrence_end_date:
|
||||
event.create_all_recurrences()
|
||||
return event
|
||||
|
||||
|
||||
class EventForm(NewEventForm):
|
||||
protected_fields = (
|
||||
|
@ -281,10 +295,6 @@ class EventForm(NewEventForm):
|
|||
):
|
||||
raise ValidationError(_('Bookings exist after this date.'))
|
||||
|
||||
if self.cleaned_data.get('frequency') == 'unique':
|
||||
self.cleaned_data['recurrence_days'] = None
|
||||
self.cleaned_data['recurrence_end_date'] = None
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
with self.instance.update_recurrences(
|
||||
self.changed_data,
|
||||
|
@ -292,7 +302,7 @@ class EventForm(NewEventForm):
|
|||
self.protected_fields,
|
||||
list(self.protected_fields) + ['recurrence_end_date', 'frequency'],
|
||||
):
|
||||
super().save(*args, **kwargs)
|
||||
super(NewEventForm, self).save(*args, **kwargs)
|
||||
return self.instance
|
||||
|
||||
|
||||
|
|
|
@ -62,6 +62,42 @@ def test_add_event(app, admin_user):
|
|||
)
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-05-06 14:00')
|
||||
def test_add_recurring_event(app, admin_user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
|
||||
resp = resp.click('New Event')
|
||||
resp.form['start_datetime_0'] = '2021-06-01'
|
||||
resp.form['start_datetime_1'] = '17:00'
|
||||
resp.form['places'] = 10
|
||||
resp.form['frequency'] = 'unique' # not a recurring event
|
||||
resp.form['recurrence_days'] = [1]
|
||||
resp.form.submit().follow()
|
||||
|
||||
event = Event.objects.get()
|
||||
assert event.recurrence_days is None
|
||||
event.delete()
|
||||
|
||||
# add recurring event
|
||||
resp.form['frequency'] = 'recurring'
|
||||
resp.form.submit().follow()
|
||||
|
||||
event = Event.objects.get()
|
||||
assert event.recurrence_days == [1]
|
||||
event.delete()
|
||||
|
||||
# add recurring event with end date
|
||||
resp.form['recurrence_end_date'] = '2021-07-01'
|
||||
resp.form.submit().follow()
|
||||
|
||||
event = Event.objects.get(primary_event__isnull=True)
|
||||
assert event.recurrence_days == [1]
|
||||
assert Event.objects.filter(primary_event=event).count() == 5
|
||||
|
||||
|
||||
def test_add_event_on_missing_agenda(app, admin_user):
|
||||
app = login(app)
|
||||
app.get('/manage/agendas/%s/add-event' % '0', status=404)
|
||||
|
|
Loading…
Reference in New Issue