diff --git a/seminar/templates/seminar/archiv/cislo.html b/seminar/templates/seminar/archiv/cislo.html
index f53f8f50..d191da22 100644
--- a/seminar/templates/seminar/archiv/cislo.html
+++ b/seminar/templates/seminar/archiv/cislo.html
@@ -76,6 +76,7 @@
{% for p in problemy %}
{{ p.kod_v_rocniku }}
{% endfor %}
+ {% if ostatni %} | Ostatní {% endif %}
| Za číslo
| Za ročník
| Odjakživa
diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py
index 9b272b53..bb41e303 100644
--- a/seminar/views/views_all.py
+++ b/seminar/views/views_all.py
@@ -989,18 +989,30 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
if hlavni_problemy is None:
hlavni_problemy = hlavni_problemy_cisla(cislo)
+ def ne_clanek_ne_konfera(problem):
+ return not(isinstance(problem, m.Clanek) or isinstance(problem, m.Konfera))
+
+ temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy))
+
+ def cosi(problem):
+ return problem.id
+
hlavni_problemy_slovnik = {}
- for hp in hlavni_problemy:
+ for hp in temata_a_spol:
hlavni_problemy_slovnik[hp.id] = {}
+ hlavni_problemy_slovnik[-1] = {}
+
# zakládání prázdných záznamů pro řešitele
cislobody = {}
for ar in aktivni_resitele:
# řešitele převedeme na řetězec pomocí unikátního id
cislobody[ar.id] = ""
- for hp in hlavni_problemy:
+ for hp in temata_a_spol:
slovnik = hlavni_problemy_slovnik[hp.id]
slovnik[ar.id] = ""
+
+ hlavni_problemy_slovnik[-1][ar.id] = ""
# vezmeme všechna řešení s body do daného čísla
reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele',
@@ -1013,7 +1025,10 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
# řešení může řešit více problémů
for prob in list(reseni.problem.all()):
nadproblem = hlavni_problem(prob)
- nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id]
+ if ne_clanek_ne_konfera(nadproblem):
+ nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id]
+ else:
+ nadproblem_slovnik = hlavni_problemy_slovnik[-1]
# a mít více hodnocení
for hodn in list(reseni.hodnoceni_set.all()):
@@ -1058,11 +1073,26 @@ def vysledkovka_cisla(cislo, context=None):
# vytvoříme jednotlivé sloupce výsledkovky
radky_vysledkovky = []
i = 0
+
+ def ne_clanek_ne_konfera(problem):
+ return not(isinstance(problem, m.Clanek) or isinstance(problem, m.Konfera))
+
+ temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy))
+
+ # def not_empty(value):
+ # return value != ''
+ #
+ # je_nejake_ostatni = any(filter(not_empty, hlavni_problemy_slovnik[-1].values())) > 0
+
+ je_nejake_ostatni = len(hlavni_problemy) - len(temata_a_spol) > 0
+
for ar_id in setrizeni_resitele_id:
# získáme seznam bodů za problémy pro daného řešitele
problemy = []
- for hp in hlavni_problemy:
+ for hp in temata_a_spol:
problemy.append(hlavni_problemy_slovnik[hp.id][ar_id])
+ if je_nejake_ostatni:
+ problemy.append(hlavni_problemy_slovnik[-1][ar_id])
# vytáhneme informace pro daného řešitele
radek = RadekVysledkovkyCisla(
poradi[i], # pořadí
@@ -1079,6 +1109,7 @@ def vysledkovka_cisla(cislo, context=None):
context['cislo'] = cislo
context['radky_vysledkovky'] = radky_vysledkovky
context['problemy'] = hlavni_problemy
+ context['ostatni'] = je_nejake_ostatni
#context['v_cisle_zadane'] = TODO
#context['resene_problemy'] = resene_problemy
return context
|