{# 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