agendas: fix import with existing settings (#47267)

This commit is contained in:
Lauréline Guérin 2020-10-02 11:18:11 +02:00
parent 7eb3e0c1b2
commit 1cf8ab96d7
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 37 additions and 30 deletions

View File

@ -357,27 +357,27 @@ class Agenda(models.Model):
AgendaReminderSettings.objects.filter(agenda=agenda).delete()
if reminder_settings:
reminder_settings['agenda'] = agenda
AgendaReminderSettings.import_json(reminder_settings).save()
AgendaReminderSettings.import_json(reminder_settings)
if data['kind'] == 'events':
if overwrite:
Event.objects.filter(agenda=agenda).delete()
AgendaNotificationsSettings.objects.filter(agenda=agenda).delete()
for event_data in events:
event_data['agenda'] = agenda
Event.import_json(event_data).save()
Event.import_json(event_data)
if notifications_settings:
notifications_settings['agenda'] = agenda
AgendaNotificationsSettings.import_json(notifications_settings).save()
AgendaNotificationsSettings.import_json(notifications_settings)
elif data['kind'] == 'meetings':
if overwrite:
MeetingType.objects.filter(agenda=agenda).delete()
Desk.objects.filter(agenda=agenda).delete()
for type_data in meetingtypes:
type_data['agenda'] = agenda
MeetingType.import_json(type_data).save()
MeetingType.import_json(type_data)
for desk in desks:
desk['agenda'] = agenda
Desk.import_json(desk).save()
Desk.import_json(desk)
agenda.resources.set(resources_by_slug.values())
elif data['kind'] == 'virtual':
if overwrite:
@ -385,7 +385,7 @@ class Agenda(models.Model):
VirtualMember.objects.filter(virtual_agenda=agenda).delete()
for excluded_timeperiod in excluded_timeperiods:
excluded_timeperiod['agenda'] = agenda
TimePeriod.import_json(excluded_timeperiod).save()
TimePeriod.import_json(excluded_timeperiod)
for real_agenda in real_agendas:
try:
real_agenda = Agenda.objects.get(slug=real_agenda['slug'], kind=real_agenda['kind'])
@ -609,7 +609,9 @@ class TimePeriod(models.Model):
@classmethod
def import_json(cls, data):
data = clean_import_data(cls, data)
return cls(**data)
timeperiod = cls(**data)
timeperiod.save()
return timeperiod
def export_json(self):
return {
@ -777,12 +779,9 @@ class MeetingType(models.Model):
@classmethod
def import_json(cls, data):
data = clean_import_data(cls, data)
meeting_type, created = cls.objects.get_or_create(
meeting_type, created = cls.objects.update_or_create(
slug=data['slug'], agenda=data['agenda'], defaults=data
)
if not created:
for k, v in data.items():
setattr(meeting_type, k, v)
return meeting_type
def export_json(self):
@ -971,12 +970,11 @@ class Event(models.Model):
)
data = clean_import_data(cls, data)
if data.get('slug'):
event, created = cls.objects.get_or_create(slug=data['slug'], defaults=data)
if not created:
for k, v in data.items():
setattr(event, k, v)
event, created = cls.objects.update_or_create(slug=data['slug'], defaults=data)
return event
return cls(**data)
event = cls(**data)
event.save()
return event
def export_json(self):
return {
@ -1149,17 +1147,14 @@ class Desk(models.Model):
timeperiods = data.pop('timeperiods', [])
exceptions = data.pop('exceptions', [])
data = clean_import_data(cls, data)
instance, created = cls.objects.get_or_create(slug=data['slug'], agenda=data['agenda'], defaults=data)
if not created:
for k, v in data.items():
setattr(instance, k, v)
desk, created = cls.objects.update_or_create(slug=data['slug'], agenda=data['agenda'], defaults=data)
for timeperiod in timeperiods:
timeperiod['desk'] = instance
TimePeriod.import_json(timeperiod).save()
timeperiod['desk'] = desk
TimePeriod.import_json(timeperiod)
for exception in exceptions:
exception['desk'] = instance
TimePeriodException.import_json(exception).save()
return instance
exception['desk'] = desk
TimePeriodException.import_json(exception)
return desk
def export_json(self):
return {
@ -1605,7 +1600,9 @@ class TimePeriodException(models.Model):
if k.endswith('_datetime'):
data[k] = import_datetime(v)
data = clean_import_data(cls, data)
return cls(**data)
exception = cls(**data)
exception.save()
return exception
def export_json(self):
def export_datetime(dt):
@ -1753,7 +1750,9 @@ class AgendaNotificationsSettings(models.Model):
@classmethod
def import_json(cls, data):
data = clean_import_data(cls, data)
return cls(**data)
agenda = data.pop('agenda')
notification_settings, created = cls.objects.update_or_create(agenda=agenda, defaults=data)
return notification_settings
def export_json(self):
return {
@ -1812,7 +1811,9 @@ class AgendaReminderSettings(models.Model):
@classmethod
def import_json(cls, data):
data = clean_import_data(cls, data)
return cls(**data)
agenda = data.pop('agenda')
reminder_settings, created = cls.objects.update_or_create(agenda=agenda, defaults=data)
return reminder_settings
def export_json(self):
return {

View File

@ -485,7 +485,7 @@ def test_import_export_slug_fields(app):
def test_import_export_notification_settings():
agenda = Agenda.objects.create(label='Foo bar', kind='events')
settings = AgendaNotificationsSettings.objects.create(
AgendaNotificationsSettings.objects.create(
agenda=agenda,
almost_full_event=AgendaNotificationsSettings.EDIT_ROLE,
full_event=AgendaNotificationsSettings.VIEW_ROLE,
@ -508,10 +508,13 @@ def test_import_export_notification_settings():
cancelled_event_emails=['hop@entrouvert.com', 'top@entrouvert.com'],
)
# again - check OneToOneField
import_site(payload)
def test_import_export_reminder_settings():
agenda = Agenda.objects.create(label='Foo bar', kind='events')
settings = AgendaReminderSettings.objects.create(
AgendaReminderSettings.objects.create(
agenda=agenda, days=2, send_email=True, send_sms=False, email_extra_info='test',
)
output = get_output_of_command('export_site')
@ -525,3 +528,6 @@ def test_import_export_reminder_settings():
AgendaReminderSettings.objects.get(
agenda=agenda, days=2, send_email=True, send_sms=False, email_extra_info='test',
)
# again - check OneToOneField
import_site(payload)