|
|
@ -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): |
|
|
|