From af298af58dbc76e312c1c28aa6adafcaf880909b Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Sun, 4 May 2025 18:03:22 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20zobrazen=C3=AD=20?= =?UTF-8?q?rol=C3=AD=20u=20probl=C3=A9m=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/static/css/odevzdavatko.css | 10 +++++++ odevzdavatko/templates/odevzdavatko/base.html | 6 +++++ .../templates/odevzdavatko/tabulka.html | 13 +++++++-- odevzdavatko/templatetags/orgove.py | 27 +++++++++++++++++++ personalni/utils.py | 25 ++++++++++++++++- 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 odevzdavatko/static/css/odevzdavatko.css create mode 100644 odevzdavatko/templates/odevzdavatko/base.html create mode 100644 odevzdavatko/templatetags/orgove.py diff --git a/odevzdavatko/static/css/odevzdavatko.css b/odevzdavatko/static/css/odevzdavatko.css new file mode 100644 index 00000000..f38833d8 --- /dev/null +++ b/odevzdavatko/static/css/odevzdavatko.css @@ -0,0 +1,10 @@ +.odevzdavatko-role { + font-size: 0.8em; + + .true { + color: var(--hlavni-oranzova); + } + .false { + 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..87670466 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 From c274c8110c6b5f49949e346951058799ac4c0b7f Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Sun, 4 May 2025 18:27:38 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Role=20v=20odevzd=C3=A1v=C3=A1tku:=20P?= =?UTF-8?q?=C5=99ejmenov=C3=A1n=C3=AD=20t=C5=99=C3=ADd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/static/css/odevzdavatko.css | 4 ++-- odevzdavatko/templates/odevzdavatko/tabulka.html | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/odevzdavatko/static/css/odevzdavatko.css b/odevzdavatko/static/css/odevzdavatko.css index f38833d8..9a61b259 100644 --- a/odevzdavatko/static/css/odevzdavatko.css +++ b/odevzdavatko/static/css/odevzdavatko.css @@ -1,10 +1,10 @@ .odevzdavatko-role { font-size: 0.8em; - .true { + .vyrazne { color: var(--hlavni-oranzova); } - .false { + .nevyrazne { color: #aaa; } } diff --git a/odevzdavatko/templates/odevzdavatko/tabulka.html b/odevzdavatko/templates/odevzdavatko/tabulka.html index 87670466..4167c4b5 100644 --- a/odevzdavatko/templates/odevzdavatko/tabulka.html +++ b/odevzdavatko/templates/odevzdavatko/tabulka.html @@ -31,9 +31,9 @@ Do data (včetně): {{ filtr.reseni_do }} {{ p }} {% spaceless %} - A - G - O + A + G + O {% endspaceless %}