def display_major_project(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display major project form') # get user data user_name = request.headers.get('x-webauth-user') major_projects = [{ 'username': p.uid, 'name': ldap_get_name(p.uid), 'proj_name': p.name, 'status': p.status, 'description': p.description, 'id': p.id } for p in MajorProject.query] major_projects.reverse() major_projects_len = len(major_projects) # return names in 'first last (username)' format return render_template(request, 'major_project_submission.html', major_projects=major_projects, major_projects_len=major_projects_len, username=user_name)
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 display_housing(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display housing') # get user data user_name = request.headers.get('x-webauth-user') housing = {} onfloors = [ uids['uid'][0].decode('utf-8') for uids in ldap_get_onfloor_members() ] onfloor_freshmen = FreshmanAccount.query.filter( FreshmanAccount.room_number is not None) room_list = set() for m in onfloors: room = ldap_get_room_number(m) if room in housing: housing[room].append(ldap_get_name(m)) else: housing[room] = [ldap_get_name(m)] room_list.add(room) for f in onfloor_freshmen: name = f.name room = str(f.room_number) if room in housing and room != "None": housing[room].append(name) room_list.add(room) elif room != "None": housing[room] = [name] room_list.add(room) # return names in 'first last (username)' format return render_template(request, 'housing.html', username=user_name, queue=get_queue_with_points(), housing=housing, room_list=sorted(list(room_list)))
def get_queue_with_points(): ofm = __get_ofm__() queue = [{ 'name': ldap_get_name(m['uid']), 'points': m['points'] } for m in ofm if ldap_get_room_number(m['uid']) == "N/A" and ldap_is_current_student(m['uid'])] return queue
def get_queue_with_points(): ofm = [ { 'uid': m.uid, 'time': m.onfloor_granted, 'points': ldap_get_housing_points(m.uid) } for m in models.OnFloorStatusAssigned.query.all() if ldap_is_active(m.uid)] # sort by housing points then by time in queue ofm.sort(key=lambda m: m['time']) ofm.sort(key=lambda m: m['points'], reverse=True) queue = [ { 'name': ldap_get_name(m['uid']), 'points': m['points'] } for m in ofm if ldap_get_room_number(m['uid']) == "N/A" and ldap_is_current_student(m['uid'])] return queue
def display_conditionals(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display conditional listing page') # get user data user_name = request.headers.get('x-webauth-user') conditionals = [{ 'name': ldap_get_name(c.uid), 'date_created': c.date_created, 'date_due': c.date_due, 'description': c.description, 'id': c.id } for c in Conditional.query.filter(Conditional.status == "Pending")] # return names in 'first last (username)' format return render_template(request, 'conditional.html', username=user_name, conditionals=conditionals, conditionals_len=len(conditionals))
def display_spring_evals(internal=False): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display membership evaluations listing') def get_cm_count(member_id): return len([a for a in MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.uid == member_id)]) user_name = None if not internal: user_name = request.headers.get('x-webauth-user') members = [m['uid'] for m in ldap_get_active_members()] sp_members = [] for member_uid in members: uid = member_uid[0].decode('utf-8') print(uid) spring_entry = SpringEval.query.filter( SpringEval.uid == uid and SpringEval.active).first() if spring_entry is None: spring_entry = SpringEval(uid) db.session.add(spring_entry) db.session.flush() db.session.commit() # something bad happened to get here print("User did not have existing spring eval data") elif spring_entry.status != "Pending": continue eval_data = None h_meetings = [m.meeting_id for m in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == uid ).filter( MemberHouseMeetingAttendance.attendance_status == "Absent" )] member = { 'name': ldap_get_name(uid), 'uid': uid, 'status': spring_entry.status, 'committee_meetings': get_cm_count(uid), '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.uid == uid)] } member['major_projects_len'] = len(member['major_projects']) 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 else: return render_template(request, 'spring_evals.html', username=user_name, members=sp_members)
def clear_user_cache(username): ldap_get_name(username).cache_clear()
def member_management_getuserinfo(uid): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('api', action='retrieve user info') 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 or financial director", 403 acct = None if uid.isnumeric(): acct = FreshmanAccount.query.filter(FreshmanAccount.id == uid).first() # missed hm def get_hm_date(hm_id): return HouseMeeting.query.filter( HouseMeeting.id == hm_id). \ first().date.strftime("%Y-%m-%d") # if fid if acct: missed_hm = [{ 'date': get_hm_date(hma.meeting_id), 'id': hma.meeting_id, 'excuse': hma.excuse, 'status': hma.attendance_status } for hma in FreshmanHouseMeetingAttendance.query.filter( FreshmanHouseMeetingAttendance.fid == acct.id and ( FreshmanHouseMeetingAttendance.attendance_status != attendance_enum.Attended))] hms_missed = [] for hm in missed_hm: if hm['status'] != "Attended": hms_missed.append(hm) return jsonify({ 'id': acct.id, 'name': acct.name, 'eval_date': acct.eval_date.strftime("%Y-%m-%d"), 'missed_hm': hms_missed, 'onfloor_status': acct.onfloor_status, 'room_number': acct.room_number, 'sig_missed': acct.signatures_missed }), 200 if ldap_is_eval_director(user_name): missed_hm = [{ 'date': get_hm_date(hma.meeting_id), 'id': hma.meeting_id, 'excuse': hma.excuse, 'status': hma.attendance_status } for hma in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == uid and ( MemberHouseMeetingAttendance.attendance_status != attendance_enum.Attended))] hms_missed = [] for hm in missed_hm: if hm['status'] != "Attended": hms_missed.append(hm) return jsonify({ 'name': ldap_get_name(uid), 'room_number': ldap_get_room_number(uid), 'onfloor_status': ldap_is_onfloor(uid), 'housing_points': ldap_get_housing_points(uid), 'active_member': ldap_is_active(uid), 'missed_hm': hms_missed, 'user': '******' }), 200 else: return jsonify({ 'name': ldap_get_name(uid), 'active_member': ldap_is_active(uid), 'user': '******' }), 200
def display_intro_evals(internal=False): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display intro evals listing') # get user data def get_uid_cm_count(member_id): return len([a for a in MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.uid == member_id)]) def get_fid_cm_count(member_id): return len([a for a in FreshmanCommitteeAttendance.query.filter( FreshmanCommitteeAttendance.fid == member_id)]) user_name = None if not internal: user_name = request.headers.get('x-webauth-user') members = [m['uid'] for m in ldap_get_intro_members()] ie_members = [] # freshmen who don't have accounts fids = [f for f in FreshmanAccount.query.filter( FreshmanAccount.eval_date > datetime.now())] for fid in fids: h_meetings = [m.meeting_id for m in FreshmanHouseMeetingAttendance.query.filter( FreshmanHouseMeetingAttendance.fid == fid.id ).filter( FreshmanHouseMeetingAttendance.attendance_status == "Absent" )] if fid.signatures_missed is None: signatures_missed = -1 else: signatures_missed = fid.signatures_missed freshman = { 'name': fid.name, 'uid': fid.id, 'eval_date': fid.eval_date.strftime("%Y-%m-%d"), 'signatures_missed': signatures_missed, 'committee_meetings': get_fid_cm_count(fid.id), 'committee_meetings_passed': get_fid_cm_count(fid.id) >= 10, 'house_meetings_missed': [ { "date": m.date.strftime("%Y-%m-%d"), "reason": FreshmanHouseMeetingAttendance.query.filter( FreshmanHouseMeetingAttendance.fid == fid.id).filter( FreshmanHouseMeetingAttendance.meeting_id == m.id).first().excuse } for m in HouseMeeting.query.filter( HouseMeeting.id.in_(h_meetings) ) ], 'technical_seminars': [s.name for s in TechnicalSeminar.query.filter( TechnicalSeminar.id.in_( [a.seminar_id for a in FreshmanSeminarAttendance.query.filter( FreshmanSeminarAttendance.fid == fid.id)] )) ], 'social_events': '', 'freshman_project': "Pending", 'comments': "", 'ldap_account': False, 'status': "Pending" } ie_members.append(freshman) # freshmen who have accounts for member_uid in members: uid = member_uid[0].decode('utf-8') freshman_data = FreshmanEvalData.query.filter( FreshmanEvalData.uid == uid).first() if freshman_data is None: continue # Add continue for if freshman_data.status != Pending h_meetings = [m.meeting_id for m in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == uid ).filter( MemberHouseMeetingAttendance.attendance_status == "Absent" )] member = { 'name': ldap_get_name(uid), 'uid': uid, 'eval_date': freshman_data.eval_date.strftime("%Y-%m-%d"), 'signatures_missed': freshman_data.signatures_missed, 'committee_meetings': get_uid_cm_count(uid), 'committee_meetings_passed': get_uid_cm_count(uid) >= 10, '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) ) ], 'technical_seminars': [s.name for s in TechnicalSeminar.query.filter( TechnicalSeminar.id.in_( [a.seminar_id for a in MemberSeminarAttendance.query.filter( MemberSeminarAttendance.uid == uid)] )) ], 'social_events': freshman_data.social_events, 'freshman_project': freshman_data.freshman_project, 'comments': freshman_data.other_notes, 'ldap_account': True, 'status': freshman_data.freshman_eval_result } ie_members.append(member) ie_members.sort(key=lambda x: x['freshman_project'] == "Passed") ie_members.sort(key=lambda x: len(x['house_meetings_missed'])) ie_members.sort(key=lambda x: x['committee_meetings'], reverse=True) ie_members.sort(key=lambda x: x['signatures_missed']) if internal: return ie_members else: # return names in 'first last (username)' format return render_template(request, 'intro_evals.html', username=user_name, members=ie_members)
def display_dashboard(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display dashboard') # get user data user_name = request.headers.get('x-webauth-user') can_vote = get_voting_members() data = dict() data['username'] = user_name data['name'] = ldap_get_name(user_name) # Member Status data['active'] = ldap_is_active(user_name) # On-Floor Status data['onfloor'] = ldap_is_onfloor(user_name) # Voting Status data['voting'] = bool(user_name in can_vote) # freshman shit if ldap_is_intromember(user_name): data['freshman'] = get_freshman_data(user_name) else: data['freshman'] = False spring = {} c_meetings = [ m.meeting_id for m in MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.uid == user_name) ] spring['committee_meetings'] = len(c_meetings) h_meetings = [(m.meeting_id, m.attendance_status) for m in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == user_name)] spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"]) data['spring'] = spring # only show housing if member has onfloor status if ldap_is_onfloor(user_name): housing = dict() housing['points'] = ldap_get_housing_points(user_name) housing['room'] = ldap_get_room_number(user_name) if housing['room'] == "N/A": housing['queue_pos'] = "%s / %s" % (get_queue_position(user_name), get_queue_length()) else: housing['queue_pos'] = "N/A" 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_name)] 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_name)] data['conditionals'] = conditionals data['conditionals_len'] = len(conditionals) cm_attendance = [{ 'type': m.committee, 'datetime': m.timestamp.date() } for m in CommitteeMeeting.query.filter( CommitteeMeeting.id.in_(c_meetings))] hm_attendance = [{ 'reason': m.excuse, 'datetime': HouseMeeting.query.filter(HouseMeeting.id == m.meeting_id).first().date } for m in MemberHouseMeetingAttendance.query.filter( MemberHouseMeetingAttendance.uid == user_name).filter( MemberHouseMeetingAttendance.attendance_status == "Absent")] data['cm_attendance'] = cm_attendance data['cm_attendance_len'] = len(cm_attendance) data['hm_attendance'] = hm_attendance data['hm_attendance_len'] = len(hm_attendance) return render_template(request, 'dashboard.html', **data)