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)
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])
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])
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({})
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)))
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))
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])