def import_ergebnisse(request): data = {} if request.method == 'POST': try: semester = Semester.objects.get(semester=request.POST['semester']) except (Semester.DoesNotExist, KeyError): return HttpResponseRedirect(reverse('import_ergebnisse')) form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): if 'typ' in request.POST and request.POST['typ'] == 'uebung': warnings, errors, vcount, fbcount = parse_ergebnisse(semester, TextIOWrapper(request.FILES['file'].file, encoding='ISO-8859-1'), 'UE2016') else: warnings, errors, vcount, fbcount = parse_ergebnisse(semester, TextIOWrapper(request.FILES['file'].file, encoding='ISO-8859-1')) if fbcount: messages.success(request, '%u Veranstaltungen mit insgesamt %u Fragebögen wurden erfolgreich importiert.' % (vcount, fbcount)) else: warnings.append('Es konnten keine Fragebögen importiert werden.') for w in warnings: messages.warning(request, w) for e in errors: messages.error(request, e) return HttpResponseRedirect(reverse('sync_ergebnisse')) else: messages.error(request, 'Fehler beim Upload') else: data['semester'] = Semester.objects.all() data['form'] = UploadFileForm() return render(request, 'intern/import_ergebnisse.html', data)
def import_ergebnisse(request): data = {} if request.method == "POST": try: semester = Semester.objects.get(semester=request.POST["semester"]) except (Semester.DoesNotExist, KeyError): return HttpResponseRedirect(reverse("import_ergebnisse")) form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): warnings, errors, vcount, fbcount = parse_ergebnisse(semester, request.FILES["file"]) if fbcount: messages.success( request, u"%u Veranstaltungen mit insgesamt %u Fragebögen wurden erfolgreich importiert." % (vcount, fbcount), ) else: warnings.append(u"Es konnten keine Fragebögen importiert werden.") for w in warnings: messages.warning(request, w) for e in errors: messages.error(request, e) return HttpResponseRedirect(reverse("sync_ergebnisse")) else: messages.error(request, "Fehler beim Upload") else: data["semester"] = Semester.objects.all() data["form"] = UploadFileForm() return render(request, "intern/import_ergebnisse.html", data)
def _do_parse_ergebnisse_test(self, semester, fragebogen, fb_model): s = Semester.objects.create(semester=semester, fragebogen=fragebogen, sichtbarkeit='ADM') v = [] default_params = {'semester': s, 'grundstudium': False, 'evaluieren': True} v.append(Veranstaltung.objects.create(name='Test I', lv_nr='1', **default_params)) v.append(Veranstaltung.objects.create(name='LV-Nr. existiert nicht', lv_nr='4711', **default_params)) v.append(Veranstaltung.objects.create(name='Test II', lv_nr='1234', **default_params)) v.append(Veranstaltung.objects.create(name='Ergebnis bereits importiert', lv_nr='9876', **default_params)) fb_model.objects.create(veranstaltung=v[3]) testdata = settings.TESTDATA_PATH + 'ergebnis_test_%u.csv' % semester with open(testdata, 'r') as f: warnings, errors, vcount, fbcount = parse_ergebnisse(s, f) self.assertEqual(len(warnings), 2) self.assertIn(u'Die Veranstaltung "LV-Nr. existiert nicht" hat in der ' + \ 'Datenbank die Lehrveranstaltungsnummer "4711", in der CSV-Datei aber ' + \ '"2342". Die Ergebnisse wurden trotzdem importiert.', warnings) self.assertIn(u'Die Veranstaltung mit der Lehrveranstaltungsnummer ' + \ '"1234" hat in der Datenbank den Namen "Test II", in der ' + \ 'CSV-Datei aber "V.-Name existiert nicht". Die ' + \ 'Ergebnisse wurden trotzdem importiert.', warnings) self.assertEqual(vcount, 3) self.assertEqual(fbcount, 4) self.assertEqual(len(errors), 2) self.assertIn(u'Die Veranstaltung "V. existiert nicht" (1337) ' + \ 'existiert im System nicht und wurde deshalb nicht importiert!', errors) self.assertIn(u'In der Datenbank existieren bereits Fragebögen zur Veranstaltung ' + \ '"Ergebnis bereits importiert". Sie wurde deshalb nicht importiert!', errors)
def _do_parse_ergebnisse_test(self, semester, fragebogen, fb_model): s = Semester.objects.create(semester=semester, fragebogen=fragebogen, sichtbarkeit='ADM') v = [] default_params = {'semester': s, 'grundstudium': False, 'evaluieren': True} v.append(Veranstaltung.objects.create(name='Test I', lv_nr='1', **default_params)) v.append(Veranstaltung.objects.create(name='LV-Nr. existiert nicht', lv_nr='4711', **default_params)) v.append(Veranstaltung.objects.create(name='Test II', lv_nr='1234', **default_params)) v.append(Veranstaltung.objects.create(name='Ergebnis bereits importiert', lv_nr='9876', **default_params)) fb_model.objects.create(veranstaltung=v[3]) testdata = settings.TESTDATA_PATH + 'ergebnis_test_%u.csv' % semester with open(testdata, 'r') as f: warnings, errors, vcount, fbcount = parse_ergebnisse(s, f) self.assertEqual(len(warnings), 2) self.assertIn('Die Veranstaltung "LV-Nr. existiert nicht" hat in der ' + \ 'Datenbank die Lehrveranstaltungsnummer "4711", in der CSV-Datei aber ' + \ '"2342". Die Ergebnisse wurden trotzdem importiert.', warnings) self.assertIn('Die Veranstaltung mit der Lehrveranstaltungsnummer ' + \ '"1234" hat in der Datenbank den Namen "Test II", in der ' + \ 'CSV-Datei aber "V.-Name existiert nicht". Die ' + \ 'Ergebnisse wurden trotzdem importiert.', warnings) self.assertEqual(vcount, 3) self.assertEqual(fbcount, 4) self.assertEqual(len(errors), 2) self.assertIn('Die Veranstaltung "V. existiert nicht" (1337) ' + \ 'existiert im System nicht und wurde deshalb nicht importiert!', errors) self.assertIn('In der Datenbank existieren bereits Fragebögen zur Veranstaltung ' + \ '"Ergebnis bereits importiert". Sie wurde deshalb nicht importiert!', errors)