Projet

Général

Profil

0001-agenda-fix-recurring-event-import-if-existing-51693.patch

Lauréline Guérin, 05 mars 2021 11:41

Télécharger (3,28 ko)

Voir les différences:

Subject: [PATCH] agenda: fix recurring event import if existing (#51693)

 chrono/agendas/models.py    |  7 +++++--
 chrono/manager/forms.py     | 12 +++++++-----
 tests/test_import_export.py |  9 +++++++++
 3 files changed, 21 insertions(+), 7 deletions(-)
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
-