manager: move roles and booking delays to own form (#46774)
This commit is contained in:
parent
81cb0ee0ea
commit
54e4572011
|
@ -66,17 +66,13 @@ class AgendaAddForm(forms.ModelForm):
|
|||
)
|
||||
|
||||
|
||||
class AgendaEditForm(AgendaAddForm):
|
||||
class AgendaEditForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Agenda
|
||||
fields = [
|
||||
'label',
|
||||
'slug',
|
||||
'category',
|
||||
'edit_role',
|
||||
'view_role',
|
||||
'minimal_booking_delay',
|
||||
'maximal_booking_delay',
|
||||
'anonymize_delay',
|
||||
'default_view',
|
||||
'booking_form_url',
|
||||
|
@ -84,14 +80,35 @@ class AgendaEditForm(AgendaAddForm):
|
|||
|
||||
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']
|
||||
del self.fields['booking_form_url']
|
||||
|
||||
|
||||
class AgendaBookingDelaysForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Agenda
|
||||
fields = [
|
||||
'minimal_booking_delay',
|
||||
'maximal_booking_delay',
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AgendaBookingDelaysForm, self).__init__(*args, **kwargs)
|
||||
if kwargs['instance'].kind != 'virtual':
|
||||
self.fields['minimal_booking_delay'].required = True
|
||||
self.fields['maximal_booking_delay'].required = True
|
||||
|
||||
|
||||
class AgendaRolesForm(AgendaAddForm):
|
||||
class Meta:
|
||||
model = Agenda
|
||||
fields = [
|
||||
'edit_role',
|
||||
'view_role',
|
||||
]
|
||||
|
||||
|
||||
class UnavailabilityCalendarAddForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = UnavailabilityCalendar
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
{% extends "chrono/manager_home.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block appbar %}
|
||||
<h2>{% trans "New Agenda" %}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Save" %}</button>
|
||||
<a class="cancel" href="{% url 'chrono-manager-homepage' %}">{% trans 'Cancel' %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -1,33 +1,24 @@
|
|||
{% extends "chrono/manager_home.html" %}
|
||||
{% extends "chrono/manager_agenda_view.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block breadcrumb %}
|
||||
{{ block.super }}
|
||||
{% if object.pk %}
|
||||
<a href="{% url 'chrono-manager-agenda-view' object.pk %}">{{ object }}</a>
|
||||
<a href="{% url 'chrono-manager-agenda-settings' object.pk %}">{% trans 'Settings' %}</a>
|
||||
<a href="{% url 'chrono-manager-agenda-edit' object.pk %}">{% trans 'Edit Agenda' %}</a>
|
||||
{% else %}
|
||||
<a href="{% url 'chrono-manager-agenda-add' %}">{% trans 'New Agenda' %}</a>
|
||||
{% endif %}
|
||||
<a href="{% url 'chrono-manager-agenda-view' object.pk %}">{{ object }}</a>
|
||||
<a href="{% url 'chrono-manager-agenda-settings' object.pk %}">{% trans 'Settings' %}</a>
|
||||
<a href="{% url 'chrono-manager-agenda-edit' object.pk %}">{{ title }}</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block appbar %}
|
||||
{% if object.id %}
|
||||
<h2>{% trans "Edit Agenda" %}</h2>
|
||||
{% else %}
|
||||
<h2>{% trans "New Agenda" %}</h2>
|
||||
{% endif %}
|
||||
<h2>{{ title }}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Save" %}</button>
|
||||
<a class="cancel" href="{% url 'chrono-manager-homepage' %}">{% trans 'Cancel' %}</a>
|
||||
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
{% extends "chrono/manager_agenda_view.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block breadcrumb %}
|
||||
{{ block.super }}
|
||||
<a href="">{% trans "Reminder settings" %}</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block appbar %}
|
||||
<h2>{% trans "Reminder settings" %}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Save" %}</button>
|
||||
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -39,7 +39,9 @@
|
|||
|
||||
{% block agenda-reminder %}
|
||||
<div class="section">
|
||||
<h3>{% trans "Booking reminders" %}</h3>
|
||||
<h3>{% trans "Booking reminders" %}
|
||||
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-reminder-settings' pk=object.id %}">{% trans "Configure" %}</a>
|
||||
</h3>
|
||||
<div>
|
||||
<p>
|
||||
{% if not agenda.reminder_settings or not agenda.reminder_settings.days %}
|
||||
|
@ -56,14 +58,15 @@
|
|||
<a rel="popup" data-selector="#message-preview" href="{% url 'chrono-manager-agenda-reminder-preview' pk=object.id type='sms' %}">{% trans "Preview SMS" %}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-reminder-settings' pk=object.id %}">{% trans "Configure" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block agenda-permissions %}
|
||||
<div class="section">
|
||||
<h3>{% trans "Permissions" %}</h3>
|
||||
<h3>{% trans "Permissions" %}
|
||||
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-roles' pk=object.id %}">{% trans 'Configure' %}</a>
|
||||
</h3>
|
||||
<div>
|
||||
<ul>
|
||||
<li>{% trans "Edit Role:" %} {% if agenda.edit_role %}{{ agenda.edit_role }}{% else %}<i>{% trans "undefined" %}</i>{% endif %}</li>
|
||||
|
@ -75,7 +78,9 @@
|
|||
|
||||
{% block agenda-booking-delays %}
|
||||
<div class="section">
|
||||
<h3>{% trans "Booking Delays" %}</h3>
|
||||
<h3>{% trans "Booking Delays" %}
|
||||
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-booking-delays' pk=object.id %}">{% trans 'Configure' %}</a>
|
||||
</h3>
|
||||
<div>
|
||||
<ul>
|
||||
<li>{% trans "Minimal booking delay:" %}
|
||||
|
|
|
@ -31,7 +31,9 @@
|
|||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h3>{% trans "Notifications" %}</h3>
|
||||
<h3>{% trans "Notifications" %}
|
||||
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-notifications-settings' pk=object.id %}">{% trans 'Configure' %}</a>
|
||||
</h3>
|
||||
<div>
|
||||
<ul>
|
||||
{% for notification_type in object.notifications_settings.get_notification_types %}
|
||||
|
@ -44,7 +46,6 @@
|
|||
{% trans "Notifications are disabled for this agenda." %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<a rel="popup" class="button" href="{% url 'chrono-manager-agenda-notifications-settings' pk=object.id %}">{% trans 'Configure' %}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -105,6 +105,12 @@ urlpatterns = [
|
|||
),
|
||||
url(r'^agendas/(?P<pk>\d+)/settings$', views.agenda_settings, name='chrono-manager-agenda-settings'),
|
||||
url(r'^agendas/(?P<pk>\d+)/edit$', views.agenda_edit, name='chrono-manager-agenda-edit'),
|
||||
url(
|
||||
r'^agendas/(?P<pk>\d+)/booking-delays$',
|
||||
views.agenda_booking_delays,
|
||||
name='chrono-manager-agenda-booking-delays',
|
||||
),
|
||||
url(r'^agendas/(?P<pk>\d+)/roles$', views.agenda_roles, name='chrono-manager-agenda-roles'),
|
||||
url(r'^agendas/(?P<pk>\d+)/delete$', views.agenda_delete, name='chrono-manager-agenda-delete'),
|
||||
url(r'^agendas/(?P<pk>\d+)/export$', views.agenda_export, name='chrono-manager-agenda-export'),
|
||||
url(r'^agendas/(?P<pk>\d+)/add-event$', views.agenda_add_event, name='chrono-manager-agenda-add-event'),
|
||||
|
|
|
@ -72,6 +72,8 @@ from chrono.agendas.models import (
|
|||
from .forms import (
|
||||
AgendaAddForm,
|
||||
AgendaEditForm,
|
||||
AgendaBookingDelaysForm,
|
||||
AgendaRolesForm,
|
||||
NewEventForm,
|
||||
EventForm,
|
||||
NewMeetingTypeForm,
|
||||
|
@ -591,7 +593,7 @@ category_delete = CategoryDeleteView.as_view()
|
|||
|
||||
|
||||
class AgendaAddView(CreateView):
|
||||
template_name = 'chrono/manager_agenda_form.html'
|
||||
template_name = 'chrono/manager_agenda_add_form.html'
|
||||
model = Agenda
|
||||
form_class = AgendaAddForm
|
||||
|
||||
|
@ -724,16 +726,35 @@ class ManagedAgendaMixin(ViewableAgendaMixin):
|
|||
|
||||
class AgendaEditView(ManagedAgendaMixin, UpdateView):
|
||||
template_name = 'chrono/manager_agenda_form.html'
|
||||
title = _('Edit Agenda')
|
||||
model = Agenda
|
||||
form_class = AgendaEditForm
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.object.id})
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['title'] = self.title
|
||||
return context
|
||||
|
||||
|
||||
agenda_edit = AgendaEditView.as_view()
|
||||
|
||||
|
||||
class AgendaBookingDelaysView(AgendaEditView):
|
||||
form_class = AgendaBookingDelaysForm
|
||||
title = _('Configure booking delays')
|
||||
|
||||
|
||||
agenda_booking_delays = AgendaBookingDelaysView.as_view()
|
||||
|
||||
|
||||
class AgendaRolesView(AgendaEditView):
|
||||
form_class = AgendaRolesForm
|
||||
title = _('Configure roles')
|
||||
|
||||
|
||||
agenda_roles = AgendaRolesView.as_view()
|
||||
|
||||
|
||||
class AgendaDeleteView(DeleteView):
|
||||
template_name = 'chrono/manager_confirm_delete.html'
|
||||
model = Agenda
|
||||
|
@ -1522,8 +1543,8 @@ class AgendaNotificationsSettingsView(ManagedAgendaMixin, UpdateView):
|
|||
agenda_notifications_settings = AgendaNotificationsSettingsView.as_view()
|
||||
|
||||
|
||||
class AgendaReminderSettingsView(ManagedAgendaMixin, UpdateView):
|
||||
template_name = 'chrono/manager_agenda_reminder_form.html'
|
||||
class AgendaReminderSettingsView(AgendaEditView):
|
||||
title = _('Reminder Settings')
|
||||
model = AgendaReminderSettings
|
||||
form_class = AgendaReminderForm
|
||||
|
||||
|
|
|
@ -948,7 +948,7 @@ def test_options_agenda_cant_unset_delays(app, admin_user):
|
|||
agenda = Agenda.objects.create(label=u'Foo bar')
|
||||
assert agenda.minimal_booking_delay == 1
|
||||
app = login(app)
|
||||
url = '/manage/agendas/%s/edit' % agenda.pk
|
||||
url = '/manage/agendas/%s/booking-delays' % agenda.pk
|
||||
resp = app.get(url)
|
||||
resp.form['minimal_booking_delay'] = None
|
||||
resp = resp.form.submit()
|
||||
|
@ -960,7 +960,7 @@ def test_options_virtuale_agenda_can_unset_delays(app, admin_user):
|
|||
agenda = Agenda.objects.create(label=u'Foo bar', kind='virtual', maximal_booking_delay=2)
|
||||
assert agenda.maximal_booking_delay == 2
|
||||
app = login(app)
|
||||
url = '/manage/agendas/%s/edit' % agenda.pk
|
||||
url = '/manage/agendas/%s/booking-delays' % agenda.pk
|
||||
resp = app.get(url)
|
||||
resp.form['maximal_booking_delay'] = None
|
||||
resp = resp.form.submit()
|
||||
|
@ -5215,3 +5215,32 @@ def test_export_site(app, admin_user):
|
|||
site_json = json.loads(resp.text)
|
||||
assert 'agendas' not in site_json
|
||||
assert 'unavailability_calendars' in site_json
|
||||
|
||||
|
||||
def test_manager_agenda_roles(app, admin_user, manager_user):
|
||||
agenda = Agenda.objects.create(label='Events', kind='events')
|
||||
|
||||
login(app)
|
||||
resp = app.get('/manage/agendas/%s/settings' % agenda.id)
|
||||
resp = resp.click('Configure', href='roles')
|
||||
|
||||
role = manager_user.groups.all()[0]
|
||||
resp.form['edit_role'] = manager_user.groups.all()[0].pk
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
assert 'Edit Role: Managers' in resp.text
|
||||
|
||||
|
||||
def test_manager_agenda_booking_delays(app, admin_user):
|
||||
agenda = Agenda.objects.create(label='Events', kind='events')
|
||||
|
||||
login(app)
|
||||
resp = app.get('/manage/agendas/%s/settings' % agenda.id)
|
||||
resp = resp.click('Configure', href='delays')
|
||||
|
||||
resp.form['maximal_booking_delay'] = 42
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
assert '42 days' in resp.text
|
||||
agenda.refresh_from_db()
|
||||
assert agenda.maximal_booking_delay == 42
|
||||
|
|
Loading…
Reference in New Issue