Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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)
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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"))
Esempio n. 10
0
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)
Esempio n. 11
0
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'])
Esempio n. 12
0
    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)
Esempio n. 13
0
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
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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
Esempio n. 17
0
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
Esempio n. 18
0
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
Esempio n. 19
0
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))