agendas: fix import with existing settings (#47267)
This commit is contained in:
parent
7eb3e0c1b2
commit
1cf8ab96d7
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue