Beispiel #1
0
def display_spring_evals(internal=False):
    log = logger.new(request=request)
    log.info('Display Membership Evaluations Listing')

    user_name = None
    if not internal:
        user_name = request.headers.get('x-webauth-user')

    active_members = [account for account in ldap_get_active_members()]

    sp_members = []
    for account in active_members:
        uid = account.uid
        spring_entry = SpringEval.query.filter(
            SpringEval.date_created > start_of_year(), SpringEval.uid == uid,
            SpringEval.active == True).first()  # pylint: disable=singleton-comparison

        if spring_entry is None:
            spring_entry = SpringEval(uid)
            db.session.add(spring_entry)
            db.session.flush()
            db.session.commit()
        elif spring_entry.status != "Pending" and internal:
            continue

        eval_data = None

        h_meetings = [m.meeting_id for m in get_hm(account, only_absent=True)]
        member = {
            'name':
            account.cn,
            'uid':
            uid,
            'status':
            spring_entry.status,
            'committee_meetings':
            len(get_cm(account)),
            'req_meetings':
            req_cm(account),
            'house_meetings_missed': [{
                "date":
                m.date.strftime("%Y-%m-%d"),
                "reason":
                MemberHouseMeetingAttendance.query.filter(
                    MemberHouseMeetingAttendance.uid == uid).filter(
                        MemberHouseMeetingAttendance.meeting_id ==
                        m.id).first().excuse
            } for m in HouseMeeting.query.filter(
                HouseMeeting.id.in_(h_meetings))],
            'major_projects': [{
                'name': p.name,
                'status': p.status,
                'description': p.description
            } for p in MajorProject.query.filter(
                MajorProject.date > start_of_year(), MajorProject.uid == uid)]
        }
        member['major_projects_len'] = len(member['major_projects'])
        member['major_projects_passed'] = [{
            'name': p.name,
            'status': p.status,
            'description': p.description
        } for p in MajorProject.query.filter(
            MajorProject.date > start_of_year(), MajorProject.status ==
            "Passed", MajorProject.uid == uid)]
        member['major_projects_passed_len'] = len(
            member['major_projects_passed'])
        member['major_project_passed'] = False
        for mp in member['major_projects']:
            if mp['status'] == "Passed":
                member['major_project_passed'] = True
                break

        if internal:
            member['housing_evals'] = eval_data
        sp_members.append(member)

    sp_members.sort(key=lambda x: x['committee_meetings'], reverse=True)
    sp_members.sort(key=lambda x: len(x['house_meetings_missed']))
    sp_members.sort(key=lambda x: len(
        [p for p in x['major_projects'] if p['status'] == "Passed"]),
                    reverse=True)
    # return names in 'first last (username)' format
    if internal:
        return sp_members

    return render_template(request,
                           'spring_evals.html',
                           username=user_name,
                           members=sp_members)
Beispiel #2
0
def display_dashboard(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('display dashboard')

    # Get the list of voting members.
    can_vote = get_voting_members()

    data = dict()
    data['username'] = user_dict['account'].uid
    data['active'] = ldap_is_active(user_dict['account'])
    data['bad_standing'] = ldap_is_bad_standing(user_dict['account'])
    data['onfloor'] = ldap_is_onfloor(user_dict['account'])
    data['voting'] = bool(user_dict['account'].uid in can_vote)

    data['voting_count'] = {
        "Voting Members": len(can_vote),
        "Active Members": len(ldap_get_active_members())
    }
    # freshman shit
    if ldap_is_intromember(user_dict['account']):
        data['freshman'] = get_freshman_data(user_dict['account'].uid)
    else:
        data['freshman'] = False

    spring = {}
    c_meetings = get_cm(user_dict['account'])
    spring['committee_meetings'] = len(c_meetings)
    spring['req_meetings'] = req_cm(user_dict['account'])
    h_meetings = [(m.meeting_id, m.attendance_status)
                  for m in get_hm(user_dict['account'])]
    spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"])
    eval_entry = SpringEval.query.filter(
        SpringEval.uid == user_dict['account'].uid,
        SpringEval.date_created > start_of_year(),
        SpringEval.active == True).first()  # pylint: disable=singleton-comparison
    if eval_entry is not None:
        spring['status'] = eval_entry.status
    else:
        spring['status'] = None

    data['spring'] = spring

    # only show housing if member has onfloor status
    if ldap_is_onfloor(user_dict['account']):
        housing = dict()
        housing['points'] = user_dict['account'].housingPoints
        housing['room'] = user_dict['account'].roomNumber
        housing['queue_pos'] = get_queue_position(user_dict['account'].uid)
    else:
        housing = None

    data['housing'] = housing

    data['major_projects'] = [{
        'id': p.id,
        'name': p.name,
        'status': p.status,
        'description': p.description
    } for p in MajorProject.query.filter(
        MajorProject.uid == user_dict['account'].uid,
        MajorProject.date > start_of_year())]

    data['major_projects_count'] = len(data['major_projects'])

    spring['mp_status'] = "Failed"
    for mp in data['major_projects']:
        if mp['status'] == "Pending":
            spring['mp_status'] = 'Pending'
            continue
        if mp['status'] == "Passed":
            spring['mp_status'] = 'Passed'
            break

    conditionals = [{
        'date_created': c.date_created,
        'date_due': c.date_due,
        'description': c.description,
        'status': c.status
    } for c in Conditional.query.filter(
        Conditional.uid == user_dict['account'].uid,
        Conditional.date_due > start_of_year())]
    data['conditionals'] = conditionals
    data['conditionals_len'] = len(conditionals)

    hm_attendance = [{
        'reason': m.excuse,
        'datetime': m.date
    } for m in MemberHouseMeetingAttendance.query.outerjoin(
        HouseMeeting, MemberHouseMeetingAttendance.meeting_id ==
        HouseMeeting.id).with_entities(
            MemberHouseMeetingAttendance.excuse, HouseMeeting.date).filter(
                MemberHouseMeetingAttendance.uid == user_dict['account'].uid,
                MemberHouseMeetingAttendance.attendance_status == "Absent",
                HouseMeeting.date > start_of_year())]

    data['cm_attendance'] = c_meetings
    data['cm_attendance_len'] = len(c_meetings)
    data['hm_attendance'] = hm_attendance
    data['hm_attendance_len'] = len(hm_attendance)

    return render_template('dashboard.html', **data)