diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index 296856f0..ccd8eb37 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -28,7 +28,7 @@ from django.utils.timezone import make_aware from django.utils.translation import ugettext_lazy as _ from chrono.agendas.models import (Agenda, Event, MeetingType, TimePeriod, Desk, - TimePeriodException) + TimePeriodException, WEEKDAYS_LIST) from . import widgets @@ -91,6 +91,15 @@ class MeetingTypeForm(forms.ModelForm): exclude = [] +class TimePeriodAddForm(forms.Form): + weekdays = forms.MultipleChoiceField( + label=_('Days'), + widget=widgets.WeekdaysWidget(), + choices=WEEKDAYS_LIST) + start_time = forms.TimeField(label=_('Start Time'), widget=widgets.TimeWidget()) + end_time = forms.TimeField(label=_('End Time'), widget=widgets.TimeWidget()) + + class TimePeriodForm(forms.ModelForm): class Meta: model = TimePeriod diff --git a/chrono/manager/static/css/style.scss b/chrono/manager/static/css/style.scss index 9281d2b9..a6b8aeef 100644 --- a/chrono/manager/static/css/style.scss +++ b/chrono/manager/static/css/style.scss @@ -246,3 +246,16 @@ span.start-time { top: 3ex; z-index: 100; } + +ul#id_weekdays { + margin: 0; + padding: 0; + list-style: none; + max-width: 42em; + li { + margin: 0; + padding: 0; + display: inline-block; + width: 10em; + } +} diff --git a/chrono/manager/views.py b/chrono/manager/views.py index 06d6d20f..b9adf744 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -37,7 +37,7 @@ from chrono.agendas.models import (Agenda, Event, MeetingType, TimePeriod, from .forms import (AgendaAddForm, AgendaEditForm, EventForm, NewMeetingTypeForm, MeetingTypeForm, TimePeriodForm, ImportEventsForm, NewDeskForm, DeskForm, TimePeriodExceptionForm, - ExceptionsImportForm, AgendasImportForm) + ExceptionsImportForm, AgendasImportForm, TimePeriodAddForm) from .utils import import_site @@ -621,10 +621,19 @@ class MeetingTypeDeleteView(ManagedAgendaSubobjectMixin, DeleteView): meeting_type_delete = MeetingTypeDeleteView.as_view() -class AgendaAddTimePeriodView(ManagedDeskMixin, CreateView): +class AgendaAddTimePeriodView(ManagedDeskMixin, FormView): template_name = 'chrono/manager_time_period_form.html' - model = TimePeriod - form_class = TimePeriodForm + form_class = TimePeriodAddForm + + def form_valid(self, form): + for weekday in form.cleaned_data.get('weekdays'): + period = TimePeriod( + weekday=weekday, + start_time=form.cleaned_data['start_time'], + end_time=form.cleaned_data['end_time'], + desk=self.desk) + period.save() + return super(AgendaAddTimePeriodView, self).form_valid(form) agenda_add_time_period = AgendaAddTimePeriodView.as_view() diff --git a/chrono/manager/widgets.py b/chrono/manager/widgets.py index dc541dd3..58d13772 100644 --- a/chrono/manager/widgets.py +++ b/chrono/manager/widgets.py @@ -11,7 +11,7 @@ import json import re import uuid -from django.forms.widgets import DateTimeInput, DateInput, TimeInput +from django.forms.widgets import DateTimeInput, DateInput, TimeInput, SelectMultiple from django.utils.formats import get_language from django.utils.safestring import mark_safe @@ -173,3 +173,25 @@ class TimeWidget(PickerWidgetMixin, TimeInput): options['format'] = options.get('format', 'hh:ii') super(TimeWidget, self).__init__(attrs, options, usel10n) + + +class WeekdaysWidget(SelectMultiple): + def render(self, name, value, attrs=None, choices=()): + s = [] + value = value or [] + for choice_id, choice_label in self.choices: + s.append('
' % { + 'name': name, + 'checked': 'checked' if choice_id in value else '', + 'choice_id': choice_id, + 'choice_label': choice_label}) + return mark_safe('