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