Merge pull request 'Role v odevzdávátku' (!97) from odevzdavatko_role into master
Reviewed-on: #97
This commit is contained in:
commit
8bde5c7e4b
5 changed files with 78 additions and 3 deletions
10
odevzdavatko/static/css/odevzdavatko.css
Normal file
10
odevzdavatko/static/css/odevzdavatko.css
Normal file
|
@ -0,0 +1,10 @@
|
|||
.odevzdavatko-role {
|
||||
font-size: 0.8em;
|
||||
|
||||
.vyrazne {
|
||||
color: var(--hlavni-oranzova);
|
||||
}
|
||||
.nevyrazne {
|
||||
color: #aaa;
|
||||
}
|
||||
}
|
6
odevzdavatko/templates/odevzdavatko/base.html
Normal file
6
odevzdavatko/templates/odevzdavatko/base.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block custom_css %}
|
||||
<link href="{% static 'css/odevzdavatko.css' %}?version=1" rel="stylesheet">
|
||||
{% endblock %}
|
|
@ -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 %}
|
||||
<th>
|
||||
{# TODO: Přehled řešení k problému, odkázaný odsud? #}
|
||||
<span title="Autor: {{ p.autor }}, Garant: {{ p.garant }}, Opravovatelé: {{ p.opravovatele.all | join:", " }}">{{ p }}</span>{# TODO: role? e.g. Úloha 3.3 (role: AG) jakože autor a garant #}
|
||||
<span title="Autor: {{ p.autor }}, Garant: {{ p.garant }}, Opravovatelé: {{ p.opravovatele.all | join:", " }}">{{ p }}
|
||||
<span class="odevzdavatko-role">
|
||||
{% spaceless %}
|
||||
<span class="{{ p|ma_autora:user|yesno:"vyrazne,nevyrazne" }}">A</span>
|
||||
<span class="{{ p|ma_garanta:user|yesno:"vyrazne,nevyrazne" }}">G</span>
|
||||
<span class="{{ p|ma_opravovatele:user|yesno:"vyrazne,nevyrazne" }}">O</span>
|
||||
{% endspaceless %}
|
||||
</span>
|
||||
</span>
|
||||
</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
|
|
27
odevzdavatko/templatetags/orgove.py
Normal file
27
odevzdavatko/templatetags/orgove.py
Normal file
|
@ -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)
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue