manager: default view for events agenda (#44457)
This commit is contained in:
parent
e9fca76b10
commit
054f5c669e
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('agendas', '0050_event_slug'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='agenda',
|
||||
name='default_view',
|
||||
field=models.CharField(
|
||||
choices=[('month', 'Month view'), ('open_events', 'Open events')],
|
||||
default='month',
|
||||
max_length=20,
|
||||
verbose_name='Default view',
|
||||
),
|
||||
),
|
||||
]
|
|
@ -54,6 +54,11 @@ AGENDA_KINDS = (
|
|||
('virtual', _('Virtual')),
|
||||
)
|
||||
|
||||
AGENDA_VIEWS = (
|
||||
('month', _('Month view')),
|
||||
('open_events', _('Open events')),
|
||||
)
|
||||
|
||||
|
||||
def is_midnight(dtime):
|
||||
dtime = localtime(dtime)
|
||||
|
@ -138,6 +143,7 @@ class Agenda(models.Model):
|
|||
on_delete=models.SET_NULL,
|
||||
)
|
||||
resources = models.ManyToManyField('Resource')
|
||||
default_view = models.CharField(_('Default view'), max_length=20, choices=AGENDA_VIEWS, default='month')
|
||||
|
||||
class Meta:
|
||||
ordering = ['label']
|
||||
|
|
|
@ -61,13 +61,23 @@ class AgendaAddForm(forms.ModelForm):
|
|||
class AgendaEditForm(AgendaAddForm):
|
||||
class Meta:
|
||||
model = Agenda
|
||||
fields = ['label', 'slug', 'edit_role', 'view_role', 'minimal_booking_delay', 'maximal_booking_delay']
|
||||
fields = [
|
||||
'label',
|
||||
'slug',
|
||||
'edit_role',
|
||||
'view_role',
|
||||
'minimal_booking_delay',
|
||||
'maximal_booking_delay',
|
||||
'default_view',
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AgendaEditForm, self).__init__(*args, **kwargs)
|
||||
if kwargs['instance'].kind != 'virtual':
|
||||
self.fields['minimal_booking_delay'].required = True
|
||||
self.fields['maximal_booking_delay'].required = True
|
||||
if kwargs['instance'].kind != 'events':
|
||||
del self.fields['default_view']
|
||||
|
||||
|
||||
class ResourceAddForm(forms.ModelForm):
|
||||
|
|
|
@ -613,21 +613,6 @@ agenda_delete = AgendaDeleteView.as_view()
|
|||
|
||||
class AgendaView(ViewableAgendaMixin, View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
if self.agenda.kind == 'virtual':
|
||||
real_agendas = [
|
||||
(agenda, agenda.can_be_viewed(request.user)) for agenda in self.agenda.real_agendas.all()
|
||||
]
|
||||
return TemplateResponse(
|
||||
request=request,
|
||||
template='chrono/manager_virtual_agenda_view.html',
|
||||
context={
|
||||
'real_agendas': real_agendas,
|
||||
'agenda': self.agenda,
|
||||
'object': self.agenda,
|
||||
'user_can_manage': self.agenda.can_be_managed(self.request.user),
|
||||
},
|
||||
)
|
||||
|
||||
if self.agenda.kind == 'meetings':
|
||||
# redirect to today view
|
||||
today = datetime.date.today()
|
||||
|
@ -640,7 +625,25 @@ class AgendaView(ViewableAgendaMixin, View):
|
|||
)
|
||||
|
||||
if self.agenda.kind == 'events':
|
||||
return redirect('chrono-manager-agenda-month-redirect-view', pk=self.agenda.pk)
|
||||
# redirect to month or open events view
|
||||
if self.agenda.default_view == 'month':
|
||||
return redirect('chrono-manager-agenda-month-redirect-view', pk=self.agenda.pk)
|
||||
return redirect('chrono-manager-agenda-open-events-view', pk=self.agenda.pk)
|
||||
|
||||
# virtual agenda
|
||||
real_agendas = [
|
||||
(agenda, agenda.can_be_viewed(request.user)) for agenda in self.agenda.real_agendas.all()
|
||||
]
|
||||
return TemplateResponse(
|
||||
request=request,
|
||||
template='chrono/manager_virtual_agenda_view.html',
|
||||
context={
|
||||
'real_agendas': real_agendas,
|
||||
'agenda': self.agenda,
|
||||
'object': self.agenda,
|
||||
'user_can_manage': self.agenda.can_be_managed(self.request.user),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
agenda_view = AgendaView.as_view()
|
||||
|
|
|
@ -157,6 +157,11 @@ def test_events_agenda_redirect(app, admin_user):
|
|||
resp = app.get('/manage/agendas/%s/' % agenda.pk, status=302)
|
||||
assert resp.location.endswith('/manage/agendas/%s/month/' % agenda.pk)
|
||||
|
||||
agenda.default_view = 'open_events'
|
||||
agenda.save()
|
||||
resp = app.get('/manage/agendas/%s/' % agenda.pk, status=302)
|
||||
assert resp.location.endswith('/manage/agendas/%s/events/open/' % agenda.pk)
|
||||
|
||||
|
||||
@freezegun.freeze_time('2020-07-12')
|
||||
def test_events_agenda_month_redirect(app, admin_user):
|
||||
|
@ -711,20 +716,27 @@ def test_add_agenda_as_manager(app, manager_user):
|
|||
|
||||
|
||||
def test_options_agenda(app, admin_user):
|
||||
agenda = Agenda(label=u'Foo bar')
|
||||
agenda.save()
|
||||
agenda_events = Agenda.objects.create(label=u'Foo bar', kind='events')
|
||||
agenda_meetings = Agenda.objects.create(label=u'Foo bar', kind='meetings')
|
||||
agenda_virtual = Agenda.objects.create(label=u'Foo bar', kind='virtual')
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
|
||||
resp = resp.click('Options')
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda_events.pk)
|
||||
assert resp.form['label'].value == 'Foo bar'
|
||||
resp.form['label'] = 'Foo baz'
|
||||
assert 'default_view' in resp.context['form'].fields
|
||||
resp = resp.form.submit()
|
||||
assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
|
||||
assert resp.location.endswith('/manage/agendas/%s/settings' % agenda_events.pk)
|
||||
resp = resp.follow()
|
||||
assert 'has_resources' not in resp.context
|
||||
assert 'Foo baz' in resp.text
|
||||
assert '<h2>Settings' in resp.text
|
||||
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda_meetings.pk)
|
||||
assert 'default_view' not in resp.context['form'].fields
|
||||
resp = app.get('/manage/agendas/%s/edit' % agenda_virtual.pk)
|
||||
assert 'default_view' not in resp.context['form'].fields
|
||||
|
||||
|
||||
def test_options_agenda_cant_unset_delays(app, admin_user):
|
||||
agenda = Agenda.objects.create(label=u'Foo bar')
|
||||
|
|
Loading…
Reference in New Issue