Ejemplo n.º 1
0
def get_members_info():
    members = [m['uid'] for m in ldap_get_current_students()]
    member_list = []
    number_onfloor = 0

    for member_uid in members:
        uid = member_uid[0].decode('utf-8')
        name = ldap_get_name(uid)
        active = ldap_is_active(uid)
        onfloor = ldap_is_onfloor(uid)
        room_number = ldap_get_room_number(uid)
        room = room_number if room_number != "N/A" else ""
        hp = ldap_get_housing_points(uid)
        member_list.append({
            "uid": uid,
            "name": name,
            "active": active,
            "onfloor": onfloor,
            "room": room,
            "hp": hp
        })

        if onfloor:
            number_onfloor += 1

    return member_list, number_onfloor
Ejemplo n.º 2
0
def get_all_members():
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('api', action='retrieve technical seminar attendance list')

    members = ldap_get_current_students()

    named_members = [{
        'display': f.name,
        'value': f.id,
        'freshman': True
    } for f in FreshmanAccount.query.filter(
        FreshmanAccount.eval_date > datetime.now())]

    for m in members:
        uid = m['uid'][0].decode('utf-8')
        name = "{name} ({uid})".format(name=get_name(m), uid=uid)

        named_members.append({
            'display': name,
            'value': uid,
            'freshman': False
        })

    return jsonify({'members': named_members}), 200
Ejemplo n.º 3
0
def change_room_numbers(rmnumber):
    log = logger.new(request=request)

    username = request.headers.get('x-webauth-user')
    account = ldap_get_member(username)
    update = request.get_json()

    if not ldap_is_eval_director(account):
        return "must be eval director", 403

    # Get the current list of people living on-floor.
    current_students = ldap_get_current_students()

    # Set the new room number for each person in the list.

    for occupant in update["occupants"]:
        if occupant != "":
            account = ldap_get_member(occupant)
            account.roomNumber = rmnumber
            log.info('{} assigned to room {}'.format(occupant, rmnumber))
            ldap_set_active(account)
            log.info('{} marked as active because of room assignment'.format(
                occupant))
    # Delete any old occupants that are no longer in room.
        for old_occupant in [
                account for account in current_students
                if ldap_get_roomnumber(account) == str(rmnumber)
                and account.uid not in update["occupants"]
        ]:
            log.info('{} removed from room {}'.format(old_occupant.uid,
                                                      old_occupant.roomNumber))
            old_occupant.roomNumber = None

    return jsonify({"success": True}), 200
Ejemplo n.º 4
0
def get_occupants(rmnumber):

    # Get the current list of people living on-floor.
    current_students = ldap_get_current_students()

    # Find the current occupants of the specified room.
    occupants = [account.uid for account in current_students
                 if ldap_get_roomnumber(account) == str(rmnumber)]
    return jsonify({"room": rmnumber, "occupants": occupants}), 200
