@@ -58,6 +58,9 @@ def start_of_year():
5858# pylint: disable=C0413
5959from .models .models import (
6060 CommitteeMeeting ,
61+ CurrentCoops ,
62+ FreshmanEvalData ,
63+ HouseMeeting ,
6164 MemberCommitteeAttendance ,
6265 MemberHouseMeetingAttendance ,
6366 MemberSeminarAttendance ,
@@ -137,7 +140,7 @@ def database_processor(logger, log_method, event_dict): # pylint: disable=unuse
137140app .register_blueprint (co_op_bp )
138141app .register_blueprint (log_bp )
139142
140- from .util .ldap import ldap_get_member
143+ from .util .ldap import ldap_get_member , ldap_is_active , ldap_is_intromember
141144
142145
143146@app .route ('/<path:path>' )
@@ -168,30 +171,88 @@ def health():
168171
169172@app .route ("/gatekeep/<username>" )
170173def gatekeep_status (username ):
171- token = request .headers .get ("X-VOTE-TOKEN" ,"" )
174+ token = request .headers .get ("X-VOTE-TOKEN" , "" )
172175 if token != app .config ["VOTE_TOKEN" ]:
173176 return "Users cannot access this page" , 403
174- # number of directorship meetings attended
175- d_meetings = len ([m .meeting_id for m in
176- MemberCommitteeAttendance .query .filter (
177- MemberCommitteeAttendance .uid == username
178- ) if CommitteeMeeting .query .filter (
179- CommitteeMeeting .id == m .meeting_id ).first ().approved ])
180- # technical seminar total
181- t_seminars = len ([s .seminar_id for s in
182- MemberSeminarAttendance .query .filter (
183- MemberSeminarAttendance .uid == username
184- ) if TechnicalSeminar .query .filter (
185- TechnicalSeminar .id == s .seminar_id ).first ().approved ])
186- # house meeting total
187- h_meetings = len ([(m .meeting_id , m .attendance_status ) for m in
188- MemberHouseMeetingAttendance .query .filter (
189- MemberHouseMeetingAttendance .uid == username )])
190- result = d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6
191- return {"result" : result ,
192- "h_meetings" : h_meetings ,
193- "c_meetings" : d_meetings ,
194- "t_seminars" : t_seminars }, 200
177+
178+ if datetime .today () < datetime (start_of_year ().year , 12 , 31 ):
179+ semester = "Fall"
180+ semester_start = datetime (start_of_year ().year ,6 ,1 )
181+ else :
182+ semester = "Spring"
183+ semester_start = datetime (start_of_year ().year + 1 ,1 ,1 )
184+
185+ # groups
186+ ldap_member = ldap_get_member (username )
187+ is_intro_member = ldap_is_intromember (ldap_member )
188+ is_active_member = ldap_is_active (ldap_member ) and not is_intro_member
189+
190+ is_on_coop = (
191+ CurrentCoops .query .filter (
192+ CurrentCoops .date_created > start_of_year (),
193+ CurrentCoops .semester == semester ,
194+ CurrentCoops .uid == username ,
195+ ).first ()
196+ is not None
197+ )
198+
199+ passed_fall = (
200+ FreshmanEvalData .query .filter (
201+ FreshmanEvalData .freshman_eval_result == "Passed" ,
202+ FreshmanEvalData .eval_date > start_of_year (),
203+ FreshmanEvalData .uid == username ,
204+ ).first ()
205+ is not None
206+ )
207+ eligibility_of_groups = (is_active_member and not is_on_coop ) or passed_fall
208+
209+ # number of directorship meetings attended in the current semester
210+ d_meetings = (
211+ MemberCommitteeAttendance .query .join (
212+ CommitteeMeeting ,
213+ MemberCommitteeAttendance .meeting_id == CommitteeMeeting .id ,
214+ )
215+ .filter (
216+ MemberCommitteeAttendance .uid == username ,
217+ CommitteeMeeting .approved is True ,
218+ CommitteeMeeting .date >= semester_start ,
219+ )
220+ .count ()
221+ )
222+ # number of technical seminars attended in the current semester
223+ t_seminars = (
224+ MemberSeminarAttendance .query .join (
225+ TechnicalSeminar ,
226+ MemberSeminarAttendance .meeting_id == TechnicalSeminar .id ,
227+ )
228+ .filter (
229+ MemberSeminarAttendance .uid == username ,
230+ TechnicalSeminar .approved is True ,
231+ TechnicalSeminar .date >= semester_start ,
232+ )
233+ .count ()
234+ )
235+ # number of house meetings attended in the current semester
236+ h_meetings = (
237+ MemberHouseMeetingAttendance .query .join (
238+ HouseMeeting ,
239+ MemberHouseMeetingAttendance .meeting_id == HouseMeeting .id ,
240+ )
241+ .filter (
242+ MemberHouseMeetingAttendance .uid == username ,
243+ HouseMeeting .date >= semester_start
244+ )
245+ .count ()
246+ )
247+ result = eligibility_of_groups and (d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6 )
248+
249+ return {
250+ "result" : result ,
251+ "h_meetings" : h_meetings ,
252+ "c_meetings" : d_meetings ,
253+ "t_seminars" : t_seminars ,
254+ }, 200
255+
195256
196257
197258
0 commit comments