From 36c8acbbd6205aba540fbf53bc12f6f7bbab250e Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 6 Apr 2021 23:33:10 +0200 Subject: [PATCH] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20p=C5=99ehled=20=C5=99?= =?UTF-8?q?e=C5=A1en=C3=AD=20pro=20=C5=99e=C5=A1itele=20(o=C5=A1kliv=C3=BD?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/urls.py | 1 + seminar/views/odevzdavatko.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/seminar/urls.py b/seminar/urls.py index e5b79e01..5b469170 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -173,4 +173,5 @@ urlpatterns = [ path('temp/reseni/', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'), path('temp/reseni/all', org_required(views.SeznamReseniView.as_view())), path('temp/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())), + path('temp/reseni/resitel', resitel_required(views.PrehledOdevzdanychReseni.as_view())), ] diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 3aa7e469..585727a5 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -25,6 +25,8 @@ logger = logging.getLogger(__name__) # - ReseniProblemuView # - Detail konkrétního řešení -- všechny soubory, datum, ... # - DetailReseniView +# - Pro řešitele: přehled jejich odevzdaných řešení +# - PrehledOdevzdanychReseni # # Taky se může hodit: # - Tabulka všech řešitelů x všech problémů? @@ -238,6 +240,29 @@ def hodnoceniReseniView(request, pk, *args, **kwargs): return redirect(success_url) +class PrehledOdevzdanychReseni(ListView): + model = m.Hodnoceni + template_name = 'seminar/odevzdavatko/resitel_prehled.html' + + def get_queryset(self): + if not self.request.user.is_authenticated: + raise RuntimeError("Uživatel měl být přihlášený!") + resitel = m.Resitel.objects.get(osoba__user=self.request.user) + qs = super().get_queryset() + qs = qs.filter(reseni__resitele__in=[resitel]) + return qs + + def get_context_data(self, *args, **kwargs): + ctx = super().get_context_data(*args, **kwargs) + # Ročník určujeme podle čísla, do jehož deadlinu došlo řešení. + # Chceme to mít seřazené, takže místo comphrerehsion ručně postavíme pole polí. Django templates neumí použít OrderedDict :-/ + podle_rocniku = [] + for rocnik, hodnoceni in groupby(ctx['object_list'], lambda ho: deadline(ho.reseni.cas_doruceni)[1].rocnik): + podle_rocniku.append((rocnik, list(hodnoceni))) + ctx['podle_rocniku'] = reversed(podle_rocniku) # Od nejnovějšího ročníku + # TODO: Umožnit stažení / zobrazení řešení + return ctx + # Přehled všech řešení kvůli debugování class SeznamReseniView(ListView):