def submit_seminar_attendance(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('Submit Technical Seminar Attendance') approved = ldap_is_eboard(user_dict['account']) post_data = request.get_json() seminar_name = post_data['name'] m_attendees = post_data['members'] f_attendees = post_data['freshmen'] timestamp = post_data['timestamp'] timestamp = datetime.strptime(timestamp, "%Y-%m-%d") seminar = TechnicalSeminar(seminar_name, timestamp, approved) db.session.add(seminar) db.session.flush() db.session.refresh(seminar) for m in m_attendees: log.info('Gave Attendance to {} for {}'.format(m, seminar_name)) db.session.add(MemberSeminarAttendance(m, seminar.id)) for f in f_attendees: log.info('Gave Attendance to freshman-{} for {}'.format( f, seminar_name)) db.session.add(FreshmanSeminarAttendance(f, seminar.id)) db.session.commit() return jsonify({"success": True}), 200
def alter_committee_attendance(cid): log = logger.new(request=request) log.info('Edit Committee Meeting Attendance') user_name = request.headers.get('x-webauth-user') account = ldap_get_member(user_name) if not ldap_is_eboard(account): return jsonify({"success": False, "error": "Not EBoard"}), 403 post_data = request.get_json() meeting_id = cid m_attendees = post_data['members'] f_attendees = post_data['freshmen'] FreshmanCommitteeAttendance.query.filter( FreshmanCommitteeAttendance.meeting_id == meeting_id).delete() MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.meeting_id == meeting_id).delete() for m in m_attendees: db.session.add(MemberCommitteeAttendance(m, meeting_id)) for f in f_attendees: db.session.add(FreshmanCommitteeAttendance(f, meeting_id)) db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def submit_committee_attendance(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) approved = ldap_is_eboard(user_dict['account']) post_data = request.get_json() committee = post_data['committee'] m_attendees = post_data['members'] f_attendees = post_data['freshmen'] timestamp = post_data['timestamp'] log.info('Submit {} Meeting Attendance'.format(committee)) timestamp = datetime.strptime(timestamp, "%Y-%m-%d") meeting = CommitteeMeeting(committee, timestamp, approved) db.session.add(meeting) db.session.flush() db.session.refresh(meeting) for m in m_attendees: log.info('Gave Attendance to {} for {}'.format(m, committee)) db.session.add(MemberCommitteeAttendance(m, meeting.id)) for f in f_attendees: log.info('Gave Attendance to freshman-{} for {}'.format(f, committee)) db.session.add(FreshmanCommitteeAttendance(f, meeting.id)) db.session.commit() return jsonify({"success": True}), 200
def render_template(request, template_name, **kwargs): user_name = request.headers.get('x-webauth-user') # TODO maybe use the webauth request decorator if EvalSettings.query.first() is None: db.session.add(EvalSettings()) db.session.flush() db.session.commit() lockdown = EvalSettings.query.first().site_lockdown is_active = ldap_is_active(user_name) is_alumni = ldap_is_alumni(user_name) is_eboard = ldap_is_eboard(user_name) is_financial = ldap_is_financial_director(user_name) is_eval = ldap_is_eval_director(user_name) is_intromember = ldap_is_intromember(user_name) if is_eval: lockdown = False return flask_render_template(template_name, lockdown=lockdown, is_active=is_active, is_alumni=is_alumni, is_eboard=is_eboard, is_eval_director=is_eval, is_financial_director=is_financial, is_intromember=is_intromember, **kwargs)
def get_ts_attendees(cid, user_dict=None): if request.method == 'GET': attendees = [{ "value": a.uid, "display": ldap_get_member(a.uid).displayName } for a in MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.meeting_id == cid).all()] for freshman in [{ "value": a.fid, "display": FreshmanAccount.query.filter( FreshmanAccount.id == a.fid).first().name } for a in FreshmanCommitteeAttendance.query.filter( FreshmanCommitteeAttendance.meeting_id == cid).all()]: attendees.append(freshman) return jsonify({"attendees": attendees}), 200 log = logger.new(request=request, auth_dict=user_dict) log.info('Delete Committee Meeting {}'.format(cid)) if not ldap_is_eboard(user_dict['account']): return jsonify({"success": False, "error": "Not EBoard"}), 403 FreshmanCommitteeAttendance.query.filter( FreshmanCommitteeAttendance.meeting_id == cid).delete() MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.meeting_id == cid).delete() CommitteeMeeting.query.filter(CommitteeMeeting.id == cid).delete() db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def alter_seminar_attendance(sid, user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('Edit Technical Seminar Attendance') if not ldap_is_eboard(user_dict['account']): return jsonify({"success": False, "error": "Not EBoard"}), 403 post_data = request.get_json() meeting_id = sid m_attendees = post_data['members'] f_attendees = post_data['freshmen'] FreshmanSeminarAttendance.query.filter( FreshmanSeminarAttendance.seminar_id == meeting_id).delete() MemberSeminarAttendance.query.filter( MemberSeminarAttendance.seminar_id == meeting_id).delete() for m in m_attendees: db.session.add(MemberSeminarAttendance(m, meeting_id)) for f in f_attendees: db.session.add(FreshmanSeminarAttendance(f, meeting_id)) db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def approve_cm(cid, user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('Approve Committee Meeting {} Attendance'.format(cid)) if not ldap_is_eboard(user_dict['account']): return jsonify({"success": False, "error": "Not EBoard"}), 403 CommitteeMeeting.query.filter( CommitteeMeeting.id == cid).first().approved = True db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def approve_ts(sid, user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('Approve Technical Seminar {} Attendance'.format(sid)) if not ldap_is_eboard(user_dict['account']): return jsonify({"success": False, "error": "Not EBoard"}), 403 TechnicalSeminar.query.filter( TechnicalSeminar.id == sid).first().approved = True db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def display_attendance_ts(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('frontend', action='display technical seminar attendance page') user_name = request.headers.get('x-webauth-user') if not ldap_is_eboard(user_name): return redirect("/dashboard") return render_template(request, 'attendance_ts.html', username=user_name, date=datetime.utcnow().strftime("%Y-%m-%d"))
def display_logs(): log = logger.new(request=request) log.info('Display Logs') username = request.headers.get('x-webauth-user') account = ldap_get_member(username) log.info(account.displayName) if not ldap_is_eboard(account) and not ldap_is_rtp(account): return "must be rtp or eboard", 403 logs = UserLog.query.all() return render_template(request, "logs.html", logs=logs, username=username)
def display_logs(user_dict=None): log = logger.new(request=request, auth_dict=user_dict) log.info('Display Logs') log.info(user_dict['account'].displayName) if not ldap_is_eboard(user_dict['account']) and not ldap_is_rtp( user_dict['account']): return "must be rtp or eboard", 403 logs = UserLog.query.all() return render_template("logs.html", logs=logs, username=user_dict['username'])
def wrapped_func(*args, **kwargs): user_name = request.headers.get('x-webauth-user') account = ldap_get_member(user_name) is_active = ldap_is_active(account) is_alumni = ldap_is_alumni(account) is_eboard = ldap_is_eboard(account) is_financial = ldap_is_financial_director(account) is_eval = ldap_is_eval_director(account) return func({"user_name": user_name, "is_active": is_active, "is_alumni": is_alumni, "is_eboard": is_eboard, "is_financial": is_financial, "is_eval": is_eval}, *args, **kwargs)
def approve_ts(sid): log = logger.new(request=request) log.info('Approve Technical Seminar {} Attendance'.format(sid)) user_name = request.headers.get('x-webauth-user') account = ldap_get_member(user_name) if not ldap_is_eboard(account): return jsonify({"success": False, "error": "Not EBoard"}), 403 TechnicalSeminar.query.filter( TechnicalSeminar.id == sid).first().approved = True db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def render_template(request, template_name, **kwargs): user_name = request.headers.get('x-webauth-user') # TODO maybe use the webauth request decorator if EvalSettings.query.first() is None: db.session.add(EvalSettings()) db.session.flush() db.session.commit() account = ldap_get_member(user_name) lockdown = EvalSettings.query.first().site_lockdown accepting_dues = EvalSettings.query.first().accept_dues_until > date.today() is_active = ldap_is_active(account) is_alumni = ldap_is_alumni(account) is_eboard = ldap_is_eboard(account) is_financial = ldap_is_financial_director(account) is_eval = ldap_is_eval_director(account) is_intromember = ldap_is_intromember(account) is_rtp = ldap_is_rtp(account) cm_review = len(CommitteeMeeting.query.filter( CommitteeMeeting.approved == False).all()) # pylint: disable=singleton-comparison ts_review = len(TechnicalSeminar.query.filter( TechnicalSeminar.approved == False).all()) # pylint: disable=singleton-comparison admin_warning = lockdown if is_eboard or is_rtp: lockdown = False return flask_render_template( template_name, lockdown=lockdown, admin_warning=admin_warning, accepting_dues=accepting_dues, is_active=is_active, is_alumni=is_alumni, is_eboard=is_eboard, is_eval_director=is_eval, is_financial_director=is_financial, is_intromember=is_intromember, is_rtp=is_rtp, pending_review=(cm_review + ts_review), **kwargs)
def render_template(template_name, user_dict=None, **kwargs): if EvalSettings.query.first() is None: db.session.add(EvalSettings()) db.session.flush() db.session.commit() lockdown = EvalSettings.query.first().site_lockdown accepting_dues = EvalSettings.query.first().accept_dues_until > date.today( ) is_active = ldap_is_active(user_dict['account']) is_alumni = ldap_is_alumni(user_dict['account']) is_eboard = ldap_is_eboard(user_dict['account']) is_financial = ldap_is_financial_director(user_dict['account']) is_eval = ldap_is_eval_director(user_dict['account']) is_intromember = ldap_is_intromember(user_dict['account']) is_rtp = ldap_is_rtp(user_dict['account']) cm_review = len( CommitteeMeeting.query.filter( CommitteeMeeting.approved == False).all()) # pylint: disable=singleton-comparison ts_review = len( TechnicalSeminar.query.filter( TechnicalSeminar.approved == False).all()) # pylint: disable=singleton-comparison admin_warning = lockdown if is_eboard or is_rtp: lockdown = False return flask_render_template(template_name, lockdown=lockdown, admin_warning=admin_warning, accepting_dues=accepting_dues, is_active=is_active, is_alumni=is_alumni, is_eboard=is_eboard, is_eval_director=is_eval, is_financial_director=is_financial, is_intromember=is_intromember, is_rtp=is_rtp, pending_review=(cm_review + ts_review), **kwargs)
def get_cm_attendees(sid): if request.method == 'GET': attendees = [{ "value": a.uid, "display": ldap_get_member(a.uid).displayName } for a in MemberSeminarAttendance.query.filter( MemberSeminarAttendance.seminar_id == sid).all()] for freshman in [{ "value": a.fid, "display": FreshmanAccount.query.filter( FreshmanAccount.id == a.fid).first().name } for a in FreshmanSeminarAttendance.query.filter( FreshmanSeminarAttendance.seminar_id == sid).all()]: attendees.append(freshman) return jsonify({"attendees": attendees}), 200 else: log = logger.new(request=request) log.info('Delete Technical Seminar {}'.format(sid)) user_name = request.headers.get('x-webauth-user') account = ldap_get_member(user_name) if not ldap_is_eboard(account): return jsonify({"success": False, "error": "Not EBoard"}), 403 FreshmanSeminarAttendance.query.filter( FreshmanSeminarAttendance.seminar_id == sid).delete() MemberSeminarAttendance.query.filter( MemberSeminarAttendance.seminar_id == sid).delete() TechnicalSeminar.query.filter(TechnicalSeminar.id == sid).delete() db.session.flush() db.session.commit() return jsonify({"success": True}), 200
def submit_seminar_attendance(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('api', action='submit technical seminar attendance') user_name = request.headers.get('x-webauth-user') if not ldap_is_eboard(user_name): return "must be eboard", 403 post_data = request.get_json() seminar_name = post_data['name'] m_attendees = post_data['members'] f_attendees = post_data['freshmen'] timestamp = post_data['timestamp'] timestamp = datetime.strptime(timestamp, "%Y-%m-%d") seminar = TechnicalSeminar(seminar_name, timestamp) db.session.add(seminar) db.session.flush() db.session.refresh(seminar) for m in m_attendees: logger.info('backend', action=("gave attendance to %s for %s" % (m, seminar_name))) db.session.add(MemberSeminarAttendance(m, seminar.id)) for f in f_attendees: logger.info('backend', action=("gave attendance to freshman-%s for %s" % (f, seminar_name))) db.session.add(FreshmanSeminarAttendance(f, seminar.id)) db.session.commit() return jsonify({"success": True}), 200
def submit_committee_attendance(): log = logger.new(user_name=request.headers.get("x-webauth-user"), request_id=str(uuid.uuid4())) log.info('api', action='submit committee meeting attendance') user_name = request.headers.get('x-webauth-user') if not ldap_is_eboard(user_name): return "must be eboard", 403 post_data = request.get_json() committee = post_data['committee'] m_attendees = post_data['members'] f_attendees = post_data['freshmen'] timestamp = post_data['timestamp'] timestamp = datetime.strptime(timestamp, "%Y-%m-%d") meeting = CommitteeMeeting(committee, timestamp) db.session.add(meeting) db.session.flush() db.session.refresh(meeting) for m in m_attendees: logger.info('backend', action=("gave attendance to %s for %s" % (m, committee))) db.session.add(MemberCommitteeAttendance(m, meeting.id)) for f in f_attendees: logger.info('backend', action=("gave attendance to freshman-%s for %s" % (f, committee))) db.session.add(FreshmanCommitteeAttendance(f, meeting.id)) db.session.commit() return jsonify({"success": True}), 200
def attendance_history(user_dict=None): def get_meeting_attendees(meeting_id): attendees = [ ldap_get_member(a.uid).displayName for a in MemberCommitteeAttendance.query.filter( MemberCommitteeAttendance.meeting_id == meeting_id).all() ] for freshman in [ a.fid for a in FreshmanCommitteeAttendance.query.filter( FreshmanCommitteeAttendance.meeting_id == meeting_id).all() ]: attendees.append( FreshmanAccount.query.filter( FreshmanAccount.id == freshman).first().name) return attendees def get_seminar_attendees(meeting_id): attendees = [ ldap_get_member(a.uid).displayName for a in MemberSeminarAttendance.query.filter( MemberSeminarAttendance.seminar_id == meeting_id).all() ] for freshman in [ a.fid for a in FreshmanSeminarAttendance.query.filter( FreshmanSeminarAttendance.seminar_id == meeting_id).all() ]: attendees.append( FreshmanAccount.query.filter( FreshmanAccount.id == freshman).first().name) return attendees log = logger.new(request=request, auth_dict=user_dict) if not ldap_is_eboard(user_dict['account']): return jsonify({"success": False, "error": "Not EBoard"}), 403 page = request.args.get('page', 1) log.info('View Past Attendance Submitions') offset = 0 if int(page) == 1 else ((int(page) - 1) * 10) limit = int(page) * 10 all_cm = [{ "id": m.id, "name": m.committee, "dt_obj": m.timestamp, "date": m.timestamp.strftime("%a %m/%d/%Y"), "attendees": get_meeting_attendees(m.id), "type": "cm" } for m in CommitteeMeeting.query.filter( CommitteeMeeting.timestamp > start_of_year(), CommitteeMeeting.approved).all()] all_ts = [{ "id": m.id, "name": m.name, "dt_obj": m.timestamp, "date": m.timestamp.strftime("%a %m/%d/%Y"), "attendees": get_seminar_attendees(m.id), "type": "ts" } for m in TechnicalSeminar.query.filter( TechnicalSeminar.timestamp > start_of_year(), TechnicalSeminar.approved).all()] pend_cm = [{ "id": m.id, "name": m.committee, "dt_obj": m.timestamp, "date": m.timestamp.strftime("%a %m/%d/%Y"), "attendees": get_meeting_attendees(m.id) } for m in CommitteeMeeting.query.filter( CommitteeMeeting.timestamp > start_of_year(), CommitteeMeeting.approved == False).all()] # pylint: disable=singleton-comparison pend_ts = [{ "id": m.id, "name": m.name, "dt_obj": m.timestamp, "date": m.timestamp.strftime("%a %m/%d/%Y"), "attendees": get_seminar_attendees(m.id) } for m in TechnicalSeminar.query.filter( TechnicalSeminar.timestamp > start_of_year(), TechnicalSeminar.approved == False).all()] # pylint: disable=singleton-comparison all_meetings = sorted((all_cm + all_ts), key=lambda k: k['dt_obj'], reverse=True)[offset:limit] if len(all_cm) % 10 != 0: total_pages = (int(len(all_cm) / 10) + 1) else: total_pages = (int(len(all_cm) / 10)) return render_template('attendance_history.html', username=user_dict['username'], history=all_meetings, pending_cm=pend_cm, pending_ts=pend_ts, num_pages=total_pages, current_page=int(page))