@@ -128,14 +128,9 @@ def display_attendance_cm():
128
128
request_id = str (uuid .uuid4 ()))
129
129
log .info ('frontend' , action = 'display committee meeting attendance page' )
130
130
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
-
136
131
return render_template (request ,
137
132
'attendance_cm.html' ,
138
- username = user_name ,
133
+ username = request . headers . get ( "x-webauth-user" ) ,
139
134
date = datetime .now ().strftime ("%Y-%m-%d" ))
140
135
141
136
@@ -145,14 +140,9 @@ def display_attendance_ts():
145
140
request_id = str (uuid .uuid4 ()))
146
141
log .info ('frontend' , action = 'display technical seminar attendance page' )
147
142
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
-
153
143
return render_template (request ,
154
144
'attendance_ts.html' ,
155
- username = user_name ,
145
+ username = request . headers . get ( "x-webauth-user" ) ,
156
146
date = datetime .now ().strftime ("%Y-%m-%d" ))
157
147
158
148
@@ -182,9 +172,7 @@ def submit_committee_attendance():
182
172
183
173
user_name = request .headers .get ('x-webauth-user' )
184
174
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 )
188
176
post_data = request .get_json ()
189
177
190
178
committee = post_data ['committee' ]
@@ -193,7 +181,7 @@ def submit_committee_attendance():
193
181
timestamp = post_data ['timestamp' ]
194
182
195
183
timestamp = datetime .strptime (timestamp , "%Y-%m-%d" )
196
- meeting = CommitteeMeeting (committee , timestamp )
184
+ meeting = CommitteeMeeting (committee , timestamp , approved )
197
185
198
186
db .session .add (meeting )
199
187
db .session .flush ()
@@ -225,8 +213,7 @@ def submit_seminar_attendance():
225
213
user_name = request .headers .get ('x-webauth-user' )
226
214
227
215
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 )
230
217
231
218
post_data = request .get_json ()
232
219
@@ -236,7 +223,7 @@ def submit_seminar_attendance():
236
223
timestamp = post_data ['timestamp' ]
237
224
238
225
timestamp = datetime .strptime (timestamp , "%Y-%m-%d" )
239
- seminar = TechnicalSeminar (seminar_name , timestamp )
226
+ seminar = TechnicalSeminar (seminar_name , timestamp , approved )
240
227
241
228
db .session .add (seminar )
242
229
db .session .flush ()
@@ -395,6 +382,18 @@ def get_meeting_attendees(meeting_id):
395
382
FreshmanAccount .id == freshman ).first ().name )
396
383
return attendees
397
384
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
+
398
397
log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
399
398
request_id = str (uuid .uuid4 ()))
400
399
@@ -409,20 +408,46 @@ def get_meeting_attendees(meeting_id):
409
408
offset = 0 if int (page ) == 1 else ((int (page )- 1 )* 10 )
410
409
limit = int (page )* 10
411
410
all_cm = [{"id" : m .id ,
412
- "directorship " : m .committee ,
411
+ "name " : m .committee ,
413
412
"dt_obj" : m .timestamp ,
414
413
"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 ]
418
441
if len (all_cm ) % 10 != 0 :
419
442
total_pages = (int (len (all_cm ) / 10 ) + 1 )
420
443
else :
421
444
total_pages = (int (len (all_cm ) / 10 ))
422
445
return render_template (request ,
423
446
'attendance_history.html' ,
424
447
username = user_name ,
425
- history = c_meetings ,
448
+ history = all_meetings ,
449
+ pending_cm = pend_cm ,
450
+ pending_ts = pend_ts ,
426
451
num_pages = total_pages ,
427
452
current_page = int (page ))
428
453
@@ -459,8 +484,83 @@ def alter_committee_attendance(cid):
459
484
db .session .commit ()
460
485
return jsonify ({"success" : True }), 200
461
486
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
+
462
562
@attendance_bp .route ('/attendance/cm/<cid>' , methods = ['GET' , 'DELETE' ])
463
- def get_cm_attendees (cid ):
563
+ def get_ts_attendees (cid ):
464
564
if request .method == 'GET' :
465
565
attendees = [{"value" : a .uid ,
466
566
"display" : ldap_get_member (a .uid ).displayName
@@ -476,6 +576,16 @@ def get_cm_attendees(cid):
476
576
return jsonify ({"attendees" : attendees }), 200
477
577
478
578
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
+
479
589
FreshmanCommitteeAttendance .query .filter (
480
590
FreshmanCommitteeAttendance .meeting_id == cid ).delete ()
481
591
MemberCommitteeAttendance .query .filter (
@@ -487,3 +597,43 @@ def get_cm_attendees(cid):
487
597
db .session .commit ()
488
598
489
599
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