Skip to content

Commit e7b4913

Browse files
committed
Fix errors in gatekeep_status
1 parent 81aa4d3 commit e7b4913

File tree

1 file changed

+94
-1
lines changed

1 file changed

+94
-1
lines changed

conditional/util/member.py

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from datetime import datetime
22

3-
from conditional import gatekeep_status, start_of_year
3+
from conditional import start_of_year
44
from conditional.models.models import CommitteeMeeting
55
from conditional.models.models import CurrentCoops
66
from conditional.models.models import FreshmanEvalData
@@ -18,6 +18,20 @@
1818
from conditional.util.ldap import ldap_is_active
1919
from conditional.util.ldap import ldap_is_onfloor
2020

21+
from conditional.models.models import (
22+
CommitteeMeeting,
23+
CurrentCoops,
24+
FreshmanEvalData,
25+
HouseMeeting,
26+
MemberCommitteeAttendance,
27+
MemberHouseMeetingAttendance,
28+
MemberSeminarAttendance,
29+
TechnicalSeminar,
30+
UserLog,
31+
)
32+
33+
from .ldap import ldap_get_member, ldap_is_active, ldap_is_intromember
34+
2135

2236
@service_cache(maxsize=1024)
2337
def get_voting_members():
@@ -158,3 +172,82 @@ def req_cm(member):
158172
if co_op:
159173
return 15
160174
return 30
175+
176+
def gatekeep_status(username):
177+
if datetime.today() < datetime(start_of_year().year, 12, 31):
178+
semester = "Fall"
179+
semester_start = datetime(start_of_year().year,6,1)
180+
else:
181+
semester = "Spring"
182+
semester_start = datetime(start_of_year().year + 1,1,1)
183+
184+
# groups
185+
ldap_member = ldap_get_member(username)
186+
is_intro_member = ldap_is_intromember(ldap_member)
187+
is_active_member = ldap_is_active(ldap_member) and not is_intro_member
188+
189+
is_on_coop = (
190+
CurrentCoops.query.filter(
191+
CurrentCoops.date_created > start_of_year(),
192+
CurrentCoops.semester == semester,
193+
CurrentCoops.uid == username,
194+
).first()
195+
is not None
196+
)
197+
198+
passed_fall = (
199+
FreshmanEvalData.query.filter(
200+
FreshmanEvalData.freshman_eval_result == "Passed",
201+
FreshmanEvalData.eval_date > start_of_year(),
202+
FreshmanEvalData.uid == username,
203+
).first()
204+
is not None
205+
)
206+
eligibility_of_groups = (is_active_member and not is_on_coop) or passed_fall
207+
208+
# number of directorship meetings attended in the current semester
209+
d_meetings = (
210+
MemberCommitteeAttendance.query.join(
211+
CommitteeMeeting,
212+
MemberCommitteeAttendance.meeting_id == CommitteeMeeting.id,
213+
)
214+
.filter(
215+
MemberCommitteeAttendance.uid == username,
216+
CommitteeMeeting.approved is True,
217+
CommitteeMeeting.timestamp >= semester_start,
218+
)
219+
.count()
220+
)
221+
# number of technical seminars attended in the current semester
222+
t_seminars = (
223+
MemberSeminarAttendance.query.join(
224+
TechnicalSeminar,
225+
MemberSeminarAttendance.seminar_id == TechnicalSeminar.id,
226+
)
227+
.filter(
228+
MemberSeminarAttendance.uid == username,
229+
TechnicalSeminar.approved is True,
230+
TechnicalSeminar.timestamp >= semester_start,
231+
)
232+
.count()
233+
)
234+
# number of house meetings attended in the current semester
235+
h_meetings = (
236+
MemberHouseMeetingAttendance.query.join(
237+
HouseMeeting,
238+
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id,
239+
)
240+
.filter(
241+
MemberHouseMeetingAttendance.uid == username,
242+
HouseMeeting.date >= semester_start
243+
)
244+
.count()
245+
)
246+
result = eligibility_of_groups and (d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6)
247+
248+
return {
249+
"result": result,
250+
"h_meetings": h_meetings,
251+
"c_meetings": d_meetings,
252+
"t_seminars": t_seminars,
253+
}, 200

0 commit comments

Comments
 (0)