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