Esempio n. 1
0
def sections():
    app.logger.debug("Inside sections")
    headers = request.headers
    print(headers)
    sec_id = request.args.get('id')
    year = request.args.get('year')
    term = request.args.get('term')
    date = request.args.get(
        'date'
    )  # an optional parameter which, if given, will include attendance data for the date
    if date:
        date = util.parse_date(date)
    else:
        date = util.today()
    if not year:
        year = date.year
    if not term:
        term = util.get_term(date)
    if sec_id:
        sections = Section.query.filter_by(id=sec_id).all()
    else:
        sections = Section.query.filter_by(year=year, term=term).all()

    sections = SectionMgr.get_sections_with_roster_data(sections, date)
    return jsonify(sections)
Esempio n. 2
0
def roster_groups ():
    roster_id = request.form.get('rosterId')
    dt = request.form.get('date')  # mm/dd/yyyy format
    date = util.parse_date(dt)
    r = models.Roster.query.filter_by(id=roster_id).first_or_404()
    sec = models.Section.query.filter_by(id=r.section_id).first_or_404()
    # groups = group_generator.generate_groups(r, date)
    # TODO the attendance_before_gen flag needs to be an admin setting on the section
    # Under one scenario groups are generated before taking attendance and under the second scenario
    # attendance is done first so that we don't generate groups using absent students.
    groups = GroupGenerator().create_groups(r,sec.start_date,date, attendance_before_gen=False)
    db.session.commit()
    return jsonify([g.to_dict() for g in groups])
Esempio n. 3
0
def post_groups():
    json = request.get_json()
    sec_id = json.get('secId')
    dt = json.get('date')
    # Under one scenario groups are generated before taking attendance and under the second scenario
    # attendance is done first so that we don't generate groups using absent students.
    attendance_based = json.get('basedOnAttendance')
    sec = Section.query.filter_by(id=sec_id).first_or_404()
    r = sec.roster
    date = util.parse_date(dt)
    groups = GroupGenerator().create_groups(
        r, sec.start_date, date, attendance_before_gen=attendance_based)
    db.session.commit()
    return jsonify([g.to_dict() for g in groups])
Esempio n. 4
0
def roster_attendance ():
    roster_id = request.form.get('rosterId')
    names_edited = request.form.get('namesEdited')
    dt = request.form.get('date')  # mm/dd/yyyy format
    date = util.parse_date(dt)
    r = models.Roster.query.filter_by(id=roster_id).first_or_404()
    num_studs = len(list(r.students))
    if names_edited:
        name_edit_flags = [request.form.get('nameEditedFlag-' + str(i)) for i in range(num_studs)]
        names = [request.form.get('name-' + str(i)) for i in range(num_studs)]
        AttendanceMgr.update_student_names(r, name_edit_flags, names)
    statuses = [request.form.get('status-' + str(i)) for i in range(num_studs)]
    AttendanceMgr.update_attendance(r, date, statuses)

    db.session.commit()
    return jsonify({})
Esempio n. 5
0
def rosters_page():
    year = util.get_current_year()
    term = util.get_current_term()
    lab_num = request.args.get('lab_number')
    dt = request.args.get('date')  # mm/dd/yyyy format
    if not dt:
        date = util.today()
        dt = util.date_to_mdy(date)
    else:
        date = util.parse_date(dt)
        year = date.year
    sections = models.Section.query.filter_by(year=year, term=term).all()
    sec = models.Section.query.filter_by(year=year, term=term, number=lab_num).first()
    if not sec:
        # TODO set error message so that 404 indicates missing resource is the sections for term/year
        sec = models.Section.query.filter_by(year=year, term=term).first_or_404()
    r = models.Roster.query.filter_by(section_id=sec.id).first_or_404("Roster not found for lab {}.  You need to create it from spreadsheet in admin page".format(sec.number))
    students = r.sorted_students()
    AttendanceMgr.set_attendance_status(students, date)
    groups = GroupGenerator().get_existing_groups(r, date)
    return render_template('roster.html', title='Attendance', dt=dt, section=sec, sections=sections, groups=groups,
                           roster=r, students=students, num_students=len(list(r.students)))
Esempio n. 6
0
def rosters():
    year = request.args.get('year')
    term = request.args.get('term')
    number = request.args.get('number')
    date = request.args.get(
        'date'
    )  # an optional parameter which, if given, will include attendance data for the date
    if date:
        date = util.parse_date(date)
    else:
        date = util.today()
    if not year:
        year = date.year
    if not term:
        term = util.get_term(date)
    if not number:
        number = 1
    sec = Section.query.filter_by(year=year, term=term,
                                  number=number).first_or_404()
    roster = sec.roster
    students = roster.sorted_students()
    AttendanceMgr.set_attendance_status(students, date)
    return jsonify(sec.roster.to_dict(students))
Esempio n. 7
0
def get_groups():
    sec_id = request.args.get('secId')
    dt = request.args.get('date')
    format = request.args.get('format')
    sec = Section.query.filter_by(id=sec_id).first_or_404()
    r = sec.roster
    if dt:
        date = util.parse_date(dt)
    else:
        date = util.today()
    if format == 'csv':
        csv = GroupGenerator().get_groups_csv(
            r.id,
            date)  # list of csv strings where each holds students in a group
        filename = 'labgroups' + str(
            sec.number) + '_' + sec.title + '_' + date.strftime('%y%m%d' +
                                                                '.csv')
        return Response(
            csv,
            mimetype="text/csv",
            headers={"Content-Disposition": "attachment;filename=" + filename})
    else:
        groups = Group.query.filter_by(roster_id=r.id, date=date).all()
        return jsonify([g.to_dict() for g in groups])