示例#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
示例#2
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)
示例#3
0
def member_management_make_user_active(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)

    if not ldap_is_current_student(user_dict['account']) or ldap_is_active(user_dict['account']):
        return "must be current student and not active", 403

    ldap_set_active(user_dict['account'])
    log.info("Make user {} active".format(user_dict['username']))

    clear_members_cache()
    return jsonify({"success": True}), 200
示例#4
0
def edit_uid(uid, flask_request, username):
    log = logger.new(request=flask_request, auth_dict={'username': username})
    post_data = flask_request.get_json()
    account = ldap_get_member(uid)
    active_member = post_data['activeMember']

    current_account = ldap_get_member(username)
    if ldap_is_eval_director(current_account):
        room_number = post_data['roomNumber']
        onfloor_status = post_data['onfloorStatus']
        housing_points = post_data['housingPoints']
        log.info('Edit {} - Room: {} On-Floor: {} Points: {}'.format(
            uid,
            post_data['roomNumber'],
            post_data['onfloorStatus'],
            post_data['housingPoints']))

        ldap_set_roomnumber(account, room_number)
        if onfloor_status:
            # If a OnFloorStatusAssigned object exists, don't make another
            if not ldap_is_member_of_group(account, "onfloor"):
                db.session.add(OnFloorStatusAssigned(uid, datetime.now()))
                ldap_add_member_to_group(account, "onfloor")
        else:
            for ofs in OnFloorStatusAssigned.query.filter(OnFloorStatusAssigned.uid == uid):
                db.session.delete(ofs)
            db.session.flush()
            db.session.commit()

            if ldap_is_member_of_group(account, "onfloor"):
                ldap_remove_member_from_group(account, "onfloor")
        ldap_set_housingpoints(account, housing_points)

    # Only update if there's a diff
    log.info('Set {} Active: {}'.format(uid, active_member))
    if ldap_is_active(account) != active_member:
        if active_member:
            ldap_set_active(account)
        else:
            ldap_set_inactive(account)

        if active_member:
            db.session.add(SpringEval(uid))
        else:
            SpringEval.query.filter(
                SpringEval.uid == uid and
                SpringEval.active).update(
                {
                    'active': False
                })
        clear_members_cache()
示例#5
0
def member_management_make_user_active():
    log = logger.new(request=request)

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

    if not ldap_is_current_student(account) or ldap_is_active(account):
        return "must be current student and not active", 403

    ldap_set_active(account)
    log.info("Make user {} active".format(uid))

    clear_members_cache()
    return jsonify({"success": True}), 200
