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())
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'))
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'))