1515
1616from ietf .ietfauth .utils import role_required
1717from ietf .utils .mail import send_mail
18+ from ietf .meeting .forms import duration_string
1819from ietf .meeting .helpers import get_meeting , make_materials_directories
1920from ietf .meeting .models import Meeting , Session , Room , TimeSlot , SchedTimeSessAssignment , Schedule
2021from ietf .group .models import Group , GroupEvent
2122from ietf .person .models import Person
2223from ietf .secr .meetings .blue_sheets import create_blue_sheets
2324from ietf .secr .meetings .forms import ( BaseMeetingRoomFormSet , MeetingModelForm , MeetingSelectForm ,
24- MeetingRoomForm , NewSessionForm , NonSessionEditForm , NonSessionForm , TimeSlotForm ,
25+ MeetingRoomForm , NewSessionForm , NonSessionForm , TimeSlotForm ,
2526 UploadBlueSheetForm , get_next_slot )
2627from ietf .secr .proceedings .views import build_choices
2728from ietf .secr .proceedings .utils import handle_upload_file
@@ -459,23 +460,20 @@ def non_session(request, meeting_id, schedule_name):
459460 slots = slots .order_by ('-type__name' ,'time' )
460461
461462 if request .method == 'POST' :
462- form = NonSessionForm (request .POST )
463+ form = NonSessionForm (request .POST , meeting = meeting )
463464 if form .is_valid ():
464- day = form .cleaned_data ['day' ]
465- time = form .cleaned_data ['time' ]
465+ time = get_timeslot_time (form , meeting )
466466 name = form .cleaned_data ['name' ]
467467 short = form .cleaned_data ['short' ]
468468 type = form .cleaned_data ['type' ]
469469 group = form .cleaned_data ['group' ]
470470 duration = form .cleaned_data ['duration' ]
471- t = meeting .date + datetime .timedelta (days = int (day ))
472- new_time = datetime .datetime (t .year ,t .month ,t .day ,time .hour ,time .minute )
473471
474472 # create TimeSlot object
475473 timeslot = TimeSlot .objects .create (type = type ,
476474 meeting = meeting ,
477475 name = name ,
478- time = new_time ,
476+ time = time ,
479477 duration = duration ,
480478 show_location = form .cleaned_data ['show_location' ])
481479
@@ -501,7 +499,7 @@ def non_session(request, meeting_id, schedule_name):
501499 messages .success (request , 'Non-Sessions updated successfully' )
502500 return redirect ('ietf.secr.meetings.views.non_session' , meeting_id = meeting_id , schedule_name = schedule_name )
503501 else :
504- form = NonSessionForm (initial = {'show_location' :True })
502+ form = NonSessionForm (initial = {'show_location' :True }, meeting = meeting )
505503
506504 if TimeSlot .objects .filter (meeting = meeting ,type = 'other' ,location__isnull = True ):
507505 messages .warning (request , 'There are non-session items which do not have a room assigned' )
@@ -552,14 +550,22 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
552550 if button_text == 'Cancel' :
553551 return redirect ('ietf.secr.meetings.views.non_session' , meeting_id = meeting_id , schedule_name = schedule_name )
554552
555- form = NonSessionEditForm (request .POST ,meeting = meeting , session = session )
553+ form = NonSessionForm (request .POST ,meeting = meeting ,session = session )
556554 if form .is_valid ():
557555 location = form .cleaned_data ['location' ]
558556 group = form .cleaned_data ['group' ]
559557 name = form .cleaned_data ['name' ]
560558 short = form .cleaned_data ['short' ]
559+ duration = form .cleaned_data ['duration' ]
560+ slot_type = form .cleaned_data ['type' ]
561+ show_location = form .cleaned_data ['show_location' ]
562+ time = get_timeslot_time (form , meeting )
561563 slot .location = location
562564 slot .name = name
565+ slot .time = time
566+ slot .duration = duration
567+ slot .type = slot_type
568+ slot .show_location = show_location
563569 slot .save ()
564570 # save group to session object
565571 session .group = group
@@ -573,11 +579,17 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
573579 else :
574580 # we need to pass the session to the form in order to disallow changing
575581 # of group after materials have been uploaded
582+ delta = slot .time .date () - meeting .date
576583 initial = {'location' :slot .location ,
577584 'group' :session .group ,
578585 'name' :session .name ,
579- 'short' :session .short }
580- form = NonSessionEditForm (meeting = meeting ,session = session ,initial = initial )
586+ 'short' :session .short ,
587+ 'day' :delta .days ,
588+ 'time' :slot .time .strftime ('%H:%M' ),
589+ 'duration' :duration_string (slot .duration ),
590+ 'show_location' :slot .show_location ,
591+ 'type' :slot .type }
592+ form = NonSessionForm (initial = initial , meeting = meeting , session = session )
581593
582594 return render (request , 'meetings/non_session_edit.html' , {
583595 'meeting' : meeting ,
@@ -889,25 +901,21 @@ def times(request, meeting_id, schedule_name):
889901 if request .method == 'POST' :
890902 form = TimeSlotForm (request .POST )
891903 if form .is_valid ():
892- day = form .cleaned_data ['day' ]
893- time = form .cleaned_data ['time' ]
904+ time = get_timeslot_time (form , meeting )
894905 duration = form .cleaned_data ['duration' ]
895906 name = form .cleaned_data ['name' ]
896907
897- t = meeting .date + datetime .timedelta (days = int (day ))
898- new_time = datetime .datetime (t .year ,t .month ,t .day ,time .hour ,time .minute )
899-
900908 # don't allow creation of timeslots with same start time as existing timeslots
901909 # assert False, (new_time, time_seen)
902- if new_time in time_seen :
903- messages .error (request , 'There is already a timeslot for %s. To change you must delete the old one first.' % new_time .strftime ('%a %H:%M' ))
910+ if time in time_seen :
911+ messages .error (request , 'There is already a timeslot for %s. To change you must delete the old one first.' % time .strftime ('%a %H:%M' ))
904912 return redirect ('ietf.secr.meetings.views.times' , meeting_id = meeting_id ,schedule_name = schedule_name )
905913
906914 for room in meeting .room_set .all ():
907915 TimeSlot .objects .create (type_id = 'session' ,
908916 meeting = meeting ,
909917 name = name ,
910- time = new_time ,
918+ time = time ,
911919 location = room ,
912920 duration = duration )
913921
@@ -924,6 +932,14 @@ def times(request, meeting_id, schedule_name):
924932 'times' : times },
925933 )
926934
935+ def get_timeslot_time (form , meeting ):
936+ '''Returns datetime calculated from day and time form fields'''
937+ time = form .cleaned_data ['time' ]
938+ day = form .cleaned_data ['day' ]
939+
940+ date = meeting .date + datetime .timedelta (days = int (day ))
941+ return datetime .datetime (date .year ,date .month ,date .day ,time .hour ,time .minute )
942+
927943@role_required ('Secretariat' )
928944def times_edit (request , meeting_id , schedule_name , time ):
929945 '''
@@ -944,15 +960,12 @@ def times_edit(request, meeting_id, schedule_name, time):
944960 form = TimeSlotForm (request .POST )
945961 if form .is_valid ():
946962 day = form .cleaned_data ['day' ]
947- time = form . cleaned_data [ 'time' ]
963+ time = get_timeslot_time ( form , meeting )
948964 duration = form .cleaned_data ['duration' ]
949965 name = form .cleaned_data ['name' ]
950966
951- t = meeting .date + datetime .timedelta (days = int (day ))
952- new_time = datetime .datetime (t .year ,t .month ,t .day ,time .hour ,time .minute )
953-
954967 for timeslot in timeslots :
955- timeslot .time = new_time
968+ timeslot .time = time
956969 timeslot .duration = duration
957970 timeslot .name = name
958971 timeslot .save ()
0 commit comments