Skip to content

Commit ffed487

Browse files
committed
improved gatekeep calculations
1 parent a3bb580 commit ffed487

File tree

2 files changed

+95
-1
lines changed

2 files changed

+95
-1
lines changed

conditional/blueprints/dashboard.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ def display_dashboard(user_dict=None):
3636
log.info('display dashboard')
3737

3838
# Get the list of voting members.
39-
can_vote = get_voting_members()
39+
40+
can_vote = get_gatekeep_passed()
4041

4142
data = {}
4243
data['username'] = user_dict['account'].uid

conditional/util/member.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
from sqlalchemy import func, or_
23

34
from conditional import start_of_year
45
from conditional.models.models import CommitteeMeeting
@@ -161,6 +162,98 @@ def req_cm(member):
161162
return 15
162163
return 30
163164

165+
def get_gatekeep_passed():
166+
if datetime.today() < datetime(start_of_year().year, 12, 31):
167+
semester = "Fall"
168+
semester_start = datetime(start_of_year().year,6,1)
169+
else:
170+
semester = "Spring"
171+
semester_start = datetime(start_of_year().year + 1,1,1)
172+
173+
active_members = set(ldap_get_active_members())
174+
intro_memberes = set(ldap_get_intro_members())
175+
176+
coop_members = CurrentCoops.query.filter(
177+
CurrentCoops.date_created > start_of_year(),
178+
CurrentCoops.semester == semester,
179+
).with_entities(
180+
func.array_agg(CurrentCoops.uid)
181+
).scalar()
182+
183+
# have to do this because if it's none then set constructor screams
184+
if coop_members == None:
185+
coop_members = set()
186+
else:
187+
coop_members = set(coop_members)
188+
189+
passed_fall_members = FreshmanEvalData.query.filter(
190+
FreshmanEvalData.freshman_eval_result == "Passed",
191+
FreshmanEvalData.eval_date > start_of_year(),
192+
).with_entities(
193+
func.array_agg(FreshmanEvalData.uid)
194+
).scalar()
195+
196+
if (passed_fall_members == None):
197+
passed_fall_members = set()
198+
else:
199+
passed_fall_members = set(passed_fall_members)
200+
201+
elligible_members = (active_members - intro_memberes - coop_members) | passed_fall_members
202+
203+
passing_dm = set(member.uid for member in MemberCommitteeAttendance.query.join(
204+
CommitteeMeeting,
205+
MemberCommitteeAttendance.meeting_id == CommitteeMeeting.id
206+
).with_entities(
207+
MemberCommitteeAttendance.uid,
208+
CommitteeMeeting.timestamp,
209+
CommitteeMeeting.approved,
210+
).filter(
211+
CommitteeMeeting.approved,
212+
CommitteeMeeting.timestamp >= semester_start
213+
).with_entities(
214+
MemberCommitteeAttendance.uid
215+
).group_by(
216+
MemberCommitteeAttendance.uid
217+
).having(
218+
func.count(MemberCommitteeAttendance.uid) >= 6
219+
).with_entities(
220+
MemberCommitteeAttendance.uid
221+
).all())
222+
223+
passing_ts = set(member.uid for member in MemberSeminarAttendance.query.join(
224+
TechnicalSeminar,
225+
MemberSeminarAttendance.seminar_id == TechnicalSeminar.id
226+
).filter(
227+
TechnicalSeminar.approved,
228+
TechnicalSeminar.timestamp >= semester_start
229+
).with_entities(
230+
MemberSeminarAttendance.uid
231+
).group_by(
232+
MemberSeminarAttendance.uid
233+
).having(
234+
func.count(MemberSeminarAttendance.uid) >= 2
235+
).all())
236+
237+
passing_hm = set(member.uid for member in MemberHouseMeetingAttendance.query.join(
238+
HouseMeeting,
239+
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id
240+
).filter(
241+
HouseMeeting.date >= semester_start, or_(
242+
MemberHouseMeetingAttendance.attendance_status == 'Attended',
243+
MemberHouseMeetingAttendance.attendance_status == 'Excused'
244+
)
245+
).with_entities(
246+
MemberHouseMeetingAttendance.uid
247+
).group_by(
248+
MemberHouseMeetingAttendance.uid
249+
).having(
250+
func.count(MemberHouseMeetingAttendance.uid) >= 2
251+
).all())
252+
253+
passing_reqs = passing_dm | passing_ts | passing_hm
254+
255+
return elligible_members & passing_reqs
256+
164257
def gatekeep_status(username):
165258
if datetime.today() < datetime(start_of_year().year, 12, 31):
166259
semester = "Fall"

0 commit comments

Comments
 (0)