@@ -377,3 +377,113 @@ def alter_house_excuse(uid, hid):
377377 db .session .flush ()
378378 db .session .commit ()
379379 return jsonify ({"success" : True }), 200
380+
381+
382+ @attendance_bp .route ('/attendance/history' , methods = ['GET' ])
383+ def attendance_history ():
384+
385+
386+ def get_meeting_attendees (meeting_id ):
387+ attendees = [ldap_get_member (a .uid ).displayName for a in
388+ MemberCommitteeAttendance .query .filter (
389+ MemberCommitteeAttendance .meeting_id == meeting_id ).all ()]
390+
391+ for freshman in [a .fid for a in
392+ FreshmanCommitteeAttendance .query .filter (
393+ FreshmanCommitteeAttendance .meeting_id == meeting_id ).all ()]:
394+ attendees .append (FreshmanAccount .query .filter (
395+ FreshmanAccount .id == freshman ).first ().name )
396+ return attendees
397+
398+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
399+ request_id = str (uuid .uuid4 ()))
400+
401+ user_name = request .headers .get ('x-webauth-user' )
402+ account = ldap_get_member (user_name )
403+ if not ldap_is_eboard (account ):
404+ return "must be eboard" , 403
405+
406+ if request .method == 'GET' :
407+ page = request .args .get ('page' , 1 )
408+ log .info ('api' , action = 'view past attendance submitions' )
409+ offset = 0 if int (page ) == 1 else ((int (page )- 1 )* 10 )
410+ limit = int (page )* 10
411+ all_cm = [{"meeting_id" : m .id ,
412+ "directorship" : m .committee ,
413+ "dt_obj" : m .timestamp ,
414+ "date" : m .timestamp .strftime ("%a %m/%d/%Y" ),
415+ "attendees" : get_meeting_attendees (m .id )
416+ } for m in CommitteeMeeting .query .all ()]
417+ c_meetings = sorted (all_cm , key = lambda k : k ['dt_obj' ], reverse = True )[offset :limit ]
418+ if len (all_cm ) % 10 != 0 :
419+ total_pages = (int (len (all_cm ) / 10 ) + 1 )
420+ else :
421+ total_pages = (int (len (all_cm ) / 10 ))
422+ return render_template (request ,
423+ 'attendance_history.html' ,
424+ username = user_name ,
425+ history = c_meetings ,
426+ num_pages = total_pages ,
427+ current_page = int (page ))
428+
429+ @attendance_bp .route ('/attendance/alter/cm/<cid>' , methods = ['POST' ])
430+ def alter_committee_attendance (cid ):
431+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
432+ request_id = str (uuid .uuid4 ()))
433+ log .info ('api' , action = 'edit committee meeting attendance' )
434+
435+ user_name = request .headers .get ('x-webauth-user' )
436+
437+ account = ldap_get_member (user_name )
438+ if not ldap_is_eboard (account ):
439+ return "must be eboard" , 403
440+
441+ post_data = request .get_json ()
442+ meeting_id = cid
443+ m_attendees = post_data ['members' ]
444+ f_attendees = post_data ['freshmen' ]
445+
446+ FreshmanCommitteeAttendance .query .filter (
447+ FreshmanCommitteeAttendance .meeting_id == meeting_id ).delete ()
448+
449+ MemberCommitteeAttendance .query .filter (
450+ MemberCommitteeAttendance .meeting_id == meeting_id ).delete ()
451+
452+ for m in m_attendees :
453+ db .session .add (MemberCommitteeAttendance (m , meeting_id ))
454+
455+ for f in f_attendees :
456+ db .session .add (FreshmanCommitteeAttendance (f , meeting_id ))
457+
458+ db .session .flush ()
459+ db .session .commit ()
460+ return jsonify ({"success" : True }), 200
461+
462+ @attendance_bp .route ('/attendance/cm/<cid>' , methods = ['GET' , 'DELETE' ])
463+ def get_cm_attendees (cid ):
464+ if request .method == 'GET' :
465+ attendees = [{"value" : a .uid ,
466+ "display" : ldap_get_member (a .uid ).displayName
467+ } for a in
468+ MemberCommitteeAttendance .query .filter (
469+ MemberCommitteeAttendance .meeting_id == cid ).all ()]
470+
471+ for freshman in [{"value" : a .fid ,
472+ "display" : FreshmanAccount .query .filter (FreshmanAccount .id == a .fid ).first ().name
473+ } for a in FreshmanCommitteeAttendance .query .filter (
474+ FreshmanCommitteeAttendance .meeting_id == cid ).all ()]:
475+ attendees .append (freshman )
476+ return jsonify ({"attendees" : attendees }), 200
477+
478+ elif request .method == 'DELETE' :
479+ FreshmanCommitteeAttendance .query .filter (
480+ FreshmanCommitteeAttendance .meeting_id == cid ).delete ()
481+ MemberCommitteeAttendance .query .filter (
482+ MemberCommitteeAttendance .meeting_id == cid ).delete ()
483+ CommitteeMeeting .query .filter (
484+ CommitteeMeeting .id == cid ).delete ()
485+
486+ db .session .flush ()
487+ db .session .commit ()
488+
489+ return jsonify ({"success" : True }), 200
0 commit comments