Skip to content

Commit c908d26

Browse files
committed
Merged in [17590] from rcross@amsl.com:
Add support for variable length meetings to secr/meetings app. - Legacy-Id: 17597 Note: SVN reference [17590] has been migrated to Git commit 3f6081a
2 parents 9b8d9c8 + 3f6081a commit c908d26

3 files changed

Lines changed: 20 additions & 13 deletions

File tree

ietf/secr/meetings/forms.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Copyright The IETF Trust 2013-2019, All Rights Reserved
2+
import datetime
23
import re
34

45
from django import forms
@@ -10,13 +11,6 @@
1011
from ietf.name.models import TimeSlotTypeName
1112
import ietf.utils.fields
1213

13-
DAYS_CHOICES = ((0,'Saturday'),
14-
(1,'Sunday'),
15-
(2,'Monday'),
16-
(3,'Tuesday'),
17-
(4,'Wednesday'),
18-
(5,'Thursday'),
19-
(6,'Friday'))
2014

2115
# using Django week_day lookup values (Sunday=1)
2216
SESSION_DAYS = ((2,'Monday'),
@@ -131,15 +125,18 @@ class Meta:
131125
exclude = ['resources']
132126

133127
class TimeSlotForm(forms.Form):
134-
day = forms.ChoiceField(choices=DAYS_CHOICES)
128+
day = forms.ChoiceField()
135129
time = forms.TimeField()
136130
duration = ietf.utils.fields.DurationField()
137131
name = forms.CharField(help_text='Name that appears on the agenda')
138132

139133
def __init__(self,*args,**kwargs):
134+
if 'meeting' in kwargs:
135+
self.meeting = kwargs.pop('meeting')
140136
super(TimeSlotForm, self).__init__(*args,**kwargs)
141137
self.fields["time"].widget.attrs["placeholder"] = "HH:MM"
142138
self.fields["duration"].widget.attrs["placeholder"] = "HH:MM"
139+
self.fields["day"].choices = self.get_day_choices()
143140

144141
def clean_duration(self):
145142
'''Limit to HH:MM format'''
@@ -148,6 +145,16 @@ def clean_duration(self):
148145
raise forms.ValidationError('{} value has an invalid format. It must be in HH:MM format'.format(duration))
149146
return self.cleaned_data['duration']
150147

148+
def get_day_choices(self):
149+
'''Get day choices for form based on meeting duration'''
150+
choices = []
151+
start = self.meeting.date
152+
for n in range(self.meeting.days):
153+
date = start + datetime.timedelta(days=n)
154+
choices.append((n, date.strftime("%a %b %d")))
155+
return choices
156+
157+
151158
class MiscSessionForm(TimeSlotForm):
152159
short = forms.CharField(max_length=32,label='Short Name',help_text='Enter an abbreviated session name (used for material file names)',required=False)
153160
type = forms.ModelChoiceField(queryset=TimeSlotTypeName.objects.filter(used=True).exclude(slug__in=('regular',)),empty_label=None)

ietf/secr/meetings/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ def times(request, meeting_id, schedule_name):
740740
times = sorted(slots, key=lambda a: a['time'])
741741

742742
if request.method == 'POST':
743-
form = TimeSlotForm(request.POST)
743+
form = TimeSlotForm(request.POST, meeting=meeting)
744744
if form.is_valid():
745745
time = get_timeslot_time(form, meeting)
746746
duration = form.cleaned_data['duration']
@@ -764,7 +764,7 @@ def times(request, meeting_id, schedule_name):
764764
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
765765

766766
else:
767-
form = TimeSlotForm()
767+
form = TimeSlotForm(meeting=meeting)
768768

769769
return render(request, 'meetings/times.html', {
770770
'form': form,
@@ -799,7 +799,7 @@ def times_edit(request, meeting_id, schedule_name, time):
799799
if button_text == 'Cancel':
800800
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
801801

802-
form = TimeSlotForm(request.POST)
802+
form = TimeSlotForm(request.POST, meeting=meeting)
803803
if form.is_valid():
804804
day = form.cleaned_data['day']
805805
time = get_timeslot_time(form, meeting)
@@ -825,7 +825,7 @@ def times_edit(request, meeting_id, schedule_name, time):
825825
'time':dtime.strftime('%H:%M'),
826826
'duration':timeslots.first().duration,
827827
'name':timeslots.first().name}
828-
form = TimeSlotForm(initial=initial)
828+
form = TimeSlotForm(initial=initial, meeting=meeting)
829829

830830
return render(request, 'meetings/times_edit.html', {
831831
'meeting': meeting,

ietf/secr/templates/meetings/times.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ <h2>Times</h2>
1919
<tbody>
2020
{% for item in times %}
2121
<tr class="{% cycle 'row1' 'row2' %}">
22-
<td>{{ item.time|date:"D" }}</td>
22+
<td>{{ item.time|date:"D M d" }}</td>
2323
<td>{{ item.time|date:"H:i" }} - {{ item.end_time|date:"H:i" }}</td>
2424
<td>{{ item.name }}</td>
2525
<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>

0 commit comments

Comments
 (0)