manager: absence reason groups on agenda import/export (#51535)
This commit is contained in:
parent
013869305c
commit
eb9b9f98ca
|
@ -331,6 +331,9 @@ class Agenda(models.Model):
|
|||
agenda['events'] = [x.export_json() for x in self.event_set.filter(primary_event__isnull=True)]
|
||||
if hasattr(self, 'notifications_settings'):
|
||||
agenda['notifications_settings'] = self.notifications_settings.export_json()
|
||||
agenda['absence_reasons_group'] = (
|
||||
self.absence_reasons_group.slug if self.absence_reasons_group else None
|
||||
)
|
||||
elif self.kind == 'meetings':
|
||||
agenda['meetingtypes'] = [x.export_json() for x in self.meetingtype_set.all()]
|
||||
agenda['desks'] = [desk.export_json() for desk in self.desk_set.all()]
|
||||
|
@ -369,6 +372,15 @@ class Agenda(models.Model):
|
|||
data['category'] = Category.objects.get(slug=data['category'])
|
||||
except Category.DoesNotExist:
|
||||
raise AgendaImportError(_('Missing "%s" category') % data['category'])
|
||||
if data.get('absence_reasons_group'):
|
||||
try:
|
||||
data['absence_reasons_group'] = AbsenceReasonGroup.objects.get(
|
||||
slug=data['absence_reasons_group']
|
||||
)
|
||||
except AbsenceReasonGroup.DoesNotExist:
|
||||
raise AgendaImportError(
|
||||
_('Missing "%s" absence reasons group') % data['absence_reasons_group']
|
||||
)
|
||||
agenda, created = cls.objects.get_or_create(slug=data['slug'], defaults=data)
|
||||
if not created:
|
||||
for k, v in data.items():
|
||||
|
|
|
@ -36,6 +36,7 @@ from chrono.agendas.models import (
|
|||
AgendaNotificationsSettings,
|
||||
AgendaReminderSettings,
|
||||
UnavailabilityCalendar,
|
||||
AbsenceReasonGroup,
|
||||
)
|
||||
from chrono.manager.utils import import_site
|
||||
|
||||
|
@ -346,6 +347,30 @@ def test_import_export_categorys(app):
|
|||
assert agenda.category == category
|
||||
|
||||
|
||||
def test_import_export_absence_reasons(app):
|
||||
group = AbsenceReasonGroup.objects.create(label='foo')
|
||||
agenda = Agenda.objects.create(label='Foo Bar', kind='events', absence_reasons_group=group)
|
||||
output = get_output_of_command('export_site')
|
||||
|
||||
import_site(data={}, clean=True)
|
||||
assert Agenda.objects.count() == 0
|
||||
group.delete()
|
||||
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(json.loads(output), overwrite=True)
|
||||
assert str(excinfo.value) == 'Missing "foo" absence reasons group'
|
||||
|
||||
AbsenceReasonGroup.objects.create(label='foobar')
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(json.loads(output), overwrite=True)
|
||||
assert str(excinfo.value) == 'Missing "foo" absence reasons group'
|
||||
|
||||
group = AbsenceReasonGroup.objects.create(label='foo')
|
||||
import_site(json.loads(output), overwrite=True)
|
||||
agenda = Agenda.objects.get(slug=agenda.slug)
|
||||
assert agenda.absence_reasons_group == group
|
||||
|
||||
|
||||
def test_import_export_virtual_agenda(app):
|
||||
virtual_agenda = Agenda.objects.create(label='Virtual Agenda', kind='virtual')
|
||||
output = get_output_of_command('export_site')
|
||||
|
|
Loading…
Reference in New Issue