0001-agenda-fix-recurring-event-import-if-existing-51693.patch
chrono/agendas/models.py | ||
---|---|---|
27 | 27 |
import requests |
28 | 28 |
import vobject |
29 | 29 |
from dateutil.rrule import rrule, rruleset, DAILY, WEEKLY |
30 |
from dateutil.relativedelta import relativedelta |
|
31 | 30 | |
32 | 31 |
import django |
33 | 32 |
from django.conf import settings |
... | ... | |
1233 | 1232 |
event.save() |
1234 | 1233 |
if event.recurrence_rule and event.recurrence_end_date: |
1235 | 1234 |
event.refresh_from_db() |
1236 |
event.create_all_recurrences() |
|
1235 |
event.recurrences.filter(start_datetime__gt=event.recurrence_end_date).delete() |
|
1236 |
excluded_datetimes = [ |
|
1237 |
make_naive(dt) for dt in event.recurrences.values_list('start_datetime', flat=True) |
|
1238 |
] |
|
1239 |
event.create_all_recurrences(excluded_datetimes) |
|
1237 | 1240 | |
1238 | 1241 |
def export_json(self): |
1239 | 1242 |
recurrence_end_date = ( |
chrono/manager/forms.py | ||
---|---|---|
233 | 233 |
} |
234 | 234 |
self.instance.recurrences.update(**update_fields) |
235 | 235 | |
236 |
event = super().save(*args, **kwargs) |
|
237 |
if event.recurrence_end_date: |
|
238 |
self.instance.recurrences.filter(start_datetime__gt=event.recurrence_end_date).delete() |
|
236 |
super().save(*args, **kwargs) |
|
237 |
if self.instance.recurrence_end_date: |
|
238 |
self.instance.recurrences.filter( |
|
239 |
start_datetime__gt=self.instance.recurrence_end_date |
|
240 |
).delete() |
|
239 | 241 |
excluded_datetimes = [ |
240 | 242 |
make_naive(dt) |
241 | 243 |
for dt in self.instance.recurrences.values_list('start_datetime', flat=True) |
242 | 244 |
] |
243 |
event.create_all_recurrences(excluded_datetimes)
|
|
244 |
return event
|
|
245 |
self.instance.create_all_recurrences(excluded_datetimes)
|
|
246 |
return self.instance
|
|
245 | 247 | |
246 | 248 | |
247 | 249 |
class AgendaResourceForm(forms.Form): |
tests/test_import_export.py | ||
---|---|---|
236 | 236 |
event = Event.objects.get(slug='test') |
237 | 237 |
assert Event.objects.filter(primary_event=event).count() == 7 |
238 | 238 | |
239 |
# import again |
|
240 |
with tempfile.NamedTemporaryFile() as f: |
|
241 |
f.write(force_bytes(output)) |
|
242 |
f.flush() |
|
243 |
call_command('import_site', f.name) |
|
244 | ||
245 |
event = Event.objects.get(slug='test') |
|
246 |
assert Event.objects.filter(primary_event=event).count() == 7 |
|
247 | ||
239 | 248 | |
240 | 249 |
def test_import_export_permissions(app): |
241 | 250 |
meetings_agenda = Agenda.objects.create(label='Foo Bar', kind='meetings') |
242 |
- |