예제 #1
0
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)
예제 #2
0
파일: __init__.py 프로젝트: d120/pyfeedback
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)
예제 #3
0
    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)
예제 #4
0
    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)