From bc9575a9b3e2172cb73b05998fd35d6d3497ea56 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Fri, 1 Mar 2019 17:04:15 +0100 Subject: [PATCH] UPD: improved Event Update Form. --- dav_base/static/dav_base/css/local.css | 46 +- dav_base/templates/dav_base/base.html | 12 +- dav_events/forms/events.py | 57 +++ dav_events/models/event.py | 3 - .../dav_events/event_create/LocationForm.html | 1 - .../dav_events/event_update_form.html | 481 +++++++++++++++++- dav_events/views/events.py | 18 + 7 files changed, 598 insertions(+), 20 deletions(-) diff --git a/dav_base/static/dav_base/css/local.css b/dav_base/static/dav_base/css/local.css index f93b5c8..30db908 100644 --- a/dav_base/static/dav_base/css/local.css +++ b/dav_base/static/dav_base/css/local.css @@ -1,3 +1,6 @@ +/* + * General elements + */ html, body { height: 100%; } @@ -7,6 +10,13 @@ thead input { padding: 3px; } +/* + * Specific areas + */ + +/* + * Whole Page + */ #page { position: relative; min-height: 100%; @@ -14,6 +24,9 @@ thead input { height: 100%; } +/* + * Page Header + */ #page-header { /* position: relative; */ padding-top: 0.6rem; @@ -48,26 +61,29 @@ thead input { float: right; } +/* + * Messages + */ #messages div.alert { margin-top: 1.2rem; margin-bottom: 0rem; } +/* + * Page Body + */ #page-body { - padding-top: 2.4rem; padding-bottom: 4.8rem; } -#page-body h3 { - margin-top: -1rem; - margin-bottom: 1.5rem; -} - #page-body h5 { margin-top: 0px; font-weight: bold; } +/* + * Page footer + */ #page-footer { position: absolute; bottom: 0px; @@ -95,6 +111,24 @@ thead input { color: #e3e3e3; } +/* + * Misc + */ +.container > .jumbotron, +.container-fluid > .jumbotron { + margin-top: 2.4rem; +} + .action-tabs { + margin-top: 2.4rem; margin-bottom: 1.2rem; } + +.panel-heading h3, .panel-heading h4 { + font-wight: inherit; + line-height: inherit; +} + +.panel-group .panel-footer { + border-top: 1px solid #ddd; +} \ No newline at end of file diff --git a/dav_base/templates/dav_base/base.html b/dav_base/templates/dav_base/base.html index 6d1e909..058cc21 100644 --- a/dav_base/templates/dav_base/base.html +++ b/dav_base/templates/dav_base/base.html @@ -21,8 +21,7 @@ {{ form.media }} {% endblock head-media %} - {% block head-additional %} - {% endblock head-additional %} + {% block head-additional %}{% endblock %} {% block head-title %}Alpenverein Karlsruhe{% endblock head-title %} @@ -48,16 +47,13 @@ </div> <div id="page-body"> - {% block modals %} - {% endblock modals %} + {% block modals %}{% endblock %} {% block page-body %} <div class="container-fluid"> - {% block page-container-fluid %} - {% endblock page-container-fluid %} + {% block page-container-fluid %}{% endblock %} </div> <div class="container"> - {% block page-container %} - {% endblock page-container %} + {% block page-container %}{% endblock %} </div> {% endblock page-body %} </div> diff --git a/dav_events/forms/events.py b/dav_events/forms/events.py index 44d50cd..06d0553 100644 --- a/dav_events/forms/events.py +++ b/dav_events/forms/events.py @@ -86,6 +86,63 @@ class EventListExportForm(forms.Form): class EventUpdateForm(forms.ModelForm): + requirements = forms.CharField(required=False, + label=_(u'Anforderungen / Voraussetzungen'), + widget=forms.Textarea(attrs={'rows': 2})) + + equipment = forms.CharField(required=False, + label=_(u'Ausrüstung'), + widget=forms.Textarea(attrs={'rows': 2})) + + registration_howto = forms.CharField(required=False, + label=_(u'Anmeldungshinweis'), + widget=forms.Textarea(attrs={'rows': 2})) + + course_topic_1 = forms.CharField(required=False, + label=u'%s - %s 1' % (_(u'Kursinhalt'), _(u'Absatz')), + widget=forms.Textarea(attrs={'rows': 2})) + course_topic_2 = forms.CharField(required=False, + label=u'%s - %s 2' % (_(u'Kursinhalt'), _(u'Zeile')), + widget=forms.TextInput()) + course_topic_3 = forms.CharField(required=False, + label=u'%s - %s 3' % (_(u'Kursinhalt'), _(u'Zeile')), + widget=forms.TextInput()) + course_topic_4 = forms.CharField(required=False, + label=u'%s - %s 4' % (_(u'Kursinhalt'), _(u'Zeile')), + widget=forms.TextInput()) + course_topic_5 = forms.CharField(required=False, + label=u'%s - %s 5' % (_(u'Kursinhalt'), _(u'Zeile')), + widget=forms.TextInput()) + course_topic_6 = forms.CharField(required=False, + label=u'%s - %s 6' % (_(u'Kursinhalt'), _(u'Zeile')), + widget=forms.TextInput()) + + course_goal_1 = forms.CharField(required=False, + label=u'%s - %s 1' % (_(u'Kursziel'), _(u'Absatz')), + widget=forms.Textarea(attrs={'rows': 2})) + course_goal_2 = forms.CharField(required=False, + label=u'%s - %s 2' % (_(u'Kursziel'), _(u'Zeile')), + widget=forms.TextInput()) + course_goal_3 = forms.CharField(required=False, + label=u'%s - %s 3' % (_(u'Kursziel'), _(u'Zeile')), + widget=forms.TextInput()) + course_goal_4 = forms.CharField(required=False, + label=u'%s - %s 4' % (_(u'Kursziel'), _(u'Zeile')), + widget=forms.TextInput()) + course_goal_5 = forms.CharField(required=False, + label=u'%s - %s 5' % (_(u'Kursziel'), _(u'Zeile')), + widget=forms.TextInput()) + course_goal_6 = forms.CharField(required=False, + label=u'%s - %s 6' % (_(u'Kursziel'), _(u'Zeile')), + widget=forms.TextInput()) + + description = forms.CharField(label=_(u'Beschreibung'), + widget=forms.Textarea(attrs={'rows': 5})) + + internal_note = forms.CharField(required=False, + label=_(u'Bearbeitungshinweis'), + widget=forms.Textarea(attrs={'rows': 5})) + class Meta: model = models.Event fields = '__all__' diff --git a/dav_events/models/event.py b/dav_events/models/event.py index 89112f0..dc44722 100644 --- a/dav_events/models/event.py +++ b/dav_events/models/event.py @@ -20,9 +20,6 @@ from .. import signals from ..utils import get_ghost_user from ..workflow import DefaultWorkflow -from .eventflag import EventFlag -from .eventstatus import EventStatus, get_or_create_event_status - logger = logging.getLogger(__name__) diff --git a/dav_events/templates/dav_events/event_create/LocationForm.html b/dav_events/templates/dav_events/event_create/LocationForm.html index e0798d3..76d6f56 100644 --- a/dav_events/templates/dav_events/event_create/LocationForm.html +++ b/dav_events/templates/dav_events/event_create/LocationForm.html @@ -14,7 +14,6 @@ {% bootstrap_field form.location %} </div> </div> -<div class="row"> </div> <div class="row"> <div class="col-sm-12"> <h3>An- und Abreise - Teil 1</h3> diff --git a/dav_events/templates/dav_events/event_update_form.html b/dav_events/templates/dav_events/event_update_form.html index fc0a34f..064a847 100644 --- a/dav_events/templates/dav_events/event_update_form.html +++ b/dav_events/templates/dav_events/event_update_form.html @@ -4,6 +4,35 @@ {% block head-title %}{{ event }} - {{ block.super }}{% endblock head-title %} +{% block head-additional %} +<script type="text/javascript"> + function nextAccordionPanel(event) { + var sender = $(event.srcElement); + var current_panel = sender.closest(".panel"); + var next_panel = current_panel.next(); + var current_collapse = sender.closest(".panel-collapse"); + var next_collapse = next_panel.find(".panel-collapse"); + current_collapse.collapse("hide"); + next_collapse.collapse("show"); + $('html, body').animate({ + scrollTop: current_collapse.offset().top + },'slow'); + } + function previousAccordionPanel(event) { + var sender = $(event.srcElement); + var current_panel = sender.closest(".panel"); + var previous_panel = current_panel.prev(); + var current_collapse = sender.closest(".panel-collapse"); + var previous_collapse = previous_panel.find(".panel-collapse"); + current_collapse.collapse("hide"); + previous_collapse.collapse("show"); + $('html, body').animate({ + scrollTop: previous_panel.offset().top + },'slow'); + } +</script> +{% endblock head-additional %} + {% block page-container-fluid %} <div class="action-tabs"> <ul class="nav nav-tabs" role="tablist"> @@ -40,10 +69,458 @@ </div> {% endif %} + {% if form.errors %} + <div class="alert alert-danger"> + Bitte überprüfe deine Eingaben! + {{ form.non_field_errors }} + <ul> + {% for field in form %} + {% if field.errors %} + <li> + {{ field.label }}: + {{ field.errors }} + </li> + {% endif %} + {% endfor %} + </ul> + </div> + {% endif %} + <div class="panel panel-default"> - <div class="panel-heading"><h4 class="panel-title">{{ event }}</h4></div> + <div class="panel-heading"><h3 class="panel-title">{{ event }}</h3></div> <div class="panel-body"> - {% bootstrap_form form layout='horizontal' %} + <div class="panel-group" id="form-accordion" role="tablist" aria-multiselectable="true"> + <div class="panel panel-default"> + <div id="headingModusForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseModusForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseModusForm"> + Veranstaltungsmodus / Termin + </a> + </h4> + </div> + <div id="collapseModusForm" class="panel-collapse collapse{% if decollapseModusForm or decollapseAllForms or decollapseFirstForm %} in{% endif %}" + role="tabpanel" aria-labelledby="headingModusForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-4"> + {% bootstrap_field form.mode %} + </div> + <div class="col-sm-4"> + {% bootstrap_field form.sport %} + </div> + <div class="col-sm-4"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.level %} + </div> + <div class="col-sm-12"> + {% bootstrap_field form.ski_lift %} + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.first_day %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.last_day %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.alt_first_day %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.alt_last_day %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingLocationForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseLocationForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseLocationForm"> + Ort + </a> + </h4> + </div> + <div id="collapseLocationForm" class="panel-collapse collapse{% if decollapseLocationForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingLocationForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.country %} + {% bootstrap_field form.terrain %} + {% bootstrap_field form.location %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingJourneyForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseJourneyForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseJourneyForm"> + An- und Abreise + </a> + </h4> + </div> + <div id="collapseJourneyForm" class="panel-collapse collapse{% if decollapseJourneyForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingJourneyForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.transport %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.transport_other %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.meeting_point %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.meeting_point_other %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.meeting_time %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.departure_time %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.departure_ride %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.return_departure_time %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.return_arrival_time %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.arrival_previous_day %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingAccommodationForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseAccommodationForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseAccommodationForm"> + Unterkunft + </a> + </h4> + </div> + <div id="collapseAccommodationForm" class="panel-collapse collapse{% if decollapseAccommodationForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingAccommodationForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.basecamp %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.accommodation %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.accommodation_other %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.meals %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.meals_other %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingRequirementsForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseRequirementsForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseRequirementsForm"> + Voraussetzungen / Vorbedingungen + </a> + </h4> + </div> + <div id="collapseRequirementsForm" class="panel-collapse collapse{% if decollapseRequirementsForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingRequirementsForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.requirements %} + {% bootstrap_field form.equipment %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.pre_meeting_1 %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.pre_meeting_2 %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingTrainerForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseTrainerForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseTrainerForm"> + Tourenleitung + </a> + </h4> + </div> + <div id="collapseTrainerForm" class="panel-collapse collapse{% if decollapseTrainerForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingTrainerForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.trainer_firstname %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.trainer_familyname %} + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.trainer_email %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.trainer_phone %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.trainer_2_fullname %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.trainer_3_fullname %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingRegistrationForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseRegistrationForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseRegistrationForm"> + Teilnehmer / Anmeldung + </a> + </h4> + </div> + <div id="collapseRegistrationForm" class="panel-collapse collapse{% if decollapseRegistrationForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingRegistrationForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + <label>{% trans 'Teilnehmerzahl' %}</label> (0 = {% trans 'unreglementiert' %}) + <div class="row"> + <div class="col-sm-6"> + {% bootstrap_field form.min_participants %} + </div> + <div class="col-sm-6"> + {% bootstrap_field form.max_participants %} + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-3"> + <label>{% trans 'Anmeldung' %}</label> + {% bootstrap_field form.registration_required %} + </div> + <div class="col-sm-9"> + <div class="row registration_settings"> + <div class="col-sm-12"> + {% bootstrap_field form.deadline %} + </div> + </div> + </div> + </div> + <div class="row registration_settings"> + <div class="col-sm-12"> + {% bootstrap_field form.registration_howto %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingChargesForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseChargesForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseChargesForm"> + Kosten + </a> + </h4> + </div> + <div id="collapseChargesForm" class="panel-collapse collapse{% if decollapseChargesForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingChargesForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.charge %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.additional_costs %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingTrainingForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseTrainingForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseTrainingForm"> + Kursinhalte / Kursziele + </a> + </h4> + </div> + <div id="collapseTrainingForm" class="panel-collapse collapse{% if decollapseTrainingForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingTrainingForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.course_topic_1 %} + {% bootstrap_field form.course_topic_2 %} + {% bootstrap_field form.course_topic_3 %} + {% bootstrap_field form.course_topic_4 %} + {% bootstrap_field form.course_topic_5 %} + {% bootstrap_field form.course_topic_6 %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.course_goal_1 %} + {% bootstrap_field form.course_goal_2 %} + {% bootstrap_field form.course_goal_3 %} + {% bootstrap_field form.course_goal_4 %} + {% bootstrap_field form.course_goal_5 %} + {% bootstrap_field form.course_goal_6 %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingDescriptionForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseDescriptionForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseDescriptionForm"> + Titel / Beschreibung + </a> + </h4> + </div> + <div id="collapseDescriptionForm" class="panel-collapse collapse{% if decollapseDescriptionForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingDescriptionForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.title %} + {% bootstrap_field form.description %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="nextAccordionPanel(event)">{% trans 'Nächster Abschnitt' %} {% bootstrap_icon 'arrow-down' %}</a> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + <div class="panel panel-default"> + <div id="headingWorkflowForm" class="panel-heading" role="tab"> + <h4 class="panel-title"> + <a role="button" href="#collapseWorkflowForm" data-toggle="collapse" data-parent="#accordion" + aria-expanded="true" aria-controls="collapseWorkflowForm"> + Bearbeitungshinweis / Workflow + </a> + </h4> + </div> + <div id="collapseWorkflowForm" class="panel-collapse collapse{% if decollapseWorkflowForm or decollapseAllForms %} in{% endif %}" + role="tabpanel" aria-labelledby="headingWorkflowForm"> + <div class="panel-body"> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.internal_note %} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {% bootstrap_field form.planned_publication_date %} + {% bootstrap_field form.number %} + {% bootstrap_field form.owner %} + </div> + </div> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" onclick="previousAccordionPanel(event)">{% trans 'Vorheriger Abschnitt' %} {% bootstrap_icon 'arrow-up' %}</a> + </div> + </div> + </div> + </div> </div> <div class="panel-footer"> <button type="submit" class="btn btn-success"> diff --git a/dav_events/views/events.py b/dav_events/views/events.py index d98d64a..bec3289 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -211,6 +211,18 @@ class EventUpdateView(EventPermissionMixin, generic.UpdateView): self.enforce_permission(obj) return obj + def get_form(self, form_class=None): + form = super(EventUpdateView, self).get_form(form_class) + if not self.has_permission('accept', self.object): + form.fields['registration_howto'].disabled = True + form.fields['planned_publication_date'].disabled = True + form.fields['planned_publication_date'].widget = forms.generic.forms.HiddenInput() + form.fields['number'].disabled = True + form.fields['number'].widget = forms.generic.forms.HiddenInput() + form.fields['owner'].disabled = True + form.fields['owner'].widget = forms.generic.forms.HiddenInput() + return form + def get_context_data(self, **kwargs): context = super(EventUpdateView, self).get_context_data(**kwargs) obj = context.get('event') @@ -221,6 +233,12 @@ class EventUpdateView(EventPermissionMixin, generic.UpdateView): context['is_publishing'] = obj.workflow.has_reached_status('publishing') context['is_publishing_any'] = obj.workflow.has_reached_status('publishing*') context['is_accepted'] = obj.workflow.has_reached_status('accepted') + + if 'form' in kwargs and kwargs['form'].errors: + context['decollapseAllForms'] = True + else: + context['decollapseFirstForm'] = True + return context def form_valid(self, form):