7
7
8
8
import structlog
9
9
10
- from flask import Blueprint , request , jsonify
10
+ from flask import Blueprint , request , jsonify , abort
11
11
12
12
from conditional .models .models import FreshmanAccount
13
13
from conditional .models .models import FreshmanEvalData
24
24
25
25
from conditional .blueprints .cache_management import clear_active_members_cache
26
26
from conditional .blueprints .cache_management import clear_onfloor_members_cache
27
+ from conditional .blueprints .intro_evals import display_intro_evals
27
28
28
29
from conditional .util .ldap import ldap_is_eval_director
29
30
from conditional .util .ldap import ldap_is_financial_director
@@ -241,6 +242,7 @@ def member_management_edituser(uid):
241
242
db .session .commit ()
242
243
return jsonify ({"success" : True }), 200
243
244
245
+
244
246
def edit_uid (uid , user_name , post_data ):
245
247
active_member = post_data ['activeMember' ]
246
248
@@ -290,8 +292,8 @@ def edit_uid(uid, user_name, post_data):
290
292
291
293
def edit_fid (uid , post_data ):
292
294
logger .info ('backend' , action = "edit freshman account %s room: %s onfloor: %s eval_date: %s sig_missed %s" %
293
- (uid , post_data ['roomNumber' ], post_data ['onfloorStatus' ],
294
- post_data ['evalDate' ], post_data ['sigMissed' ]))
295
+ (uid , post_data ['roomNumber' ], post_data ['onfloorStatus' ],
296
+ post_data ['evalDate' ], post_data ['sigMissed' ]))
295
297
296
298
name = post_data ['name' ]
297
299
@@ -473,13 +475,13 @@ def member_management_upgrade_user():
473
475
for fhm in FreshmanHouseMeetingAttendance .query .filter (FreshmanHouseMeetingAttendance .fid == fid ):
474
476
# Don't duplicate HM attendance records
475
477
mhm = MemberHouseMeetingAttendance .query .filter (
476
- MemberHouseMeetingAttendance .meeting_id == fhm .meeting_id ).first ()
478
+ MemberHouseMeetingAttendance .meeting_id == fhm .meeting_id ).first ()
477
479
if mhm is None :
478
480
db .session .add (MemberHouseMeetingAttendance (
479
481
uid , fhm .meeting_id , fhm .excuse , fhm .attendance_status ))
480
482
else :
481
483
logger .info ('backend' , action = "duplicate house meeting attendance! fid: %s, uid: %s, id: %s" %
482
- (fid , uid , fhm .meeting_id ))
484
+ (fid , uid , fhm .meeting_id ))
483
485
db .session .delete (fhm )
484
486
485
487
if acct .onfloor_status :
@@ -496,3 +498,58 @@ def member_management_upgrade_user():
496
498
clear_onfloor_members_cache ()
497
499
498
500
return jsonify ({"success" : True }), 200
501
+
502
+
503
+ @member_management_bp .route ('/manage/intro_project' , methods = ['GET' ])
504
+ def introductory_project ():
505
+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
506
+ request_id = str (uuid .uuid4 ()))
507
+ log .info ('api' , action = 'show introductory project management' )
508
+
509
+ user_name = request .headers .get ('x-webauth-user' )
510
+
511
+ if not ldap_is_eval_director (user_name ):
512
+ return "must be eval director" , 403
513
+
514
+ return render_template (request ,
515
+ 'introductory_project.html' ,
516
+ username = user_name ,
517
+ intro_members = display_intro_evals (internal = True ))
518
+
519
+
520
+ @member_management_bp .route ('/manage/intro_project' , methods = ['POST' ])
521
+ def introductory_project_submit ():
522
+ log = logger .new (user_name = request .headers .get ("x-webauth-user" ),
523
+ request_id = str (uuid .uuid4 ()))
524
+ log .info ('api' , action = 'submit introductory project results' )
525
+
526
+ user_name = request .headers .get ('x-webauth-user' )
527
+
528
+ if not ldap_is_eval_director (user_name ):
529
+ return "must be eval director" , 403
530
+
531
+ post_data = request .get_json ()
532
+
533
+ if not isinstance (post_data , list ):
534
+ abort (400 )
535
+
536
+ for intro_member in post_data :
537
+ if not isinstance (intro_member , dict ):
538
+ abort (400 )
539
+
540
+ if 'uid' not in intro_member or 'status' not in intro_member :
541
+ abort (400 )
542
+
543
+ if intro_member ['status' ] not in ['Passed' , 'Pending' , 'Failed' ]:
544
+ abort (400 )
545
+
546
+ log .info ('debug' , action = 'setting status "' + intro_member ['status' ] + '" for ' + intro_member ['uid' ])
547
+
548
+ FreshmanEvalData .query .filter (FreshmanEvalData .uid == intro_member ['uid' ]).update ({
549
+ 'freshman_project' : intro_member ['status' ]
550
+ })
551
+
552
+ db .session .flush ()
553
+ db .session .commit ()
554
+
555
+ return jsonify ({"success" : True }), 200
0 commit comments