77
88import structlog
99
10- from flask import Blueprint , request , jsonify
10+ from flask import Blueprint , request , jsonify , abort
1111
1212from conditional .models .models import FreshmanAccount
1313from conditional .models .models import FreshmanEvalData
2424
2525from conditional .blueprints .cache_management import clear_active_members_cache
2626from conditional .blueprints .cache_management import clear_onfloor_members_cache
27+ from conditional .blueprints .intro_evals import display_intro_evals
2728
2829from conditional .util .ldap import ldap_is_eval_director
2930from conditional .util .ldap import ldap_is_financial_director
@@ -241,6 +242,7 @@ def member_management_edituser(uid):
241242 db .session .commit ()
242243 return jsonify ({"success" : True }), 200
243244
245+
244246def edit_uid (uid , user_name , post_data ):
245247 active_member = post_data ['activeMember' ]
246248
@@ -290,8 +292,8 @@ def edit_uid(uid, user_name, post_data):
290292
291293def edit_fid (uid , post_data ):
292294 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' ]))
295297
296298 name = post_data ['name' ]
297299
@@ -473,13 +475,13 @@ def member_management_upgrade_user():
473475 for fhm in FreshmanHouseMeetingAttendance .query .filter (FreshmanHouseMeetingAttendance .fid == fid ):
474476 # Don't duplicate HM attendance records
475477 mhm = MemberHouseMeetingAttendance .query .filter (
476- MemberHouseMeetingAttendance .meeting_id == fhm .meeting_id ).first ()
478+ MemberHouseMeetingAttendance .meeting_id == fhm .meeting_id ).first ()
477479 if mhm is None :
478480 db .session .add (MemberHouseMeetingAttendance (
479481 uid , fhm .meeting_id , fhm .excuse , fhm .attendance_status ))
480482 else :
481483 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 ))
483485 db .session .delete (fhm )
484486
485487 if acct .onfloor_status :
@@ -496,3 +498,58 @@ def member_management_upgrade_user():
496498 clear_onfloor_members_cache ()
497499
498500 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