Ejemplo n.º 5
0
def new_year(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('Display New Year Page')

    if not ldap_is_eval_director(user_dict['account']):
        return "must be eval director", 403

    current_students = ldap_get_current_students()

    return render_template('new_year.html',
                           username=user_dict['username'],
                           current_students=current_students)
Ejemplo n.º 6
0
def clear_all_rooms(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)

    if not ldap_is_eval_director(user_dict['account']):
        return "must be eval director", 403
    # Get list of current students.
    current_students = ldap_get_current_students()

    # Find the current occupants and clear them.
    for occupant in current_students:
        log.info('{} removed from room {}'.format(occupant.uid, occupant.roomNumber))
        occupant.roomNumber = None
    return jsonify({"success": True}), 200
Ejemplo n.º 7
0
def display_member_management():
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('frontend', action='display member management')

    user_name = request.headers.get('x-webauth-user')

    if not ldap_is_eval_director(user_name) and not ldap_is_financial_director(
            user_name):
        return "must be eval director", 403

    members = [m['uid'] for m in ldap_get_current_students()]
    member_list, onfloor_number = get_members_info(members)

    freshmen = FreshmanAccount.query
    freshmen_list = []

    for freshman_user in freshmen:
        freshmen_list.append({
            "id":
            freshman_user.id,
            "name":
            freshman_user.name,
            "onfloor":
            freshman_user.onfloor_status,
            "room":
            "" if freshman_user.room_number is None else
            freshman_user.room_number,
            "eval_date":
            freshman_user.eval_date
        })

    settings = EvalSettings.query.first()
    if settings:
        lockdown = settings.site_lockdown
        intro_form = settings.intro_form_active
    else:
        lockdown = False
        intro_form = False

    return render_template(request,
                           "member_management.html",
                           username=user_name,
                           active=member_list,
                           num_current=len(member_list),
                           num_active=len(ldap_get_active_members()),
                           num_fresh=len(freshmen_list),
                           num_onfloor=onfloor_number,
                           freshmen=freshmen_list,
                           site_lockdown=lockdown,
                           intro_form=intro_form)
Ejemplo n.º 8
0
def new_year():
    log = logger.new(request=request)
    log.info('Display New Year Page')

    username = request.headers.get('x-webauth-user')
    account = ldap_get_member(username)

    if not ldap_is_eval_director(account):
        return "must be eval director", 403

    current_students = ldap_get_current_students()

    return render_template(request,
                           'new_year.html',
                           username=username,
                           current_students=current_students)
Ejemplo n.º 9
0
def clear_all_rooms():
    log = logger.new(request=request)

    username = request.headers.get('x-webauth-user')
    account = ldap_get_member(username)

    if not ldap_is_eval_director(account):
        return "must be eval director", 403
    # Get list of current students.
    current_students = ldap_get_current_students()

    # Find the current occupants and clear them.
    for occupant in current_students:
        log.info('{} removed from room {}'.format(occupant.uid,
                                                  occupant.roomNumber))
        occupant.roomNumber = None
    return jsonify({"success": True}), 200
Ejemplo n.º 10
0
def get_all_members(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('Retrieve Technical Seminar Attendance List')

    members = ldap_get_current_students()

    named_members = [{
        'display': f.name,
        'value': f.id,
        'freshman': True
    } for f in FreshmanAccount.query.filter(
        FreshmanAccount.eval_date > datetime.now())]

    for account in members:
        named_members.append({
            'display': account.displayName,
            'value': account.uid,
            'freshman': False
        })

    return jsonify({'members': named_members}), 200
Ejemplo n.º 11
0
def get_non_alumni(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('Retrieve Committee Meeting Attendance List')

    current_students = ldap_get_current_students()

    eligible_members = [{
        'display': f.name,
        'value': f.id,
        'freshman': True
    } for f in FreshmanAccount.query.filter(
        FreshmanAccount.eval_date > datetime.now())]

    for account in current_students:
        eligible_members.append({
            'display': account.displayName,
            'value': account.uid,
            'freshman': False
        })

    return jsonify({'members': eligible_members}), 200
Ejemplo n.º 12
0
def get_members_info():
    members = [account for account in ldap_get_current_students()]
    member_list = []

    for account in members:
        uid = account.uid
        name = account.cn
        active = ldap_is_active(account)
        onfloor = ldap_is_onfloor(account)
        room = ldap_get_roomnumber(account)
        hp = account.housingPoints
        member_list.append({
            "uid": uid,
            "name": name,
            "active": active,
            "onfloor": onfloor,
            "room": room,
            "hp": hp
        })

    return member_list
Ejemplo n.º 13
0
def get_housing_queue(is_eval_director=False):

    # Generate a dictionary of dictionaries where the UID is the key
    # and {'time': <datetime obj>} is the value. We are doing a left
    # outer join on the two tables to get a single result that has
    # both the member's UID and their on-floor datetime.
    in_queue = {entry.uid: {'time': entry.onfloor_granted} for entry
    in InHousingQueue.query.outerjoin(OnFloorStatusAssigned,
    OnFloorStatusAssigned.uid == InHousingQueue.uid)\
    .with_entities(InHousingQueue.uid, OnFloorStatusAssigned.onfloor_granted)\
    .all()}

    # Populate a list of dictionaries containing the name, username,
    # and on-floor datetime for each member who has on-floor status,
    # is not already assigned to a room and is in the above query.
    queue = [{
        "uid":
        account.uid,
        "name":
        account.cn,
        "points":
        account.housingPoints,
        "time":
        in_queue.get(account.uid, {}).get('time', datetime.now())
        or datetime.now(),
        "in_queue":
        account.uid in in_queue
    } for account in ldap_get_current_students()
             if ldap_is_onfloor(account) and (
                 is_eval_director or account.uid in in_queue)
             and account.roomNumber is None]

    # Sort based on time (ascending) and then points (decending).
    queue.sort(key=lambda m: m['time'])
    queue.sort(key=lambda m: m['points'], reverse=True)

    return queue