agenda: fix recurring event import if existing (#51693)
This commit is contained in:
parent
5b7c92ea5d
commit
1df9409649
|
@ -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 = (
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue