@@ -128,14 +128,9 @@ def display_attendance_cm():
128128 request_id = str (uuid .uuid4 ()))
129129 log .info ('frontend' , action = 'display committee meeting attendance page' )
130130
131- user_name = request .headers .get ('x-webauth-user' )
132- account = ldap_get_member (user_name )
133- if not ldap_is_eboard (account ):
134- return redirect ("/dashboard" )
135-
136131 return render_template (request ,
137132 'attendance_cm.html' ,
138- username = user_name ,
133+ username = request . headers . get ( "x-webauth-user" ) ,
139134 date = datetime .now ().strftime ("%Y-%m-%d" ))
140135
141136
@@ -145,14 +140,9 @@ def display_attendance_ts():
145140 request_id = str (uuid .uuid4 ()))
146141 log .info ('frontend' , action = 'display technical seminar attendance page' )
147142
148- user_name = request .headers .get ('x-webauth-user' )
149- account = ldap_get_member (user_name )
150- if not ldap_is_eboard (account ):
151- return redirect ("/dashboard" )
152-
153143 return render_template (request ,
154144 'attendance_ts.html' ,
155- username = user_name ,
145+ username = request . headers . get ( "x-webauth-user" ) ,
156146 date = datetime .now ().strftime ("%Y-%m-%d" ))
157147
158148
@@ -182,9 +172,7 @@ def submit_committee_attendance():
182172
183173 user_name = request .headers .get ('x-webauth-user' )
184174 account = ldap_get_member (user_name )
185- if not ldap_is_eboard (account ):
186- return "must be eboard" , 403
187-
175+ approved = ldap_is_eboard (account )
188176 post_data = request .get_json ()
189177
190178 committee = post_data ['committee' ]
@@ -193,7 +181,7 @@ def submit_committee_attendance():
193181 timestamp = post_data ['timestamp' ]
194182
195183 timestamp = datetime .strptime (timestamp , "%Y-%m-%d" )
196- meeting = CommitteeMeeting (committee , timestamp )
184+ meeting = CommitteeMeeting (committee , timestamp , approved )
197185
198186 db .session .add (meeting )
199187 db .session .flush ()
@@ -225,8 +213,7 @@ def submit_seminar_attendance():
225213 user_name = request .headers .get ('x-webauth-user' )
226214
227215 account = ldap_get_member (user_name )
228- if not ldap_is_eboard (account ):
229- return "must be eboard" , 403
216+ approved = ldap_is_eboard (account )
230217
231218 post_data = request .get_json ()
232219
@@ -236,7 +223,7 @@ def submit_seminar_attendance():
236223 timestamp = post_data ['timestamp' ]
237224
238225 timestamp = datetime .strptime (timestamp , "%Y-%m-%d" )
239- seminar = TechnicalSeminar (seminar_name , timestamp )
226+ seminar = TechnicalSeminar (seminar_name , timestamp , approved )
240227
241228 db .session .add (seminar )
242229 db .session .flush ()
@@ -395,6 +382,18 @@ def get_meeting_attendees(meeting_id):
395382 FreshmanAccount .id == freshman ).first ().name )
396383 return attendees
397384
385+ def get_seminar_attendees (meeting_id ):
386+ attendees = [ldap_get_member (a .uid ).displayName for a in
387+ MemberSeminarAttendance .query .filter (
388+ MemberSeminarAttendance .seminar_id == meeting_id ).all ()]
389+
390+ for freshman in [a .fid for a in
391+ FreshmanSeminarAttendance .query .filter (
392+ FreshmanSeminarAttendance .seminar_id == meeting_id ).all ()]:
393+ attendees .append (FreshmanAccount .query .filter (
394+ FreshmanAccount .id == freshman ).first ().name )
395+ return attendees
396+
398397 log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
399398 request_id = str (uuid .uuid4 ()))
400399
@@ -409,20 +408,46 @@ def get_meeting_attendees(meeting_id):
409408 offset = 0 if int (page ) == 1 else ((int (page )- 1 )* 10 )
410409 limit = int (page )* 10
411410 all_cm = [{"id" : m .id ,
412- "directorship " : m .committee ,
411+ "name " : m .committee ,
413412 "dt_obj" : m .timestamp ,
414413 "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 ]
414+ "attendees" : get_meeting_attendees (m .id ),
415+ "type" : "cm"
416+ } for m in CommitteeMeeting .query .filter (
417+ CommitteeMeeting .approved ).all ()]
418+ all_ts = [{"id" : m .id ,
419+ "name" : m .name ,
420+ "dt_obj" : m .timestamp ,
421+ "date" : m .timestamp .strftime ("%a %m/%d/%Y" ),
422+ "attendees" : get_seminar_attendees (m .id ),
423+ "type" : "ts"
424+ } for m in TechnicalSeminar .query .filter (
425+ TechnicalSeminar .approved ).all ()]
426+ pend_cm = [{"id" : m .id ,
427+ "name" : m .committee ,
428+ "dt_obj" : m .timestamp ,
429+ "date" : m .timestamp .strftime ("%a %m/%d/%Y" ),
430+ "attendees" : get_meeting_attendees (m .id )
431+ } for m in CommitteeMeeting .query .filter (
432+ CommitteeMeeting .approved == False ).all ()] # pylint: disable=singleton-comparison
433+ pend_ts = [{"id" : m .id ,
434+ "name" : m .name ,
435+ "dt_obj" : m .timestamp ,
436+ "date" : m .timestamp .strftime ("%a %m/%d/%Y" ),
437+ "attendees" : get_seminar_attendees (m .id )
438+ } for m in TechnicalSeminar .query .filter (
439+ TechnicalSeminar .approved == False ).all ()] # pylint: disable=singleton-comparison
440+ all_meetings = sorted ((all_cm + all_ts ), key = lambda k : k ['dt_obj' ], reverse = True )[offset :limit ]
418441 if len (all_cm ) % 10 != 0 :
419442 total_pages = (int (len (all_cm ) / 10 ) + 1 )
420443 else :
421444 total_pages = (int (len (all_cm ) / 10 ))
422445 return render_template (request ,
423446 'attendance_history.html' ,
424447 username = user_name ,
425- history = c_meetings ,
448+ history = all_meetings ,
449+ pending_cm = pend_cm ,
450+ pending_ts = pend_ts ,
426451 num_pages = total_pages ,
427452 current_page = int (page ))
428453
@@ -459,8 +484,83 @@ def alter_committee_attendance(cid):
459484 db .session .commit ()
460485 return jsonify ({"success" : True }), 200
461486
487+
488+ @attendance_bp .route ('/attendance/alter/ts/<sid>' , methods = ['POST' ])
489+ def alter_seminar_attendance (sid ):
490+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
491+ request_id = str (uuid .uuid4 ()))
492+ log .info ('api' , action = 'edit technical seminar attendance' )
493+
494+ user_name = request .headers .get ('x-webauth-user' )
495+
496+ account = ldap_get_member (user_name )
497+ if not ldap_is_eboard (account ):
498+ return "must be eboard" , 403
499+
500+ post_data = request .get_json ()
501+ meeting_id = sid
502+ m_attendees = post_data ['members' ]
503+ f_attendees = post_data ['freshmen' ]
504+
505+ FreshmanSeminarAttendance .query .filter (
506+ FreshmanSeminarAttendance .seminar_id == meeting_id ).delete ()
507+
508+ MemberSeminarAttendance .query .filter (
509+ MemberSeminarAttendance .seminar_id == meeting_id ).delete ()
510+
511+ for m in m_attendees :
512+ db .session .add (MemberSeminarAttendance (m , meeting_id ))
513+
514+ for f in f_attendees :
515+ db .session .add (FreshmanSeminarAttendance (f , meeting_id ))
516+
517+ db .session .flush ()
518+ db .session .commit ()
519+ return jsonify ({"success" : True }), 200
520+
521+
522+ @attendance_bp .route ('/attendance/ts/<sid>' , methods = ['GET' , 'DELETE' ])
523+ def get_cm_attendees (sid ):
524+ if request .method == 'GET' :
525+ attendees = [{"value" : a .uid ,
526+ "display" : ldap_get_member (a .uid ).displayName
527+ } for a in
528+ MemberSeminarAttendance .query .filter (
529+ MemberSeminarAttendance .seminar_id == sid ).all ()]
530+
531+ for freshman in [{"value" : a .fid ,
532+ "display" : FreshmanAccount .query .filter (FreshmanAccount .id == a .fid ).first ().name
533+ } for a in FreshmanSeminarAttendance .query .filter (
534+ FreshmanSeminarAttendance .seminar_id == sid ).all ()]:
535+ attendees .append (freshman )
536+ return jsonify ({"attendees" : attendees }), 200
537+
538+ elif request .method == 'DELETE' :
539+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
540+ request_id = str (uuid .uuid4 ()))
541+ log .info ('api' , action = 'delete technical seminar' )
542+
543+ user_name = request .headers .get ('x-webauth-user' )
544+
545+ account = ldap_get_member (user_name )
546+ if not ldap_is_eboard (account ):
547+ return "must be eboard" , 403
548+
549+ FreshmanSeminarAttendance .query .filter (
550+ FreshmanSeminarAttendance .seminar_id == sid ).delete ()
551+ MemberSeminarAttendance .query .filter (
552+ MemberSeminarAttendance .seminar_id == sid ).delete ()
553+ TechnicalSeminar .query .filter (
554+ TechnicalSeminar .id == sid ).delete ()
555+
556+ db .session .flush ()
557+ db .session .commit ()
558+
559+ return jsonify ({"success" : True }), 200
560+
561+
462562@attendance_bp .route ('/attendance/cm/<cid>' , methods = ['GET' , 'DELETE' ])
463- def get_cm_attendees (cid ):
563+ def get_ts_attendees (cid ):
464564 if request .method == 'GET' :
465565 attendees = [{"value" : a .uid ,
466566 "display" : ldap_get_member (a .uid ).displayName
@@ -476,6 +576,16 @@ def get_cm_attendees(cid):
476576 return jsonify ({"attendees" : attendees }), 200
477577
478578 elif request .method == 'DELETE' :
579+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
580+ request_id = str (uuid .uuid4 ()))
581+ log .info ('api' , action = 'delete committee meeting' )
582+
583+ user_name = request .headers .get ('x-webauth-user' )
584+
585+ account = ldap_get_member (user_name )
586+ if not ldap_is_eboard (account ):
587+ return "must be eboard" , 403
588+
479589 FreshmanCommitteeAttendance .query .filter (
480590 FreshmanCommitteeAttendance .meeting_id == cid ).delete ()
481591 MemberCommitteeAttendance .query .filter (
@@ -487,3 +597,43 @@ def get_cm_attendees(cid):
487597 db .session .commit ()
488598
489599 return jsonify ({"success" : True }), 200
600+
601+
602+ @attendance_bp .route ('/attendance/cm/<cid>/approve' , methods = ['POST' ])
603+ def approve_cm (cid ):
604+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
605+ request_id = str (uuid .uuid4 ()))
606+ log .info ('api' , action = 'approve committee meeting attendance' )
607+
608+ user_name = request .headers .get ('x-webauth-user' )
609+
610+ account = ldap_get_member (user_name )
611+ if not ldap_is_eboard (account ):
612+ return "must be eboard" , 403
613+
614+ CommitteeMeeting .query .filter (
615+ CommitteeMeeting .id == cid ).first ().approved = True
616+ db .session .flush ()
617+ db .session .commit ()
618+
619+ return jsonify ({"success" : True }), 200
620+
621+
622+ @attendance_bp .route ('/attendance/ts/<sid>/approve' , methods = ['POST' ])
623+ def approve_ts (sid ):
624+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
625+ request_id = str (uuid .uuid4 ()))
626+ log .info ('api' , action = 'approve committee meeting attendance' )
627+
628+ user_name = request .headers .get ('x-webauth-user' )
629+
630+ account = ldap_get_member (user_name )
631+ if not ldap_is_eboard (account ):
632+ return "must be eboard" , 403
633+
634+ TechnicalSeminar .query .filter (
635+ TechnicalSeminar .id == sid ).first ().approved = True
636+ db .session .flush ()
637+ db .session .commit ()
638+
639+ return jsonify ({"success" : True }), 200
0 commit comments