Browse Source

Odevzdávátko: Odkazy z tabulky na seznam řešení daného řešitele

+ Zkrácení tabulky
export_seznamu_prednasek
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
96a73c05d4
  1. 16
      seminar/templates/seminar/odevzdavatko/tabulka.html
  2. 27
      seminar/templatetags/utils.py
  3. 3
      seminar/views/odevzdavatko.py

16
seminar/templates/seminar/odevzdavatko/tabulka.html

@ -1,21 +1,31 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load utils %} {# Možná by mohlo být někde výš v hierarchii templatů... #}
{% block content %} {% block content %}
<table> <table>
<tr> <tr>
<td></td> {# Prázdná buňka v levém horním rohu #} <td></td> {# Prázdná buňka v levém horním rohu #}
{% for p in problemy %} {% for p in problemy %}
<th> {{ p }} </th> <th>
{# TODO: Přehled řešení k problému, odkázaný odsud? #}
{{ p }}
</th>
{% endfor %} {% endfor %}
</tr> </tr>
{% for resitel,hodnoty in radky%} {% for resitel,hodnoty in radky%}
<tr> <tr>
<td> {{ resitel }} </td> <td>
{# TODO: Chceme mít view i na řešení konkrétního řešitele ke všem problémům? #}
{{ resitel }}
</td>
{% for hodn in hodnoty %} {% for hodn in hodnoty %}
<td> <td>
{% if hodn %} {% if hodn %}
{{ hodn.pocet_reseni }} řešení<br>{{ hodn.body }} bodů<br>{{ hodn.posledni_odevzdani }} <a href="{% url 'odevzdavatko_reseni_resitele_k_problemu' problem=hodn.problem_id resitel=hodn.resitel_id %}">
{{ hodn.pocet_reseni }} řeš.<br>{{ hodn.body }} b<br>{{ hodn.posledni_odevzdani|kratke_datum|default_if_none:"Nikdy"|default:"???"}}
</a>
{% endif %} {% endif %}
</td> </td>
{% endfor %} {% endfor %}

27
seminar/templatetags/utils.py

@ -0,0 +1,27 @@
from django import template
from datetime import datetime, timedelta
from pytz import timezone
from mamweb.settings import TIME_ZONE
import logging
register = template.Library()
logger = logging.getLogger(__name__)
@register.filter(name='kratke_datum', expects_localtime=True)
def kratke_datum(dt):
# None dává None, ne-datum dává False, aby se daly použít filtry typu "default".
if dt is None:
return None
if not isinstance(dt, datetime):
logger.warning(f"Špatné volání filtru {__name__}: {dt}")
return False
naive_now = datetime.now()
tz = timezone(TIME_ZONE)
now = tz.localize(naive_now)
delta = dt - now
if delta <= timedelta(days=1):
return dt.strftime("%k:%M")
if delta <= timedelta(years=1):
return dt.strftime("%d. %m.")
return dt.strftime("%d. %m. %Y")

3
seminar/views/odevzdavatko.py

@ -57,6 +57,9 @@ class TabulkaOdevzdanychReseniView(ListView):
# FIXME: Možná dává smysl i mít None jako velké číslo -- jakože "TODO: zadat body" # FIXME: Možná dává smysl i mít None jako velké číslo -- jakože "TODO: zadat body"
) )
tabulka[problem][resitel].pocet_reseni += 1 tabulka[problem][resitel].pocet_reseni += 1
# Pro jednoduchost template si ještě poznamenáme ID problému a řešitele
tabulka[problem][resitel].problem_id = problem.id
tabulka[problem][resitel].resitel_id = resitel.id
for hodnoceni in self.get_queryset(): for hodnoceni in self.get_queryset():
for resitel in hodnoceni.reseni.resitele.all(): for resitel in hodnoceni.reseni.resitele.all():

Loading…
Cancel
Save