@@ -183,16 +183,7 @@ def __init__(self, *args, **kwargs):
183183 super (MaterialVersionForm ,self ).__init__ (* args ,** kwargs )
184184 self .fields ['version' ].choices = choices
185185
186- @login_required
187- def material_presentations (request , name , acronym = None , date = None , seq = None , week_day = None ):
188-
189- doc = get_object_or_404 (Document , name = name )
190- if not (doc .type_id == 'slides' and doc .get_state ('slides' ).slug == 'active' ):
191- raise Http404
192-
193- group = doc .group
194- if not (group .features .has_materials and can_manage_materials (request .user ,group )):
195- raise Http404
186+ def get_upcoming_manageable_sessions (user , doc , acronym = None , date = None , seq = None , week_day = None ):
196187
197188 # Find all the sessions for meetings that haven't ended that the user could affect
198189 # This motif is also in Document.future_presentations - it would be nice to consolodate it somehow
@@ -219,7 +210,7 @@ def material_presentations(request, name, acronym=None, date=None, seq=None, wee
219210 raise Http404
220211 refined_candidates = [ sess for sess in refined_candidates if sess .scheduledsession_set .filter (schedule = sess .meeting .agenda ,timeslot__time__week_day = dow ) ]
221212
222- changeable_sessions = [ sess for sess in refined_candidates if can_manage_materials (request . user , sess .group ) ]
213+ changeable_sessions = [ sess for sess in refined_candidates if can_manage_materials (user , sess .group ) ]
223214
224215 if not changeable_sessions :
225216 raise Http404
@@ -253,48 +244,77 @@ def time_sort_key(session):
253244 else :
254245 sorted_sessions = [sorted_sessions [iseq ]]
255246
256- for index ,session in enumerate (sorted_sessions ):
257- session .sequence = index + 1
258-
259- if len (sorted_sessions )== 1 :
260- session = sorted_sessions [0 ]
261- choices = [('notpresented' ,'Not Presented' )]
262- choices .extend ([(x ,x ) for x in doc .docevent_set .filter (type = 'new_revision' ).values_list ('newrevisiondocevent__rev' ,flat = True )])
263- initial = {'version' : session .version if hasattr (session ,'version' ) else 'notpresented' }
264-
265- if request .method == 'POST' :
266- form = MaterialVersionForm (request .POST ,choices = choices )
267- if form .is_valid ():
268- if request .POST .get ("action" , "" ) == "Save" :
269- new_selection = form .cleaned_data ['version' ]
270- if initial ['version' ] != new_selection :
271- if initial ['version' ] == 'notpresented' :
272- doc .sessionpresentation_set .create (session = session ,rev = new_selection )
273- c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
274- c .desc = "Added version %s to session: %s" % (new_selection ,session )
275- c .save ()
276- elif new_selection == 'notpresented' :
277- doc .sessionpresentation_set .filter (session = session ).delete ()
278- c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
279- c .desc = "Removed from session: %s" % (session )
280- c .save ()
281- else :
282- doc .sessionpresentation_set .filter (session = session ).update (rev = new_selection )
283- c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
284- c .desc = "Revision for session %s changed to %s" % (session ,new_selection )
285- c .save ()
286- return redirect ('doc_view' ,name = doc .name )
287- else :
288- form = MaterialVersionForm (choices = choices ,initial = initial )
247+ return sorted_sessions
289248
290- return render (request , 'doc/material/edit_material_presentations.html' , {
291- 'session' : session ,
292- 'doc' : doc ,
293- 'form' : form ,
294- })
249+ @login_required
250+ def edit_material_presentations (request , name , acronym = None , date = None , seq = None , week_day = None ):
251+
252+ doc = get_object_or_404 (Document , name = name )
253+ if not (doc .type_id == 'slides' and doc .get_state ('slides' ).slug == 'active' ):
254+ raise Http404
295255
256+ group = doc .group
257+ if not (group .features .has_materials and can_manage_materials (request .user ,group )):
258+ raise Http404
259+
260+ sorted_sessions = get_upcoming_manageable_sessions (request .user , doc , acronym , date , seq , week_day )
261+
262+ if len (sorted_sessions )!= 1 :
263+ raise Http404
264+
265+ session = sorted_sessions [0 ]
266+ choices = [('notpresented' ,'Not Presented' )]
267+ choices .extend ([(x ,x ) for x in doc .docevent_set .filter (type = 'new_revision' ).values_list ('newrevisiondocevent__rev' ,flat = True )])
268+ initial = {'version' : session .version if hasattr (session ,'version' ) else 'notpresented' }
269+
270+ if request .method == 'POST' :
271+ form = MaterialVersionForm (request .POST ,choices = choices )
272+ if form .is_valid ():
273+ if request .POST .get ("action" , "" ) == "Save" :
274+ new_selection = form .cleaned_data ['version' ]
275+ if initial ['version' ] != new_selection :
276+ if initial ['version' ] == 'notpresented' :
277+ doc .sessionpresentation_set .create (session = session ,rev = new_selection )
278+ c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
279+ c .desc = "Added version %s to session: %s" % (new_selection ,session )
280+ c .save ()
281+ elif new_selection == 'notpresented' :
282+ doc .sessionpresentation_set .filter (session = session ).delete ()
283+ c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
284+ c .desc = "Removed from session: %s" % (session )
285+ c .save ()
286+ else :
287+ doc .sessionpresentation_set .filter (session = session ).update (rev = new_selection )
288+ c = DocEvent (type = "added_comment" , doc = doc , by = request .user .person )
289+ c .desc = "Revision for session %s changed to %s" % (session ,new_selection )
290+ c .save ()
291+ return redirect ('doc_view' ,name = doc .name )
296292 else :
297- return render (request , 'doc/material/material_presentations.html' , {
298- 'sessions' : sorted_sessions ,
299- 'doc' : doc ,
293+ form = MaterialVersionForm (choices = choices ,initial = initial )
294+
295+ return render (request , 'doc/material/edit_material_presentations.html' , {
296+ 'session' : session ,
297+ 'doc' : doc ,
298+ 'form' : form ,
299+ })
300+
301+ @login_required
302+ def material_presentations (request , name , acronym = None , date = None , seq = None , week_day = None ):
303+
304+ doc = get_object_or_404 (Document , name = name )
305+ if not (doc .type_id == 'slides' and doc .get_state ('slides' ).slug == 'active' ):
306+ raise Http404
307+
308+ group = doc .group
309+ if not (group .features .has_materials and can_manage_materials (request .user ,group )):
310+ raise Http404
311+
312+ sorted_sessions = get_upcoming_manageable_sessions (request .user , doc , acronym , date , seq , week_day )
313+
314+ #for index,session in enumerate(sorted_sessions):
315+ # session.sequence = index+1
316+
317+ return render (request , 'doc/material/material_presentations.html' , {
318+ 'sessions' : sorted_sessions ,
319+ 'doc' : doc ,
300320 })
0 commit comments