Add support for variable length meetings to secr/meetings app. Commit ready for merge
- Legacy-Id: 17590
This commit is contained in:
parent
a99c37cd47
commit
3f6081a5b9
|
@ -1,4 +1,5 @@
|
|||
# Copyright The IETF Trust 2013-2019, All Rights Reserved
|
||||
import datetime
|
||||
import re
|
||||
|
||||
from django import forms
|
||||
|
@ -10,13 +11,6 @@ from ietf.meeting.models import Meeting, Room, TimeSlot, Session, SchedTimeSessA
|
|||
from ietf.name.models import TimeSlotTypeName
|
||||
import ietf.utils.fields
|
||||
|
||||
DAYS_CHOICES = ((0,'Saturday'),
|
||||
(1,'Sunday'),
|
||||
(2,'Monday'),
|
||||
(3,'Tuesday'),
|
||||
(4,'Wednesday'),
|
||||
(5,'Thursday'),
|
||||
(6,'Friday'))
|
||||
|
||||
# using Django week_day lookup values (Sunday=1)
|
||||
SESSION_DAYS = ((2,'Monday'),
|
||||
|
@ -131,15 +125,18 @@ class MeetingRoomForm(forms.ModelForm):
|
|||
exclude = ['resources']
|
||||
|
||||
class TimeSlotForm(forms.Form):
|
||||
day = forms.ChoiceField(choices=DAYS_CHOICES)
|
||||
day = forms.ChoiceField()
|
||||
time = forms.TimeField()
|
||||
duration = ietf.utils.fields.DurationField()
|
||||
name = forms.CharField(help_text='Name that appears on the agenda')
|
||||
|
||||
def __init__(self,*args,**kwargs):
|
||||
if 'meeting' in kwargs:
|
||||
self.meeting = kwargs.pop('meeting')
|
||||
super(TimeSlotForm, self).__init__(*args,**kwargs)
|
||||
self.fields["time"].widget.attrs["placeholder"] = "HH:MM"
|
||||
self.fields["duration"].widget.attrs["placeholder"] = "HH:MM"
|
||||
self.fields["day"].choices = self.get_day_choices()
|
||||
|
||||
def clean_duration(self):
|
||||
'''Limit to HH:MM format'''
|
||||
|
@ -148,6 +145,16 @@ class TimeSlotForm(forms.Form):
|
|||
raise forms.ValidationError('{} value has an invalid format. It must be in HH:MM format'.format(duration))
|
||||
return self.cleaned_data['duration']
|
||||
|
||||
def get_day_choices(self):
|
||||
'''Get day choices for form based on meeting duration'''
|
||||
choices = []
|
||||
start = self.meeting.date
|
||||
for n in range(self.meeting.days):
|
||||
date = start + datetime.timedelta(days=n)
|
||||
choices.append((n, date.strftime("%a %b %d")))
|
||||
return choices
|
||||
|
||||
|
||||
class MiscSessionForm(TimeSlotForm):
|
||||
short = forms.CharField(max_length=32,label='Short Name',help_text='Enter an abbreviated session name (used for material file names)',required=False)
|
||||
type = forms.ModelChoiceField(queryset=TimeSlotTypeName.objects.filter(used=True).exclude(slug__in=('regular',)),empty_label=None)
|
||||
|
|
|
@ -740,7 +740,7 @@ def times(request, meeting_id, schedule_name):
|
|||
times = sorted(slots, key=lambda a: a['time'])
|
||||
|
||||
if request.method == 'POST':
|
||||
form = TimeSlotForm(request.POST)
|
||||
form = TimeSlotForm(request.POST, meeting=meeting)
|
||||
if form.is_valid():
|
||||
time = get_timeslot_time(form, meeting)
|
||||
duration = form.cleaned_data['duration']
|
||||
|
@ -764,7 +764,7 @@ def times(request, meeting_id, schedule_name):
|
|||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
form = TimeSlotForm()
|
||||
form = TimeSlotForm(meeting=meeting)
|
||||
|
||||
return render(request, 'meetings/times.html', {
|
||||
'form': form,
|
||||
|
@ -799,7 +799,7 @@ def times_edit(request, meeting_id, schedule_name, time):
|
|||
if button_text == 'Cancel':
|
||||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
form = TimeSlotForm(request.POST)
|
||||
form = TimeSlotForm(request.POST, meeting=meeting)
|
||||
if form.is_valid():
|
||||
day = form.cleaned_data['day']
|
||||
time = get_timeslot_time(form, meeting)
|
||||
|
@ -825,7 +825,7 @@ def times_edit(request, meeting_id, schedule_name, time):
|
|||
'time':dtime.strftime('%H:%M'),
|
||||
'duration':timeslots.first().duration,
|
||||
'name':timeslots.first().name}
|
||||
form = TimeSlotForm(initial=initial)
|
||||
form = TimeSlotForm(initial=initial, meeting=meeting)
|
||||
|
||||
return render(request, 'meetings/times_edit.html', {
|
||||
'meeting': meeting,
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<tbody>
|
||||
{% for item in times %}
|
||||
<tr class="{% cycle 'row1' 'row2' %}">
|
||||
<td>{{ item.time|date:"D" }}</td>
|
||||
<td>{{ item.time|date:"D M d" }}</td>
|
||||
<td>{{ item.time|date:"H:i" }} - {{ item.end_time|date:"H:i" }}</td>
|
||||
<td>{{ item.name }}</td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.times_edit" meeting_id=meeting.number schedule_name=schedule.name time=item.time|date:"Y:m:d:H:i" %}">Edit</a></td>
|
||||
|
|
Loading…
Reference in a new issue