diff --git a/odevzdavatko/static/css/odevzdavatko.css b/odevzdavatko/static/css/odevzdavatko.css new file mode 100644 index 00000000..9a61b259 --- /dev/null +++ b/odevzdavatko/static/css/odevzdavatko.css @@ -0,0 +1,10 @@ +.odevzdavatko-role { + font-size: 0.8em; + + .vyrazne { + color: var(--hlavni-oranzova); + } + .nevyrazne { + color: #aaa; + } +} diff --git a/odevzdavatko/templates/odevzdavatko/base.html b/odevzdavatko/templates/odevzdavatko/base.html new file mode 100644 index 00000000..e304e253 --- /dev/null +++ b/odevzdavatko/templates/odevzdavatko/base.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} +{% load static %} + +{% block custom_css %} + +{% endblock %} diff --git a/odevzdavatko/templates/odevzdavatko/tabulka.html b/odevzdavatko/templates/odevzdavatko/tabulka.html index dfe35bfc..4167c4b5 100644 --- a/odevzdavatko/templates/odevzdavatko/tabulka.html +++ b/odevzdavatko/templates/odevzdavatko/tabulka.html @@ -1,6 +1,7 @@ -{% extends "base.html" %} +{% extends "odevzdavatko/base.html" %} {% load barvy_reseni %} +{% load orgove %} {% block content %} @@ -27,7 +28,15 @@ Do data (včetně): {{ filtr.reseni_do }} {% for p in problemy %} {# TODO: Přehled řešení k problému, odkázaný odsud? #} - {{ p }}{# TODO: role? e.g. Úloha 3.3 (role: AG) jakože autor a garant #} + {{ p }} + + {% spaceless %} + A + G + O + {% endspaceless %} + + {% endfor %} diff --git a/odevzdavatko/templatetags/orgove.py b/odevzdavatko/templatetags/orgove.py new file mode 100644 index 00000000..c5380067 --- /dev/null +++ b/odevzdavatko/templatetags/orgove.py @@ -0,0 +1,27 @@ +from django import template +register = template.Library() + +from personalni.utils import organizator_cehokoliv + +# Jen typová anotace +from tvorba.models import Problem +from personalni.models import Osoba, Organizator, Resitel, Prijemce +from django.contrib.auth.models import AnonymousUser, User + +@register.filter +def ma_autora(p: Problem, o: Osoba | Organizator | User | AnonymousUser | Resitel | Prijemce) -> bool | None: + o = organizator_cehokoliv(o) + if o is None: return None + return p.autor == o + +@register.filter +def ma_garanta(p: Problem, o: Osoba | Organizator | User | AnonymousUser | Resitel | Prijemce) -> bool | None: + o = organizator_cehokoliv(o) + if o is None: return None + return p.garant == o + +@register.filter +def ma_opravovatele(p: Problem, o: Osoba | Organizator | User | AnonymousUser | Resitel | Prijemce) -> bool | None: + o = organizator_cehokoliv(o) + if o is None: return None + return p.opravovatele.contains(o) diff --git a/personalni/utils.py b/personalni/utils.py index f3c796e6..4a8b9a38 100644 --- a/personalni/utils.py +++ b/personalni/utils.py @@ -201,4 +201,27 @@ def resitel_uzivatele(u: User | AnonymousUser) -> Resitel | None: if o is None: return None return resitel_osoby(o) -# TODO: organizator_osoby, organizator_uzivatele +def resitel_cehokoliv(r: User | AnonymousUser | Osoba | Organizator | Resitel | Prijemce) -> Organizator | None: + if isinstance(r, User): r = resitel_uzivatele(r) + if isinstance(r, Osoba): r = resitel_osoby(r) + if isinstance(r, Resitel) or isinstance(r, Prijemce): r = resitel_osoby(r.osoba) + assert isinstance(r, Resitel) or r is None + return r + +def organizator_osoby(o: Osoba) -> Organizator | None: + try: + return o.org + except Osoba.org.RelatedObjectDoesNotExist: + return None + +def organizator_uzivatele(u: User | AnonymousUser) -> Organizator | None: + o = osoba_uzivatele(u) + if o is None: return None + return organizator_osoby(o) + +def organizator_cehokoliv(o: User | AnonymousUser | Osoba | Organizator | Resitel | Prijemce) -> Organizator | None: + if isinstance(o, User): o = organizator_uzivatele(o) + if isinstance(o, Osoba): o = organizator_osoby(o) + if isinstance(o, Resitel) or isinstance(o, Prijemce): o = organizator_osoby(o.osoba) + assert isinstance(o, Organizator) or o is None + return o