agendas: duplicate notification and reminder settings (#55311)

This commit is contained in:
Valentin Deniaud 2021-07-08 16:49:30 +02:00
parent 456e3597fa
commit b54b1925e5
2 changed files with 29 additions and 0 deletions

View File

@ -533,11 +533,15 @@ class Agenda(models.Model):
for event in self.event_set.all():
event.duplicate(agenda_target=new_agenda)
self.desk_set.get().duplicate(agenda_target=new_agenda, reset_slug=False)
if hasattr(self, 'notifications_settings'):
self.notifications_settings.duplicate(agenda_target=new_agenda)
elif self.kind == 'virtual':
for timeperiod in self.excluded_timeperiods.all():
timeperiod.duplicate(agenda_target=new_agenda)
for real_agenda in self.real_agendas.all():
VirtualMember.objects.create(virtual_agenda=new_agenda, real_agenda=real_agenda)
if hasattr(self, 'reminder_settings'):
self.reminder_settings.duplicate(agenda_target=new_agenda)
return new_agenda
def get_effective_time_periods(self):
@ -2695,6 +2699,13 @@ class AgendaNotificationsSettings(models.Model):
'cancelled_event_emails': self.cancelled_event_emails,
}
def duplicate(self, agenda_target):
new_settings = copy.deepcopy(self)
new_settings.pk = None
new_settings.agenda = agenda_target
new_settings.save()
return new_settings
class AgendaReminderSettings(models.Model):
ONE_DAY_BEFORE = 1
@ -2763,6 +2774,13 @@ class AgendaReminderSettings(models.Model):
'sms_extra_info': self.sms_extra_info,
}
def duplicate(self, agenda_target):
new_settings = copy.deepcopy(self)
new_settings.pk = None
new_settings.agenda = agenda_target
new_settings.save()
return new_settings
class AbsenceReasonGroup(models.Model):
slug = models.SlugField(_('Identifier'), max_length=160, unique=True)

View File

@ -1386,10 +1386,21 @@ def test_agenda_events_duplicate():
end_datetime=now() + datetime.timedelta(minutes=30),
)
assert desk.timeperiodexception_set.count() == 34
settings = AgendaNotificationsSettings.objects.create(
agenda=agenda,
full_event=AgendaNotificationsSettings.EMAIL_FIELD,
full_event_emails=['hop@entrouvert.com', 'top@entrouvert.com'],
)
AgendaReminderSettings.objects.create(agenda=agenda, days=1, send_email=True, email_extra_info='top')
new_agenda = agenda.duplicate()
assert new_agenda.pk != agenda.pk
assert new_agenda.kind == 'events'
assert new_agenda.notifications_settings.full_event == AgendaNotificationsSettings.EMAIL_FIELD
assert new_agenda.notifications_settings.full_event_emails == ['hop@entrouvert.com', 'top@entrouvert.com']
assert new_agenda.reminder_settings.days == 1
assert new_agenda.reminder_settings.send_email is True
assert new_agenda.reminder_settings.email_extra_info == 'top'
new_desk = new_agenda.desk_set.get()
assert new_desk.slug == '_exceptions_holder'