manager: configure events type on agenda (#63286)
This commit is contained in:
parent
e21a9560f9
commit
a732e05a6f
|
@ -0,0 +1,27 @@
|
|||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('agendas', '0115_events_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='eventstype',
|
||||
options={'ordering': ['label']},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='agenda',
|
||||
name='events_type',
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name='agendas',
|
||||
to='agendas.EventsType',
|
||||
),
|
||||
),
|
||||
]
|
|
@ -297,6 +297,9 @@ class Agenda(models.Model):
|
|||
'event.remaining_places (remaining places), event.duration (duration), event.pricing (pricing).'
|
||||
),
|
||||
)
|
||||
events_type = models.ForeignKey(
|
||||
'agendas.EventsType', on_delete=models.CASCADE, related_name='agendas', null=True, blank=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ['label']
|
||||
|
@ -446,6 +449,7 @@ class Agenda(models.Model):
|
|||
agenda['booking_check_filters'] = self.booking_check_filters
|
||||
agenda['event_display_template'] = self.event_display_template
|
||||
agenda['mark_event_checked_auto'] = self.mark_event_checked_auto
|
||||
agenda['events_type'] = self.events_type.slug if self.events_type else None
|
||||
elif self.kind == 'meetings':
|
||||
agenda['meetingtypes'] = [x.export_json() for x in self.meetingtype_set.filter(deleted=False)]
|
||||
agenda['desks'] = [desk.export_json() for desk in self.desk_set.all()]
|
||||
|
@ -494,6 +498,11 @@ class Agenda(models.Model):
|
|||
raise AgendaImportError(
|
||||
_('Missing "%s" absence reasons group') % data['absence_reasons_group']
|
||||
)
|
||||
if data.get('events_type'):
|
||||
try:
|
||||
data['events_type'] = EventsType.objects.get(slug=data['events_type'])
|
||||
except EventsType.DoesNotExist:
|
||||
raise AgendaImportError(_('Missing "%s" events type') % data['events_type'])
|
||||
agenda, created = cls.objects.update_or_create(slug=data['slug'], defaults=data)
|
||||
if overwrite:
|
||||
AgendaReminderSettings.objects.filter(agenda=agenda).delete()
|
||||
|
|
|
@ -117,6 +117,7 @@ class AgendaEditForm(forms.ModelForm):
|
|||
'default_view',
|
||||
'booking_form_url',
|
||||
'event_display_template',
|
||||
'events_type',
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
@ -124,9 +125,13 @@ class AgendaEditForm(forms.ModelForm):
|
|||
if kwargs['instance'].kind != 'events':
|
||||
del self.fields['booking_form_url']
|
||||
del self.fields['event_display_template']
|
||||
del self.fields['events_type']
|
||||
self.fields['default_view'].choices = [
|
||||
(k, v) for k, v in self.fields['default_view'].choices if k != 'open_events'
|
||||
]
|
||||
else:
|
||||
if not EventsType.objects.exists():
|
||||
del self.fields['events_type']
|
||||
|
||||
|
||||
class AgendaBookingDelaysForm(forms.ModelForm):
|
||||
|
|
|
@ -18,6 +18,7 @@ from chrono.agendas.models import (
|
|||
Booking,
|
||||
Desk,
|
||||
Event,
|
||||
EventsType,
|
||||
MeetingType,
|
||||
TimePeriod,
|
||||
TimePeriodException,
|
||||
|
@ -374,7 +375,7 @@ def test_options_agenda(app, admin_user):
|
|||
agenda_events = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda_events, slug='_exceptions_holder')
|
||||
agenda_meetings = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
Agenda.objects.create(label='Foo bar', kind='virtual')
|
||||
agenda_virtual = Agenda.objects.create(label='Foo bar', kind='virtual')
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda_events.pk)
|
||||
|
@ -408,10 +409,39 @@ def test_options_agenda(app, admin_user):
|
|||
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda_meetings.pk)
|
||||
assert resp.form['default_view'].value == 'month'
|
||||
assert 'open_events' not in [k for k, v in resp.context['form'].fields['default_view'].choices]
|
||||
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda_virtual.pk)
|
||||
assert 'default_view' in resp.context['form'].fields
|
||||
assert 'open_events' not in [k for k, v in resp.context['form'].fields['default_view'].choices]
|
||||
assert 'booking_form_url' not in resp.context['form'].fields
|
||||
assert 'event_display_template' not in resp.context['form'].fields
|
||||
assert 'open_events' not in [k for k, v in resp.context['form'].fields['default_view'].choices]
|
||||
|
||||
|
||||
def test_options_events_agenda_events_type(app, admin_user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda.pk)
|
||||
assert 'events_type' not in resp.context['form'].fields
|
||||
|
||||
events_type = EventsType.objects.create(label='Foo', slug='foo')
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda.pk)
|
||||
assert 'events_type' in resp.context['form'].fields
|
||||
resp.form['events_type'] = events_type.pk
|
||||
resp.form.submit()
|
||||
agenda.refresh_from_db()
|
||||
assert agenda.events_type == events_type
|
||||
|
||||
# check kind
|
||||
agenda.kind = 'meetings'
|
||||
agenda.save()
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda.pk)
|
||||
assert 'events_type' not in resp.context['form'].fields
|
||||
agenda.kind = 'virtual'
|
||||
agenda.save()
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda.pk)
|
||||
assert 'events_type' not in resp.context['form'].fields
|
||||
|
||||
|
||||
def test_options_events_agenda_delays(settings, app, admin_user):
|
||||
|
|
|
@ -458,6 +458,33 @@ def test_import_export_agenda_with_absence_reasons(app):
|
|||
assert agenda.absence_reasons_group == group
|
||||
|
||||
|
||||
def test_import_export_agenda_with_events_type(app):
|
||||
events_type = EventsType.objects.create(label='foo')
|
||||
agenda = Agenda.objects.create(label='Foo Bar', kind='events', events_type=events_type)
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
output = get_output_of_command('export_site')
|
||||
|
||||
import_site(data={}, clean=True)
|
||||
assert Agenda.objects.count() == 0
|
||||
assert EventsType.objects.count() == 0
|
||||
data = json.loads(output)
|
||||
del data['events_types']
|
||||
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(data, overwrite=True)
|
||||
assert str(excinfo.value) == 'Missing "foo" events type'
|
||||
|
||||
EventsType.objects.create(label='foobar')
|
||||
with pytest.raises(AgendaImportError) as excinfo:
|
||||
import_site(data, overwrite=True)
|
||||
assert str(excinfo.value) == 'Missing "foo" events type'
|
||||
|
||||
events_type = EventsType.objects.create(label='foo')
|
||||
import_site(data, overwrite=True)
|
||||
agenda = Agenda.objects.get(slug=agenda.slug)
|
||||
assert agenda.events_type == events_type
|
||||
|
||||
|
||||
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