Skip to content

Commit 7f22ae2

Browse files
committed
accounting for semesters
1 parent b4c4f89 commit 7f22ae2

File tree

1 file changed

+84
-23
lines changed

1 file changed

+84
-23
lines changed

conditional/__init__.py

Lines changed: 84 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ def start_of_year():
5858
# pylint: disable=C0413
5959
from .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
137140
app.register_blueprint(co_op_bp)
138141
app.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>")
170173
def 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

Comments
 (0)