示例#6
0
def __get_ofm__():

    # check that everyone in onfloor has onfloorstatus
    onfloors = [
        uids['uid'][0].decode('utf-8') for uids in ldap_get_onfloor_members()
    ]

    ofm = [{
        'uid': m.uid,
        'time': m.onfloor_granted,
        'points': ldap_get_housing_points(m.uid)
    } for m in OnFloorStatusAssigned.query.all(
    ) if ldap_is_active(m.uid) or CurrentCoops.query.filter(
        CurrentCoops.uid == m.uid and CurrentCoops.active).first() is not None]

    # Add everyone who has a discrepancy in LDAP and OnFloorStatusAssigned
    for member in onfloors:
        if OnFloorStatusAssigned.query.filter(
                OnFloorStatusAssigned.uid == member).first() is None:
            ofsa = OnFloorStatusAssigned(member, datetime.min)
            active = ldap_is_active(ofsa.uid)
            coop = CurrentCoops.query.filter(
                CurrentCoops.uid == ofsa.uid).first()
            coop = coop != None and coop.active

            if active or coop:
                ofm.append({
                    'uid': ofsa.uid,
                    'time': ofsa.onfloor_granted,
                    'points': ldap_get_housing_points(ofsa.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)

    return ofm
示例#7
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)
示例#8
0
def get_housing_queue():
    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 = [m['uid'] for m in ofm if ldap_get_room_number(m['uid']) == "N/A" and ldap_is_current_student(m['uid'])]

    return queue
示例#9
0
def edit_uid(uid, user_name, post_data):
    active_member = post_data['activeMember']

    if ldap_is_eval_director(user_name):
        logger.info('backend',
                    action="edit %s room: %s onfloor: %s housepts %s" %
                    (uid, post_data['roomNumber'], post_data['onfloorStatus'],
                     post_data['housingPoints']))
        room_number = post_data['roomNumber']
        onfloor_status = post_data['onfloorStatus']
        housing_points = post_data['housingPoints']

        ldap_set_roomnumber(uid, room_number)
        if onfloor_status:
            # If a OnFloorStatusAssigned object exists, don't make another
            if not ldap_is_member_of_group(uid, "onfloor"):
                db.session.add(OnFloorStatusAssigned(uid, datetime.now()))
                ldap_add_member_to_group(uid, "onfloor")
        else:
            for ofs in OnFloorStatusAssigned.query.filter(
                    OnFloorStatusAssigned.uid == uid):
                db.session.delete(ofs)
            db.session.flush()
            db.session.commit()

            if ldap_is_member_of_group(uid, "onfloor"):
                ldap_remove_member_from_group(uid, "onfloor")
        ldap_set_housingpoints(uid, housing_points)

    # Only update if there's a diff
    logger.info('backend', action="edit %s active: %s" % (uid, active_member))
    if ldap_is_active(uid) != active_member:
        if active_member:
            ldap_set_active(uid)
        else:
            ldap_set_inactive(uid)

        if active_member:
            db.session.add(SpringEval(uid))
        else:
            SpringEval.query.filter(SpringEval.uid == uid
                                    and SpringEval.active).update(
                                        {'active': False})
        clear_active_members_cache()
示例#10
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)
示例#11
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)
示例#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
示例#13
0
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)
示例#14
0
def member_management_getuserinfo(uid, user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('Get {}\'s Information'.format(uid))

    if not ldap_is_eval_director(
            user_dict['account']) and not ldap_is_financial_director(
                user_dict['account']):
        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

    account = ldap_get_member(uid)

    if ldap_is_eval_director(ldap_get_member(user_dict['username'])):
        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': account.cn,
            'room_number': account.roomNumber,
            'onfloor_status': ldap_is_onfloor(account),
            'housing_points': account.housingPoints,
            'active_member': ldap_is_active(account),
            'missed_hm': hms_missed,
            'user': '******'
        }), 200

    return jsonify({
        'name': account.cn,
        'active_member': ldap_is_active(account),
        'user': '******'
    }), 200
