agenda: fix recurring event import if existing (#51693)

This commit is contained in:
Lauréline Guérin 2021-03-05 11:41:02 +01:00
parent 5b7c92ea5d
commit 1df9409649
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 40 additions and 2 deletions

View File

@ -27,7 +27,6 @@ import uuid
import requests
import vobject
from dateutil.rrule import rrule, rruleset, DAILY, WEEKLY
from dateutil.relativedelta import relativedelta
import django
from django.conf import settings
@ -1233,7 +1232,25 @@ class Event(models.Model):
event.save()
if event.recurrence_rule and event.recurrence_end_date:
event.refresh_from_db()
event.create_all_recurrences()
event.recurrences.filter(start_datetime__gt=event.recurrence_end_date).delete()
update_fields = {
field: getattr(event, field)
for field in [
'label',
'duration',
'publication_date',
'places',
'waiting_list_places',
'description',
'pricing',
'url',
]
}
event.recurrences.update(**update_fields)
excluded_datetimes = [
make_naive(dt) for dt in event.recurrences.values_list('start_datetime', flat=True)
]
event.create_all_recurrences(excluded_datetimes)
def export_json(self):
recurrence_end_date = (

View File

@ -236,6 +236,27 @@ def test_import_export_recurring_event(app, freezer):
event = Event.objects.get(slug='test')
assert Event.objects.filter(primary_event=event).count() == 7
# import again
with tempfile.NamedTemporaryFile() as f:
f.write(force_bytes(output))
f.flush()
call_command('import_site', f.name)
event = Event.objects.get(slug='test')
assert Event.objects.filter(primary_event=event).count() == 7
# import again but change places
payload = json.loads(output)
payload['agendas'][0]['events'][0]['places'] = 42
with tempfile.NamedTemporaryFile() as f:
f.write(force_bytes(json.dumps(payload)))
f.flush()
call_command('import_site', f.name)
event = Event.objects.get(slug='test')
assert event.places == 42
assert Event.objects.filter(primary_event=event, places=42).count() == 7
def test_import_export_permissions(app):
meetings_agenda = Agenda.objects.create(label='Foo Bar', kind='meetings')