Exemplo n.º 1
0
    def test_parse_vv_clear(self):
        ImportPerson.objects.create(vorname='Brian', nachname='Cohen')
        c = ImportCategory.objects.create(name='Monty Python')
        ImportVeranstaltung.objects.create(typ='vu', name='Stoning I', category=c)

        parse_vv_clear()

        self.assertFalse(ImportPerson.objects.exists())
        self.assertFalse(ImportCategory.objects.exists())
        self.assertFalse(ImportVeranstaltung.objects.exists())
Exemplo n.º 2
0
    def test_parse_vv_clear(self):
        ImportPerson.objects.create(vorname='Brian', nachname='Cohen')
        c = ImportCategory.objects.create(name='Monty Python')
        ImportVeranstaltung.objects.create(typ='vu',
                                           name='Stoning I',
                                           category=c)

        parse_vv_clear()

        self.assertFalse(ImportPerson.objects.exists())
        self.assertFalse(ImportCategory.objects.exists())
        self.assertFalse(ImportVeranstaltung.objects.exists())
Exemplo n.º 3
0
def import_vv_edit(request):
    data = {}

    if request.method in ('HEAD', 'GET'):
        # VV zur Auswahl von Vorlesungen anzeigen
        data['semester'] = Semester.objects.all()
        try:
            data['vv'] = ImportCategory.objects.get(parent=None)
        except ImportCategory.DoesNotExist:
            messages.error(request, 'Bevor zu importierende Veranstaltungen ausgewählt werden ' +
                           'können, muss zunächst eine VV-XML-Datei hochgeladen werden.')
            return HttpResponseRedirect(reverse('import_vv'))
        return render(request, 'intern/import_vv_edit.html', data)

    else:
        # gewählte Veranstaltungen übernehmen und Personen zuordnen

        # Liste der ausgewählten Veranstaltungen holen
        v_str = [ele[1] for ele in request.POST.lists() if ele[0] == 'v']
        if not len(v_str):
            messages.warning(request, u'Es wurden keine Veranstaltungen für den Import ausgewählt!')
            return HttpResponseRedirect(reverse('import_vv_edit'))
        v_ids = [int(ele) for ele in v_str[0]] # IDs von unicode nach int konvertieren

        # ausgewähltes Semester holen
        try:
            semester = Semester.objects.get(semester=request.POST['semester'])
        except (Semester.DoesNotExist, KeyError):
            return HttpResponseRedirect(reverse('import_vv_edit'))

        # Veranstaltungen übernehmen
        data['v'] = []
        for iv in ImportVeranstaltung.objects.filter(id__in=v_ids):
            try:
                v = Veranstaltung.objects.create(typ=iv.typ, name=iv.name, semester=semester,
                                                 lv_nr=iv.lv_nr, grundstudium=False, evaluieren=True)
            except IntegrityError:
                # Veranstaltung wurde bereits importiert (kann vorkommen, wenn sie im VV in
                # mehreren Kategorien vorkommt)
                continue

            # Accounts für Veranstalter erstellen, falls nötig
            for ip in iv.veranstalter.all():
                p = Person.create_from_import_person(ip)
                v.veranstalter.add(p)

        # temporäre Daten löschen
        vv_parser.parse_vv_clear()
        return HttpResponseRedirect(reverse('import_vv_edit_users'))
Exemplo n.º 4
0
def import_vv_edit(request):
    """Zuständig für die Bearbeitung des importierten XMLs."""
    data = {}

    if request.method in ('HEAD', 'GET'):
        # VV zur Auswahl von Vorlesungen anzeigen
        data['semester'] = Semester.objects.all()
        category_tree = ImportCategory.objects.all().prefetch_related('ivs')

        # prüfen, ob die Liste leer ist
        if category_tree:
            # erste root-Kategorie ignorieren
            data['vv'] = category_tree[1:]

            remaining_close_tags = ImportCategory.objects.all().aggregate(
                sum_lvl=Sum('rel_level'))
            if remaining_close_tags['sum_lvl'] is None:
                data['remaining_close_tags'] = 0
            else:
                data['remaining_close_tags'] = remaining_close_tags['sum_lvl']
            return render(request, 'intern/import_vv_edit.html', data)

        else:
            messages.error(
                request,
                'Bevor zu importierende Veranstaltungen ausgewählt werden ' +
                'können, muss zunächst eine VV-XML-Datei hochgeladen werden.')

            return HttpResponseRedirect(reverse('import_vv'))
    else:
        # gewählte Veranstaltungen übernehmen und Personen zuordnen
        # Liste der ausgewählten Veranstaltungen holen
        v_str = [ele[1] for ele in request.POST.lists() if ele[0] == 'v']
        if not len(v_str):
            messages.warning(
                request,
                'Es wurden keine Veranstaltungen für den Import ausgewählt!')
            return HttpResponseRedirect(reverse('import_vv_edit'))

        # IDs von unicode nach int konvertieren
        v_ids = [int(ele) for ele in v_str[0]]

        # ausgewähltes Semester holen
        try:
            semester = Semester.objects.get(semester=request.POST['semester'])
        except (Semester.DoesNotExist, KeyError):
            return HttpResponseRedirect(reverse('import_vv_edit'))

        # Veranstaltungen übernehmen
        data['v'] = []
        for iv in ImportVeranstaltung.objects.filter(id__in=v_ids):
            try:
                v = Veranstaltung.objects.create(
                    typ=iv.typ,
                    name=iv.name,
                    status=Veranstaltung.STATUS_ANGELEGT,
                    semester=semester,
                    lv_nr=iv.lv_nr,
                    grundstudium=False,
                    evaluieren=True)
            except IntegrityError:
                # Veranstaltung wurde bereits importiert (kann vorkommen, wenn sie in mehreren Kategorien auftaucht.)
                continue

            # Accounts für Veranstalter erstellen, falls nötig
            for ip in iv.veranstalter.all():
                p = Person.create_from_import_person(ip)
                v.veranstalter.add(p)

        # temporäre Daten löschen
        vv_parser.parse_vv_clear()
        return HttpResponseRedirect(reverse('import_vv_edit_users'))