22from sqlalchemy import func , or_
33
44from conditional import start_of_year
5- from conditional .models .models import CommitteeMeeting
5+ from conditional .models .models import CommitteeMeeting , FreshmanAccount
66from conditional .models .models import CurrentCoops
77from conditional .models .models import FreshmanEvalData
88from conditional .models .models import HouseMeeting
2121from conditional .util .ldap import ldap_is_intromember
2222from conditional .util .ldap import ldap_get_member
2323
24+
2425@service_cache (maxsize = 1024 )
2526def get_members_info ():
2627 members = ldap_get_current_students ()
@@ -57,18 +58,18 @@ def get_freshman_data(user_name):
5758 MemberCommitteeAttendance .query .filter (
5859 MemberCommitteeAttendance .uid == user_name
5960 ) if CommitteeMeeting .query .filter (
60- CommitteeMeeting .id == m .meeting_id ).first ().approved ]
61+ CommitteeMeeting .id == m .meeting_id ).first ().approved ]
6162 freshman ['committee_meetings' ] = len (c_meetings )
6263 # technical seminar total
6364 t_seminars = [s .seminar_id for s in
6465 MemberSeminarAttendance .query .filter (
6566 MemberSeminarAttendance .uid == user_name
6667 ) if TechnicalSeminar .query .filter (
67- TechnicalSeminar .id == s .seminar_id ).first ().approved ]
68+ TechnicalSeminar .id == s .seminar_id ).first ().approved ]
6869 freshman ['ts_total' ] = len (t_seminars )
6970 attendance = [m .name for m in TechnicalSeminar .query .filter (
7071 TechnicalSeminar .id .in_ (t_seminars )
71- )]
72+ )]
7273
7374 freshman ['ts_list' ] = attendance
7475
@@ -114,20 +115,20 @@ def get_cm(member):
114115
115116def get_hm (member , only_absent = False ):
116117 h_meetings = MemberHouseMeetingAttendance .query .outerjoin (
117- HouseMeeting ,
118- MemberHouseMeetingAttendance .meeting_id == HouseMeeting .id ).with_entities (
119- MemberHouseMeetingAttendance .meeting_id ,
120- MemberHouseMeetingAttendance .attendance_status ,
121- HouseMeeting .date ).filter (
122- HouseMeeting .date > start_of_year (),
123- MemberHouseMeetingAttendance .uid == member .uid )
118+ HouseMeeting ,
119+ MemberHouseMeetingAttendance .meeting_id == HouseMeeting .id ).with_entities (
120+ MemberHouseMeetingAttendance .meeting_id ,
121+ MemberHouseMeetingAttendance .attendance_status ,
122+ HouseMeeting .date ).filter (
123+ HouseMeeting .date > start_of_year (),
124+ MemberHouseMeetingAttendance .uid == member .uid )
124125 if only_absent :
125126 h_meetings = h_meetings .filter (MemberHouseMeetingAttendance .attendance_status == "Absent" )
126127 return h_meetings
127128
128129
129130# @service_cache(maxsize=128)
130- def req_cm (uid , members_on_coop = None ):
131+ def req_cm (uid , members_on_coop = None ):
131132 # Get the number of required committee meetings based on if the member
132133 # is going on co-op in the current operating session.
133134 on_coop = False
@@ -143,14 +144,16 @@ def req_cm(uid, members_on_coop = None):
143144 return 15
144145 return 30
145146
147+
146148@service_cache (maxsize = 256 )
147149def get_voting_members ():
148- if datetime .today () < datetime (start_of_year ().year , 12 , 31 ):
150+ today = datetime .today ()
151+ if today < datetime (start_of_year ().year , 12 , 31 ):
149152 semester = "Fall"
150- semester_start = datetime (start_of_year ().year ,6 , 1 )
153+ semester_start = datetime (start_of_year ().year , 6 , 1 )
151154 else :
152155 semester = "Spring"
153- semester_start = datetime (start_of_year ().year + 1 ,1 , 1 )
156+ semester_start = datetime (start_of_year ().year + 1 , 1 , 1 )
154157
155158 active_members = set (ldap_get_active_members ())
156159 intro_members = set (ldap_get_intro_members ())
@@ -169,8 +172,8 @@ def get_voting_members():
169172 coop_members = set (coop_members )
170173
171174 passed_fall_members = FreshmanEvalData .query .filter (
172- FreshmanEvalData .freshman_eval_result == "Passed" ,
173- FreshmanEvalData .eval_date > start_of_year (),
175+ FreshmanEvalData .freshman_eval_result == "Passed" ,
176+ FreshmanEvalData .eval_date > start_of_year (),
174177 ).with_entities (
175178 func .array_agg (FreshmanEvalData .uid )
176179 ).scalar ()
@@ -185,6 +188,12 @@ def get_voting_members():
185188
186189 elligible_members = (active_not_intro - coop_members ) | passed_fall_members
187190
191+ # Check to see if there's an Intro Evals in the future of this semester. If there is, everyone gets to vote!
192+ before_evals_one = len (FreshmanAccount .query .filter (FreshmanAccount .eval_date > today ).limit (1 ).all ())
193+ before_evals_two = len (FreshmanEvalData .query .filter (FreshmanEvalData .eval_date > today ).limit (1 ).all ())
194+ if before_evals_one > 0 or before_evals_two > 0 :
195+ return elligible_members
196+
188197 passing_dm = set (member .uid for member in MemberCommitteeAttendance .query .join (
189198 CommitteeMeeting ,
190199 MemberCommitteeAttendance .meeting_id == CommitteeMeeting .id
@@ -200,7 +209,7 @@ def get_voting_members():
200209 ).group_by (
201210 MemberCommitteeAttendance .uid
202211 ).having (
203- func .count (MemberCommitteeAttendance .uid ) >= 6 # pylint: disable=not-callable
212+ func .count (MemberCommitteeAttendance .uid ) >= 6 # pylint: disable=not-callable
204213 ).with_entities (
205214 MemberCommitteeAttendance .uid
206215 ).all ())
@@ -216,7 +225,7 @@ def get_voting_members():
216225 ).group_by (
217226 MemberSeminarAttendance .uid
218227 ).having (
219- func .count (MemberSeminarAttendance .uid ) >= 2 # pylint: disable=not-callable
228+ func .count (MemberSeminarAttendance .uid ) >= 2 # pylint: disable=not-callable
220229 ).all ())
221230
222231 passing_hm = set (member .uid for member in MemberHouseMeetingAttendance .query .join (
@@ -232,42 +241,54 @@ def get_voting_members():
232241 ).group_by (
233242 MemberHouseMeetingAttendance .uid
234243 ).having (
235- func .count (MemberHouseMeetingAttendance .uid ) >= 6 # pylint: disable=not-callable
244+ func .count (MemberHouseMeetingAttendance .uid ) >= 6 # pylint: disable=not-callable
236245 ).all ())
237246
238247 passing_reqs = passing_dm & passing_ts & passing_hm
239248
240249 return elligible_members & passing_reqs
241250
251+
242252def gatekeep_status (username ):
243- if datetime .today () < datetime (start_of_year ().year , 12 , 31 ):
253+ today = datetime .today ()
254+ # Check to see if there's an Intro Evals in the future of this semester. If there is, everyone gets to vote!
255+ before_evals_one = len (FreshmanAccount .query .filter (FreshmanAccount .eval_date > today ).limit (1 ).all ())
256+ before_evals_two = len (FreshmanEvalData .query .filter (FreshmanEvalData .eval_date > today ).limit (1 ).all ())
257+ if before_evals_one > 0 or before_evals_two > 0 :
258+ return {
259+ "result" : True ,
260+ "h_meetings" : 0 ,
261+ "c_meetings" : 0 ,
262+ "t_seminars" : 0 ,
263+ }
264+ if today < datetime (start_of_year ().year , 12 , 31 ):
244265 semester = "Fall"
245- semester_start = datetime (start_of_year ().year ,6 , 1 )
266+ semester_start = datetime (start_of_year ().year , 6 , 1 )
246267 else :
247268 semester = "Spring"
248- semester_start = datetime (start_of_year ().year + 1 ,1 , 1 )
269+ semester_start = datetime (start_of_year ().year + 1 , 1 , 1 )
249270
250271 # groups
251272 ldap_member = ldap_get_member (username )
252273 is_intro_member = ldap_is_intromember (ldap_member )
253274 is_active_member = ldap_is_active (ldap_member ) and not is_intro_member
254275
255276 is_on_coop = (
256- CurrentCoops .query .filter (
257- CurrentCoops .date_created > start_of_year (),
258- CurrentCoops .semester == semester ,
259- CurrentCoops .uid == username ,
260- ).first ()
261- is not None
277+ CurrentCoops .query .filter (
278+ CurrentCoops .date_created > start_of_year (),
279+ CurrentCoops .semester == semester ,
280+ CurrentCoops .uid == username ,
281+ ).first ()
282+ is not None
262283 )
263284
264285 passed_fall = (
265- FreshmanEvalData .query .filter (
266- FreshmanEvalData .freshman_eval_result == "Passed" ,
267- FreshmanEvalData .eval_date > start_of_year (),
268- FreshmanEvalData .uid == username ,
269- ).first ()
270- is not None
286+ FreshmanEvalData .query .filter (
287+ FreshmanEvalData .freshman_eval_result == "Passed" ,
288+ FreshmanEvalData .eval_date > start_of_year (),
289+ FreshmanEvalData .uid == username ,
290+ ).first ()
291+ is not None
271292 )
272293 eligibility_of_groups = (is_active_member and not is_on_coop ) or passed_fall
273294
0 commit comments