示例#15
0
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
示例#16
0
def display_dashboard(user_dict=None):
    log = logger.new(request=request, auth_dict=user_dict)
    log.info('display dashboard')

    # Get the list of voting members.
    can_vote = get_voting_members()

    data = dict()
    data['username'] = user_dict['account'].uid
    data['active'] = ldap_is_active(user_dict['account'])
    data['bad_standing'] = ldap_is_bad_standing(user_dict['account'])
    data['onfloor'] = ldap_is_onfloor(user_dict['account'])
    data['voting'] = bool(user_dict['account'].uid in can_vote)

    data['voting_count'] = {
        "Voting Members": len(can_vote),
        "Active Members": len(ldap_get_active_members())
    }
    # freshman shit
    if ldap_is_intromember(user_dict['account']):
        data['freshman'] = get_freshman_data(user_dict['account'].uid)
    else:
        data['freshman'] = False

    spring = {}
    c_meetings = get_cm(user_dict['account'])
    spring['committee_meetings'] = len(c_meetings)
    spring['req_meetings'] = req_cm(user_dict['account'])
    h_meetings = [(m.meeting_id, m.attendance_status)
                  for m in get_hm(user_dict['account'])]
    spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"])
    eval_entry = SpringEval.query.filter(
        SpringEval.uid == user_dict['account'].uid,
        SpringEval.date_created > start_of_year(),
        SpringEval.active == True).first()  # pylint: disable=singleton-comparison
    if eval_entry is not None:
        spring['status'] = eval_entry.status
    else:
        spring['status'] = None

    data['spring'] = spring

    # only show housing if member has onfloor status
    if ldap_is_onfloor(user_dict['account']):
        housing = dict()
        housing['points'] = user_dict['account'].housingPoints
        housing['room'] = user_dict['account'].roomNumber
        housing['queue_pos'] = get_queue_position(user_dict['account'].uid)
    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_dict['account'].uid,
        MajorProject.date > start_of_year())]

    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_dict['account'].uid,
        Conditional.date_due > start_of_year())]
    data['conditionals'] = conditionals
    data['conditionals_len'] = len(conditionals)

    hm_attendance = [{
        'reason': m.excuse,
        'datetime': m.date
    } for m in MemberHouseMeetingAttendance.query.outerjoin(
        HouseMeeting, MemberHouseMeetingAttendance.meeting_id ==
        HouseMeeting.id).with_entities(
            MemberHouseMeetingAttendance.excuse, HouseMeeting.date).filter(
                MemberHouseMeetingAttendance.uid == user_dict['account'].uid,
                MemberHouseMeetingAttendance.attendance_status == "Absent",
                HouseMeeting.date > start_of_year())]

    data['cm_attendance'] = c_meetings
    data['cm_attendance_len'] = len(c_meetings)
    data['hm_attendance'] = hm_attendance
    data['hm_attendance_len'] = len(hm_attendance)

    return render_template('dashboard.html', **data)
示例#17
0
def member_management_edituser(uid):
    log = logger.new(user_name=request.headers.get("x-webauth-user"),
                     request_id=str(uuid.uuid4()))
    log.info('api', action='edit uid user')

    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

    post_data = request.get_json()

    if not uid.isdigit():
        active_member = post_data['activeMember']

        if ldap_is_eval_director(user_name):
            logger.info(
                'backend',
                action="edit %s room: %s onfloor: %s housepts %s" %
                (uid, post_data['roomNumber'], post_data['onfloorStatus'],
                 post_data['housingPoints']))
            room_number = post_data['roomNumber']
            onfloor_status = post_data['onfloorStatus']
            housing_points = post_data['housingPoints']

            ldap_set_roomnumber(uid, room_number)
            if onfloor_status:
                ldap_add_member_to_group(uid, "onfloor")
            else:
                ldap_remove_member_from_group(uid, "onfloor")
            ldap_set_housingpoints(uid, housing_points)

        # Only update if there's a diff
        logger.info('backend',
                    action="edit %s active: %s" % (uid, active_member))
        if ldap_is_active(uid) != active_member:
            if active_member:
                ldap_set_active(uid)
            else:
                ldap_set_inactive(uid)

            if active_member:
                db.session.add(SpringEval(uid))
            else:
                SpringEval.query.filter(SpringEval.uid == uid
                                        and SpringEval.active).update(
                                            {'active': False})
            clear_active_members_cache()
    else:
        logger.info(
            'backend',
            action="edit freshman account %s room: %s onfloor: %s eval_date: %s"
            % (uid, post_data['roomNumber'], post_data['onfloorStatus'],
               post_data['evalDate']))

        name = post_data['name']
        room_number = post_data['roomNumber']
        onfloor_status = post_data['onfloorStatus']
        eval_date = post_data['evalDate']

        FreshmanAccount.query.filter(FreshmanAccount.id == uid).update({
            'name':
            name,
            'eval_date':
            datetime.strptime(eval_date, "%Y-%m-%d"),
            'onfloor_status':
            onfloor_status,
            'room_number':
            room_number
        })

    db.session.flush()
    db.session.commit()
    return jsonify({"success": True}), 200