def cadmin_exam_results(course_id, exam_id): """ View the results of an assessment """ course = Courses2.get_course(course_id) if not course: abort(404) exam = Exams.get_exam_struct(exam_id, course_id) if not exam: abort(404) if not int(exam['cid']) == int(course_id): flash("Assessment %s does not belong to this course." % int(exam_id)) return redirect(url_for('cadmin_top', course_id=course_id)) exam['start_date'] = int(date_from_py2js(exam['start'])) exam['end_date'] = int(date_from_py2js(exam['end'])) exam['start_hour'] = int(exam['start'].hour) exam['end_hour'] = int(exam['end'].hour) exam['start_minute'] = int(exam['start'].minute) exam['end_minute'] = int(exam['end'].minute) groups = [Groups.Group(g_id=g_id) for g_id in Groups.active_by_course(course_id)] results = {} uids = set([]) totals = {} for group in groups: results[group.id] = Exams.get_marks(group, exam_id) for user_id in results[group.id]: uids.add(user_id) if user_id not in totals: totals[user_id] = 0.0 for qt, val in results[group.id][user_id].iteritems(): totals[user_id] += val['score'] questions = Exams.get_qts_list(exam_id) users = {} for uid in uids: users[uid] = Users2.get_user(uid) return render_template( "cadmin_examresults.html", course=course, exam=exam, results=results, groups=groups, users=users, questions=questions, when=datetime.now().strftime("%H:%m, %a %d %b %Y"), totals=totals )
def cadmin_exam_results(course_id, exam_id): """ View the results of an assessment """ course = Courses2.get_course(course_id) if not course: abort(404) exam = Exams.get_exam_struct(exam_id, course_id) if not exam: abort(404) if not int(exam['cid']) == int(course_id): flash("Assessment %s does not belong to this course." % int(exam_id)) return redirect(url_for('cadmin_top', course_id=course_id)) exam['start_date'] = int(date_from_py2js(exam['start'])) exam['end_date'] = int(date_from_py2js(exam['end'])) exam['start_hour'] = int(exam['start'].hour) exam['end_hour'] = int(exam['end'].hour) exam['start_minute'] = int(exam['start'].minute) exam['end_minute'] = int(exam['end'].minute) groups = [ Groups.Group(g_id=g_id) for g_id in Groups.active_by_course(course_id) ] results = {} uids = set([]) totals = {} for group in groups: results[group.id] = Exams.get_marks(group, exam_id) for user_id in results[group.id]: uids.add(user_id) if user_id not in totals: totals[user_id] = 0.0 for qt, val in results[group.id][user_id].iteritems(): totals[user_id] += val['score'] questions = Exams.get_qts_list(exam_id) users = {} for uid in uids: users[uid] = Users2.get_user(uid) return render_template("cadmin_examresults.html", course=course, exam=exam, results=results, groups=groups, users=users, questions=questions, when=datetime.now().strftime("%H:%m, %a %d %b %Y"), totals=totals)
def exam_results_as_spreadsheet(course_id, group, exam_id): """ Export the assessment results as a XLSX spreadsheet """ course = Courses2.get_course(course_id) exam = Exams.get_exam_struct(exam_id, course_id) uids = set([]) totals = {} results = Exams.get_marks(group, exam_id) for user_id in results: uids.add(user_id) if user_id not in totals: totals[user_id] = 0.0 for qt, val in results[user_id].iteritems(): totals[user_id] += val['score'] questions = Exams.get_qts_list(exam_id) users = {} for uid in uids: users[uid] = Users2.get_user(uid) wb = Workbook() ws = wb.get_active_sheet() ws.title = "Results" ws.cell(row=1, column=0).value = course['name'] ws.cell(row=1, column=1).value = course['title'] ws.cell(row=2, column=0).value = "Assessment:" ws.cell(row=2, column=1).value = exam['title'] ws.cell(row=3, column=0).value = "Group:" ws.cell(row=3, column=1).value = group.name col = 5 qcount = 1 for _ in questions: ws.cell(row=4, column=col).value = "Q%s" % qcount qcount += 1 col += 1 ws.cell(row=4, column=col).value = "Total" row = 5 sortusers = users.keys() sortusers.sort(key=lambda us: users[us]['familyname']) for user_id in sortusers: result = results[user_id] ws.cell(row=row, column=0).value = users[user_id]['uname'] ws.cell(row=row, column=1).value = users[user_id]['student_id'] ws.cell(row=row, column=2).value = users[user_id]['familyname'] ws.cell(row=row, column=3).value = users[user_id]['givenname'] ws.cell(row=row, column=4).value = users[user_id]['email'] col = 5 for pos in questions: for qt in pos: if qt['id'] in result: ws.cell(row=row, column=col).value = result[qt['id']]['score'] col += 1 ws.cell(row=row, column=col).value = totals[user_id] row += 1 return save_virtual_workbook(wb)