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
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
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
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
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)
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
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)
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)
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
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
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
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
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