def index(request): cur_semester = Semester.current() all_veranst = Veranstaltung.objects.filter(semester=cur_semester) # Veranstaltung für die es Rückmeldungen gibt ruck_veranst = all_veranst.filter(Q(anzahl__gt=0) | Q(evaluieren=False)) num_all_veranst = all_veranst.count() num_ruck_veranst = ruck_veranst.count() relativ_result = 0 if num_all_veranst >= 1: relativ_result = (100 / float(num_all_veranst)) * num_ruck_veranst width_progressbar = 500 width_progressbar_success = int(float(width_progressbar) / 100 * relativ_result) return render( request, "intern/index.html", { "cur_semester": cur_semester, "all_veranst": num_all_veranst, "ruck_veranst": num_ruck_veranst, "relativ_result": relativ_result, "width_progressbar": width_progressbar, "width_progressbar_success": width_progressbar_success, }, )
def fragebogensprache(request): veranstaltungen = Veranstaltung.objects.filter(semester=Semester.current()) veranstaltungen = veranstaltungen.filter(anzahl__gt=0, evaluieren=True) veranstaltungen = veranstaltungen.order_by("sprache", "typ", "anzahl") data = {"veranstaltungen": veranstaltungen} return render(request, "intern/fragebogensprache.html", data)
def fragebogensprache(request): veranstaltungen = Veranstaltung.objects.filter(semester=Semester.current()) veranstaltungen = veranstaltungen.filter(anzahl__gt=0, evaluieren=True, status__gte=Veranstaltung.STATUS_BESTELLUNG_WIRD_VERARBEITET) veranstaltungen = veranstaltungen.order_by('sprache','typ','anzahl') data = {'veranstaltungen': veranstaltungen} return render(request, 'intern/fragebogensprache.html', data)
def fragebogensprache(request): veranstaltungen = Veranstaltung.objects.filter(semester=Semester.current()) veranstaltungen = veranstaltungen.filter(anzahl__gt=0, evaluieren=True) veranstaltungen = veranstaltungen.order_by('sprache','typ','anzahl') data = {'veranstaltungen': veranstaltungen} return render(request, 'intern/fragebogensprache.html', data)
def get_queryset(self): try: veranstaltungen = Veranstaltung.objects.filter(semester=Semester.current()) return veranstaltungen except (Veranstaltung.DoesNotExist, KeyError): messages.warning(self.request, 'Keine passenden Veranstaltungen für das aktuelle Semester gefunden.') return HttpResponseRedirect(reverse('intern-index'))
def __init__(self, *args, **kwargs): super(VeranstaltungEvaluationForm, self).__init__(*args, **dict(kwargs, initial={"evaluieren": "False"})) for k, field in list(self.fields.items()): if not (Semester.current().vollerhebung): field.required = True
def import_vv_edit_users(request): data = {} PersonFormSet = formset_factory(PersonForm, extra=0) # Personen suchen, die eine Veranstaltung im aktuellen Semester und unvollständige Daten haben has_missing_data = Q(geschlecht='') | Q(email='') pers = Person.objects.filter(has_missing_data, veranstaltung__semester=Semester.current()) pers = pers.distinct() if request.method == 'POST': formset = PersonFormSet(request.POST) personen = request.POST['personen'] #TODO: im else-Fall werden keine Namen angezeigt, da sie auf initial basieren #TODO: vollständige Einträge speichern, auch wenn andere Fehler haben if formset.is_valid(): successful_saves = 0 for form, pid in zip(formset.forms, personen.split(',')): p = pers.get(id=pid) p.geschlecht = form.cleaned_data['anrede'] p.email = form.cleaned_data['email'] p.save() successful_saves += 1 messages.success(request, u'%i Benutzerdatensätze wurden erfolgreich gespeichert.' % successful_saves) return HttpResponseRedirect(reverse('intern-index')) else: # Formulare erzeugen personen = ','.join([str(p.id) for p in pers]) formset = PersonFormSet(initial=[{ 'anrede': p.geschlecht, 'name': p.full_name(), 'adminlink': request.build_absolute_uri(reverse('admin:feedback_person_change', args=(p.id,))), 'email': p.email } for p in pers]) data['personen'] = personen data['formset'] = formset return render(request, 'intern/import_vv_edit_users.html', data)
def __init__(self, *args, **kwargs): veranstalter_queryset = kwargs.pop("all_veranstalter", None) super(VeranstaltungBasisdatenForm, self).__init__(*args, **kwargs) # Schränke QuerySet nur auf den Veranstalter ein self.fields["verantwortlich"].queryset = veranstalter_queryset self.fields["ergebnis_empfaenger"].queryset = veranstalter_queryset # Keine negative Anzahl möglich self.fields["anzahl"] = forms.IntegerField(min_value=1) self.fields["auswertungstermin"] = forms.DateField( help_text= "Zu diesem Termin werden die Ergebnisse versandt. Nach diesem Datum können keine Evaluationsbögen mehr abgegeben werden und die digitale Evaluation geschlossen.", widget=forms.DateInput( attrs={ "type": "date", "value": Semester.current().standard_ergebnisversand }), ) # Lösche die Auswahl ob es eine Übung gibt wenn es keine Vorlesung ist vltypes = ["vu", "v"] if kwargs["instance"].typ not in vltypes: del self.fields["typ"] else: choices = [] for cur in self.fields["typ"].choices: if cur[0] in vltypes: choices.append(cur) self.fields["typ"].choices = choices # Wenn Evaluation oder Vollerhebung, dann sind alle anderen Felder notwendig for k, field in list(self.fields.items()): if k not in ["digitale_eval", "auswertungstermin"]: field.required = True
def index(request): cur_semester = Semester.current() all_veranst = Veranstaltung.objects.filter(semester=cur_semester) #Veranstaltung für die es Rückmeldungen gibt ruck_veranst = all_veranst.filter(Q(anzahl__gt=0)|Q(evaluieren=False)) num_all_veranst = all_veranst.count() num_ruck_veranst = ruck_veranst.count() relativ_result = 0 if (num_all_veranst >= 1): relativ_result = (100/float(num_all_veranst)) * num_ruck_veranst width_progressbar = 500 width_progressbar_success = int(float(width_progressbar)/100 * relativ_result) return render(request, 'intern/index.html', {'cur_semester': cur_semester, 'all_veranst': num_all_veranst, 'ruck_veranst': num_ruck_veranst, 'relativ_result': relativ_result, 'width_progressbar': width_progressbar, 'width_progressbar_success': width_progressbar_success,})
def index(request): cur_semester = Semester.current() all_veranst = Veranstaltung.objects.filter(semester=cur_semester) # Veranstaltung für die es Rückmeldungen gibt ruck_veranst = all_veranst.filter(status__gt=Veranstaltung.STATUS_KEINE_EVALUATION, semester=cur_semester) num_all_veranst = all_veranst.count() num_ruck_veranst = ruck_veranst.count() relativ_result = 0 if num_all_veranst >= 1: relativ_result = (100/float(num_all_veranst)) * num_ruck_veranst width_progressbar = 500 width_progressbar_success = int(float(width_progressbar)/100 * relativ_result) return render(request, 'intern/index.html', {'cur_semester': cur_semester, 'all_veranst': num_all_veranst, 'ruck_veranst': num_ruck_veranst, 'relativ_result': relativ_result, 'width_progressbar': width_progressbar, 'width_progressbar_success': width_progressbar_success,})
class VeranstaltungsDeadlines(ListView): queryset = Veranstaltung.objects.filter( semester=Semester.current(), evaluieren=True).exclude( auswertungstermin__isnull=True).order_by('name') template_name = "feedback/VeranstaltungsDeadlines.html"
def clean(self): cleaned_data = super().clean() if Semester.current().vollerhebung: cleaned_data["evaluieren"] = True return cleaned_data
def render_change_form(self, request, context, *args, **kwargs): # Limit Auswahl zum aktuellen Semester context['adminform'].form.fields['veranstaltung'].queryset = Veranstaltung.objects.filter( semester=Semester.current()) return super(TutorAdmin, self).render_change_form(request, context, args, kwargs)
def test_current(self): self.assertEqual(Semester.current(), self.ss)
def render_change_form(self, request, context, *args, **kwargs): # Limit Auswahl zum aktuellen Semester context['adminform'].form.fields['veranstaltung'].queryset = Veranstaltung.objects.filter(semester=Semester.current()) return super(TutorAdmin, self).render_change_form(request, context, args, kwargs)