agendas: duplicate notification and reminder settings (#55311)
This commit is contained in:
parent
456e3597fa
commit
b54b1925e5
|
@ -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)
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue