| 
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