|
1 | 1 | from datetime import datetime |
2 | 2 |
|
3 | | -from conditional import gatekeep_status, start_of_year |
| 3 | +from conditional import start_of_year |
4 | 4 | from conditional.models.models import CommitteeMeeting |
5 | 5 | from conditional.models.models import CurrentCoops |
6 | 6 | from conditional.models.models import FreshmanEvalData |
|
18 | 18 | from conditional.util.ldap import ldap_is_active |
19 | 19 | from conditional.util.ldap import ldap_is_onfloor |
20 | 20 |
|
| 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 | + |
21 | 35 |
|
22 | 36 | @service_cache(maxsize=1024) |
23 | 37 | def get_voting_members(): |
@@ -158,3 +172,82 @@ def req_cm(member): |
158 | 172 | if co_op: |
159 | 173 | return 15 |
160 | 174 | 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