Esempio n. 1
0
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,
        },
    )
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
 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'))
Esempio n. 6
0
    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
Esempio n. 7
0
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)
Esempio n. 8
0
    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
Esempio n. 9
0
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,})
Esempio n. 10
0
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,})
Esempio n. 11
0
class VeranstaltungsDeadlines(ListView):
    queryset = Veranstaltung.objects.filter(
        semester=Semester.current(), evaluieren=True).exclude(
            auswertungstermin__isnull=True).order_by('name')
    template_name = "feedback/VeranstaltungsDeadlines.html"
Esempio n. 12
0
 def clean(self):
     cleaned_data = super().clean()
     if Semester.current().vollerhebung:
         cleaned_data["evaluieren"] = True
     return cleaned_data
Esempio n. 13
0
 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)
Esempio n. 14
0
 def test_current(self):
     self.assertEqual(Semester.current(), self.ss)
Esempio n. 15
0
 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)  
Esempio n. 16
0
 def test_current(self):
     self.assertEqual(Semester.current(), self.ss)