def test_course_type_ordering(self): course_type_1 = mommy.make(CourseType, order=1) course_type_2 = mommy.make(CourseType, order=2) semester = mommy.make(Semester) course_1 = mommy.make(Course, semester=semester, type=course_type_1, state='published', _participant_count=2, _voter_count=2) course_2 = mommy.make(Course, semester=semester, type=course_type_2, state='published', _participant_count=2, _voter_count=2) questionnaire = mommy.make(Questionnaire) question = mommy.make(Question, type=Question.LIKERT, questionnaire=questionnaire) course_1.general_contribution.questionnaires.set([questionnaire]) mommy.make(RatingAnswerCounter, question=question, contribution=course_1.general_contribution, answer=3, count=2) course_2.general_contribution.questionnaires.set([questionnaire]) mommy.make(RatingAnswerCounter, question=question, contribution=course_2.general_contribution, answer=3, count=2) binary_content = BytesIO() ExcelExporter(semester).export(binary_content, [[course_type_1.id, course_type_2.id]], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], course_1.name) self.assertEqual(workbook.sheets()[0].row_values(0)[2], course_2.name) course_type_2.order = 0 course_type_2.save() binary_content = BytesIO() ExcelExporter(semester).export(binary_content, [[course_type_1.id, course_type_2.id]], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], course_2.name) self.assertEqual(workbook.sheets()[0].row_values(0)[2], course_1.name)
def test_view_excel_file_sorted(self): semester = mommy.make(Semester) course_type = mommy.make(CourseType) course1 = mommy.make(Course, state='published', type=course_type, name_de='A - Course1', name_en='B - Course1', semester=semester) course2 = mommy.make(Course, state='published', type=course_type, name_de='B - Course2', name_en='A - Course2', semester=semester) content_de = BytesIO() with translation.override("de"): ExcelExporter(semester).export(content_de, [[course_type.id]], True, True) content_en = BytesIO() with translation.override("en"): ExcelExporter(semester).export(content_en, [[course_type.id]], True, True) content_de.seek(0) content_en.seek(0) # Load responses as Excel files and check for correct sorting workbook = xlrd.open_workbook(file_contents=content_de.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], "A - Course1") self.assertEqual(workbook.sheets()[0].row_values(0)[2], "B - Course2") workbook = xlrd.open_workbook(file_contents=content_en.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], "A - Course2") self.assertEqual(workbook.sheets()[0].row_values(0)[2], "B - Course1")
def test_view_excel_file_sorted(self): semester = baker.make(Semester) course_type = baker.make(CourseType) degree = baker.make(Degree) baker.make(Evaluation, state='published', course=baker.make(Course, degrees=[degree], type=course_type, semester=semester, name_de="A", name_en="B"), name_de='Evaluation1', name_en='Evaluation1') baker.make(Evaluation, state='published', course=baker.make(Course, degrees=[degree], type=course_type, semester=semester, name_de="B", name_en="A"), name_de='Evaluation2', name_en='Evaluation2') content_de = BytesIO() with translation.override("de"): ExcelExporter().export(content_de, [semester], [([degree.id], [course_type.id])], True, True) content_en = BytesIO() with translation.override("en"): ExcelExporter().export(content_en, [semester], [([degree.id], [course_type.id])], True, True) content_de.seek(0) content_en.seek(0) # Load responses as Excel files and check for correct sorting workbook = xlrd.open_workbook(file_contents=content_de.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], "A – Evaluation1\n") self.assertEqual(workbook.sheets()[0].row_values(0)[2], "B – Evaluation2\n") workbook = xlrd.open_workbook(file_contents=content_en.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], "A – Evaluation2\n") self.assertEqual(workbook.sheets()[0].row_values(0)[2], "B – Evaluation1\n")
def test_grade_color_calculation(self): exporter = ExcelExporter(Semester()) self.assertEqual(exporter.STEP, 0.2) self.assertEqual(exporter.normalize_number(1.94999999999), 1.8) # self.assertEqual(exporter.normalize_number(1.95), 2.0) # floats ftw self.assertEqual(exporter.normalize_number(1.95000000001), 2.0) self.assertEqual(exporter.normalize_number(1.99999999999), 2.0) self.assertEqual(exporter.normalize_number(2.0), 2.0) self.assertEqual(exporter.normalize_number(2.00000000001), 2.0) self.assertEqual(exporter.normalize_number(2.1), 2.0) self.assertEqual(exporter.normalize_number(2.149999999999), 2.0) # self.assertEqual(exporter.normalize_number(2.15), 2.2) # floats again self.assertEqual(exporter.normalize_number(2.150000000001), 2.2) self.assertEqual(exporter.normalize_number(2.8), 2.8)
def semester_export(request, semester_id): semester = get_object_or_404(Semester, id=semester_id) filename = "Evaluation-%s-%s.xls" % (semester.name, get_language()) response = HttpResponse(mimetype="application/vnd.ms-excel") response["Content-Disposition"] = "attachment; filename=\"%s\"" % filename exporter = ExcelExporter(semester) if 'all' in request.GET: exporter.export(response, True) else: exporter.export(response) return response
def semester_export(request, semester_id): semester = get_object_or_404(Semester, id=semester_id) ExportSheetFormset = formset_factory(form=ExportSheetForm, can_delete=True, extra=0, min_num=1, validate_min=True) formset = ExportSheetFormset(request.POST or None, form_kwargs={'semester': semester}) if formset.is_valid(): ignore_not_enough_answers = request.POST.get( 'ignore_not_enough_answers') == 'on' include_unpublished = request.POST.get('include_unpublished') == 'on' course_types_list = [] for form in formset: if 'selected_course_types' in form.cleaned_data: course_types_list.append( form.cleaned_data['selected_course_types']) filename = "Evaluation-%s-%s.xls" % (semester.name, get_language()) response = HttpResponse(content_type="application/vnd.ms-excel") response[ "Content-Disposition"] = "attachment; filename=\"%s\"" % filename ExcelExporter(semester).export(response, course_types_list, ignore_not_enough_answers, include_unpublished) return response else: return render(request, "staff_semester_export.html", dict(semester=semester, formset=formset))
def test_course_type_ordering(self): degree = baker.make(Degree) course_type_1 = baker.make(CourseType, order=1) course_type_2 = baker.make(CourseType, order=2) semester = baker.make(Semester) evaluation_1 = baker.make(Evaluation, course=baker.make(Course, semester=semester, degrees=[degree], type=course_type_1), state='published', _participant_count=2, _voter_count=2 ) evaluation_2 = baker.make(Evaluation, course=baker.make(Course, semester=semester, degrees=[degree], type=course_type_2), state='published', _participant_count=2, _voter_count=2 ) questionnaire = baker.make(Questionnaire) question = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire) evaluation_1.general_contribution.questionnaires.set([questionnaire]) baker.make(RatingAnswerCounter, question=question, contribution=evaluation_1.general_contribution, answer=3, count=2) evaluation_2.general_contribution.questionnaires.set([questionnaire]) baker.make(RatingAnswerCounter, question=question, contribution=evaluation_2.general_contribution, answer=3, count=2) binary_content = BytesIO() ExcelExporter().export(binary_content, [semester], [([degree.id], [course_type_1.id, course_type_2.id])], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], evaluation_1.full_name + "\n") self.assertEqual(workbook.sheets()[0].row_values(0)[2], evaluation_2.full_name + "\n") course_type_2.order = 0 course_type_2.save() binary_content = BytesIO() ExcelExporter().export(binary_content, [semester], [([degree.id], [course_type_1.id, course_type_2.id])], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(0)[1], evaluation_2.full_name + "\n") self.assertEqual(workbook.sheets()[0].row_values(0)[2], evaluation_1.full_name + "\n")
def test_grade_color_calculation(self): exporter = ExcelExporter(Semester()) self.assertEqual(exporter.STEP, 0.2) self.assertEqual(exporter.normalize_number(1.94999999999), 1.8) #self.assertEqual(exporter.normalize_number(1.95), 2.0) # floats ftw self.assertEqual(exporter.normalize_number(1.95000000001), 2.0) self.assertEqual(exporter.normalize_number(1.99999999999), 2.0) self.assertEqual(exporter.normalize_number(2.0), 2.0) self.assertEqual(exporter.normalize_number(2.00000000001), 2.0) self.assertEqual(exporter.normalize_number(2.1), 2.0) self.assertEqual(exporter.normalize_number(2.149999999999), 2.0) #self.assertEqual(exporter.normalize_number(2.15), 2.2) # floats again self.assertEqual(exporter.normalize_number(2.150000000001), 2.2) self.assertEqual(exporter.normalize_number(2.8), 2.8)
def export_contributor_results(contributor): filename = "Evaluation_{}.xls".format(contributor.full_name) response = FileResponse(filename, content_type="application/vnd.ms-excel") ExcelExporter().export(response, Semester.objects.all(), [(Degree.objects.all(), CourseType.objects.all())], include_not_enough_voters=True, include_unpublished=False, contributor=contributor) return response
def test_heading_question_filtering(self): degree = baker.make(Degree) evaluation = baker.make(Evaluation, course=baker.make(Course, degrees=[degree]), state='published', _participant_count=2, _voter_count=2) contributor = baker.make(UserProfile) evaluation.general_contribution.questionnaires.set( [baker.make(Questionnaire)]) questionnaire = baker.make(Questionnaire) baker.make(Question, type=Question.HEADING, questionnaire=questionnaire, order=0) heading_question = baker.make(Question, type=Question.HEADING, questionnaire=questionnaire, order=1) likert_question = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire, order=2) baker.make(Question, type=Question.HEADING, questionnaire=questionnaire, order=3) contribution = baker.make(Contribution, evaluation=evaluation, questionnaires=[questionnaire], contributor=contributor) baker.make(RatingAnswerCounter, question=likert_question, contribution=contribution, answer=3, count=100) binary_content = BytesIO() ExcelExporter().export( binary_content, [evaluation.course.semester], [([ course_degree.id for course_degree in evaluation.course.degrees.all() ], [evaluation.course.type.id])], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(4)[0], questionnaire.name) self.assertEqual(workbook.sheets()[0].row_values(5)[0], heading_question.text) self.assertEqual(workbook.sheets()[0].row_values(6)[0], likert_question.text) self.assertEqual(workbook.sheets()[0].row_values(7)[0], "")
def test_questionnaire_ordering(self): degree = baker.make(Degree) evaluation = baker.make( Evaluation, course=baker.make(Course, degrees=[degree]), state='published', _participant_count=2, _voter_count=2 ) questionnaire_1 = baker.make(Questionnaire, order=1, type=Questionnaire.Type.TOP) questionnaire_2 = baker.make(Questionnaire, order=4, type=Questionnaire.Type.TOP) questionnaire_3 = baker.make(Questionnaire, order=1, type=Questionnaire.Type.BOTTOM) questionnaire_4 = baker.make(Questionnaire, order=4, type=Questionnaire.Type.BOTTOM) question_1 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_1) question_2 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_2) question_3 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_3) question_4 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_4) evaluation.general_contribution.questionnaires.set([questionnaire_1, questionnaire_2, questionnaire_3, questionnaire_4]) baker.make(RatingAnswerCounter, question=question_1, contribution=evaluation.general_contribution, answer=3, count=100) baker.make(RatingAnswerCounter, question=question_2, contribution=evaluation.general_contribution, answer=3, count=100) baker.make(RatingAnswerCounter, question=question_3, contribution=evaluation.general_contribution, answer=3, count=100) baker.make(RatingAnswerCounter, question=question_4, contribution=evaluation.general_contribution, answer=3, count=100) binary_content = BytesIO() ExcelExporter().export( binary_content, [evaluation.course.semester], [([course_degree.id for course_degree in evaluation.course.degrees.all()], [evaluation.course.type.id])], True, True ) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(4)[0], questionnaire_1.name) self.assertEqual(workbook.sheets()[0].row_values(5)[0], question_1.text) self.assertEqual(workbook.sheets()[0].row_values(7)[0], questionnaire_2.name) self.assertEqual(workbook.sheets()[0].row_values(8)[0], question_2.text) self.assertEqual(workbook.sheets()[0].row_values(10)[0], questionnaire_3.name) self.assertEqual(workbook.sheets()[0].row_values(11)[0], question_3.text) self.assertEqual(workbook.sheets()[0].row_values(13)[0], questionnaire_4.name) self.assertEqual(workbook.sheets()[0].row_values(14)[0], question_4.text)
def test_heading_question_filtering(self): course = mommy.make(Course, state='published', _participant_count=2, _voter_count=2) contributor = mommy.make(UserProfile) course.general_contribution.questionnaires.set( [mommy.make(Questionnaire)]) questionnaire = mommy.make(Questionnaire) mommy.make(Question, type="H", questionnaire=questionnaire, order=0) heading_question = mommy.make(Question, type="H", questionnaire=questionnaire, order=1) likert_question = mommy.make(Question, type="L", questionnaire=questionnaire, order=2) mommy.make(Question, type="H", questionnaire=questionnaire, order=3) contribution = mommy.make(Contribution, course=course, questionnaires=[questionnaire], contributor=contributor) mommy.make(RatingAnswerCounter, question=likert_question, contribution=contribution, answer=3, count=100) binary_content = BytesIO() ExcelExporter(course.semester).export(binary_content, [[course.type.id]], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(2)[0], questionnaire.name) self.assertEqual(workbook.sheets()[0].row_values(3)[0], heading_question.text) self.assertEqual(workbook.sheets()[0].row_values(4)[0], likert_question.text) self.assertEqual(workbook.sheets()[0].row_values(5)[0], "")
def test_questionnaire_ordering(self): course = mommy.make(Course, state='published', _participant_count=2, _voter_count=2) questionnaire_1 = mommy.make(Questionnaire, order=1, type=Questionnaire.TOP) questionnaire_2 = mommy.make(Questionnaire, order=4, type=Questionnaire.TOP) questionnaire_3 = mommy.make(Questionnaire, order=1, type=Questionnaire.BOTTOM) questionnaire_4 = mommy.make(Questionnaire, order=4, type=Questionnaire.BOTTOM) question_1 = mommy.make(Question, type=Question.LIKERT, questionnaire=questionnaire_1) question_2 = mommy.make(Question, type=Question.LIKERT, questionnaire=questionnaire_2) question_3 = mommy.make(Question, type=Question.LIKERT, questionnaire=questionnaire_3) question_4 = mommy.make(Question, type=Question.LIKERT, questionnaire=questionnaire_4) course.general_contribution.questionnaires.set([questionnaire_1, questionnaire_2, questionnaire_3, questionnaire_4]) mommy.make(RatingAnswerCounter, question=question_1, contribution=course.general_contribution, answer=3, count=100) mommy.make(RatingAnswerCounter, question=question_2, contribution=course.general_contribution, answer=3, count=100) mommy.make(RatingAnswerCounter, question=question_3, contribution=course.general_contribution, answer=3, count=100) mommy.make(RatingAnswerCounter, question=question_4, contribution=course.general_contribution, answer=3, count=100) binary_content = BytesIO() ExcelExporter(course.semester).export(binary_content, [[course.type.id]], True, True) binary_content.seek(0) workbook = xlrd.open_workbook(file_contents=binary_content.read()) self.assertEqual(workbook.sheets()[0].row_values(2)[0], questionnaire_1.name) self.assertEqual(workbook.sheets()[0].row_values(3)[0], question_1.text) self.assertEqual(workbook.sheets()[0].row_values(5)[0], questionnaire_2.name) self.assertEqual(workbook.sheets()[0].row_values(6)[0], question_2.text) self.assertEqual(workbook.sheets()[0].row_values(8)[0], questionnaire_3.name) self.assertEqual(workbook.sheets()[0].row_values(9)[0], question_3.text) self.assertEqual(workbook.sheets()[0].row_values(11)[0], questionnaire_4.name) self.assertEqual(workbook.sheets()[0].row_values(12)[0], question_4.text)