diff --git a/personalni/views.py b/personalni/views.py index 00e6b389..94b90dea 100644 --- a/personalni/views.py +++ b/personalni/views.py @@ -40,7 +40,7 @@ class OrgoRozcestnikView(TemplateView): # přes treenody (a dát si přitom pozor na MezicisloNode) neobodovana_reseni = s.Hodnoceni.objects.filter(body__isnull=True) - reseni_mimo_cislo = s.Hodnoceni.objects.filter(cislo_body__isnull=True) + reseni_mimo_cislo = s.Hodnoceni.objects.filter(deadline_body__isnull=True) context['pocet_neobodovanych_reseni'] = neobodovana_reseni.count() context['pocet_reseni_mimo_cislo'] = reseni_mimo_cislo.count() diff --git a/seminar/models/personalni.py b/seminar/models/personalni.py index 97bb808b..28deec4d 100644 --- a/seminar/models/personalni.py +++ b/seminar/models/personalni.py @@ -323,7 +323,7 @@ class Resitel(SeminarModelBase): # - proto se započítávají dvojnásobně a byly posunuté hranice titulů # - staré tituly se ale nemají odebrat, pokud řešitel v t.č. minulém (26.) ročníku měl titul, má ho mít pořád. from .odevzdavatko import Hodnoceni - hodnoceni_do_25_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=25,reseni__in=self.reseni_set.all()) + hodnoceni_do_25_rocniku = Hodnoceni.objects.filter(deadline_body__cislo__rocnik__rocnik__lte=25,reseni__in=self.reseni_set.all()) novejsi_hodnoceni = Hodnoceni.objects.filter(reseni__in=self.reseni_set.all()).difference(hodnoceni_do_25_rocniku) def body_z_hodnoceni(hh : list): @@ -361,7 +361,7 @@ class Resitel(SeminarModelBase): return Titul.akad from .odevzdavatko import Hodnoceni - hodnoceni_do_26_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=26,reseni__in=self.reseni_set.all()) + hodnoceni_do_26_rocniku = Hodnoceni.objects.filter(deadline_body__cislo__rocnik__rocnik__lte=26,reseni__in=self.reseni_set.all()) novejsi_body = body_z_hodnoceni( Hodnoceni.objects.filter(reseni__in=self.reseni_set.all()) .difference(hodnoceni_do_26_rocniku) diff --git a/seminar/models/tvorba.py b/seminar/models/tvorba.py index 7da4139c..2e68f74c 100644 --- a/seminar/models/tvorba.py +++ b/seminar/models/tvorba.py @@ -8,6 +8,7 @@ import logging from django.contrib.sites.shortcuts import get_current_site from django.db import models +from django.db.models import Q from django.utils import timezone from django.conf import settings from django.urls import reverse @@ -328,6 +329,9 @@ class Cislo(SeminarModelBase): if self.datum_deadline_soustredeni is not None and self.datum_deadline_soustredeni > self.datum_deadline: raise ValidationError({'datum_deadline_soustredeni': "Soustřeďkový deadline musí předcházet finálnímu deadlinu"}) + def zlomovy_deadline_pro_papirove_cislo(self): + return Deadline.objects.filter(Q(typ=Deadline.TYP_PRVNI) | Q(typ=Deadline.TYP_PRVNI_A_SOUS), cislo=self).first() + class Deadline(SeminarModelBase): class Meta: @@ -365,6 +369,12 @@ class Deadline(SeminarModelBase): def __str__(self): return self.CHOICES_MAP[self.typ] + " " + str(self.cislo) + def next(self): + return Deadline.objects.filter(gt=self).first() + + def previous(self): + return Deadline.objects.filter(lt=self).last() + @reversion.register(ignore_duplicates=True) diff --git a/seminar/templates/seminar/archiv/cislo_vysledkovka.tex b/seminar/templates/seminar/archiv/cislo_vysledkovka.tex index 38eeea01..36404486 100644 --- a/seminar/templates/seminar/archiv/cislo_vysledkovka.tex +++ b/seminar/templates/seminar/archiv/cislo_vysledkovka.tex @@ -1,9 +1,9 @@ \setlength{\tabcolsep}{3pt} -\begin{longtable}{|r|l|c|r|{% for p in problemy %}c@{\hskip.5em}{% endfor %}|r|r|}\hline -& & & & \multicolumn{ {{ problemy|length}} }{c|}{\textbf{Témata}} & & \\\textbf{Poř.}& \textbf{Jméno}& \textbf{R.}& \raisebox{0.7mm}{$\sum_{-1}$}& {% for p in problemy %}\textbf{ {{ p.kod_v_rocniku }} }&{% endfor %}\raisebox{0.7mm}{$\sum_0$}&\raisebox{0.7mm}{$\sum_1$}\\\hline +\begin{longtable}{|r|l|c|r|{% for p in vysledkovka.temata_a_spol %}c@{\hskip.5em}{% endfor %}|r|r|}\hline +& & & & \multicolumn{ {{ vysledkovka.temata_a_spol|length}} }{c|}{\textbf{Témata}} & & \\\textbf{Poř.}& \textbf{Jméno}& \textbf{R.}& \raisebox{0.7mm}{$\sum_{-1}$}& {% for p in vysledkovka.temata_a_spol %}\textbf{ {{ p.kod_v_rocniku }} }&{% endfor %}\raisebox{0.7mm}{$\sum_0$}&\raisebox{0.7mm}{$\sum_1$}\\\hline \endhead \hline \endfoot -{% for rv in radky_vysledkovky %}{{rv.poradi}}&{% if rv.titul %}\titul{ {{ rv.titul}}}{% endif %}{{rv.resitel.osoba.jmeno|slice:":1"}}. {{rv.resitel.osoba.prijmeni}}&{{rv.rocnik_resitele|default:""}}&{{rv.body_celkem_odjakziva}}&{% for b in rv.body_problemy_sezn %}{{b}}&{% endfor %}{{rv.body_cislo}}&{{rv.body_rocnik|default:0}}\\ +{% for rv in vysledkovka.radky_vysledkovky %}{{rv.poradi}}&{% if rv.titul %}\titul{ {{ rv.titul}}}{% endif %}{{rv.resitel.osoba.jmeno|slice:":1"}}. {{rv.resitel.osoba.prijmeni}}&{{rv.rocnik_resitele|default:""}}&{{rv.body_celkem_odjakziva}}&{% for b in rv.body_problemy_sezn %}{{b}}&{% endfor %}{{rv.body_cislo}}&{{rv.body_rocnik|default:0}}\\ {% endfor %} \end{longtable} diff --git a/seminar/templates/seminar/archiv/rocnik.html b/seminar/templates/seminar/archiv/rocnik.html index 757984cf..825ce37e 100644 --- a/seminar/templates/seminar/archiv/rocnik.html +++ b/seminar/templates/seminar/archiv/rocnik.html @@ -112,7 +112,7 @@ {% endif %} - {% if vysledkovka %} + {% if vysledkovka.radky_vysledkovky %}

Výsledková listina

{% include "vysledkovky/vysledkovka_rocnik.html" %} {% endif %} @@ -123,7 +123,7 @@ {# FIXME: Sice to sem asi nepatří sémanticky, ale bylo to nejjednodušší… #}

CSV export řešitelů

Výsledková listina včetně neveřejných bodů

- {% include "vysledkovky/vysledkovka_rocnik_neverejna.html" %} + {% include "vysledkovky/vysledkovka_rocnik.html" with vysledkovka=vysledkovka_neverejna %} {% endif %} diff --git a/seminar/templates/seminar/archiv/rocnik_vysledkovka.tex b/seminar/templates/seminar/archiv/rocnik_vysledkovka.tex index 217127de..ee9b2608 100644 --- a/seminar/templates/seminar/archiv/rocnik_vysledkovka.tex +++ b/seminar/templates/seminar/archiv/rocnik_vysledkovka.tex @@ -1,13 +1,13 @@ {% with lb="{" %} {% with rb="}" %} -{% with radky_vysledkovky=radky_vysledkovky_s_neverejnymi cisla=cisla_s_neverejnymi %} +{% with vysledkovka=vysledkovka_neverejna %} \setlength{\tabcolsep}{3pt} -\begin{longtable}{|r|l|c|r|{% for cislo in cisla %}c{% if not forloop.last %}@{\hskip.5em}{% endif %}{% endfor %}|r|}\hline -& & & & \multicolumn{{ lb }}{{ cisla|length }}}{c|}{\textbf{Číslo}} & \\\textbf{Poř.} & \textbf{Jméno} & \textbf{R.} & \raisebox{0.7mm}{$\sum_{-1}$} & {% for cislo in cisla %}\textbf{{ lb }}{{ cislo.poradi }}{{ rb }} & {% endfor %}\raisebox{0.7mm}{$\sum_1$} \\\hline +\begin{longtable}{|r|l|c|r|{% for cislo in vysledkovka.cisla_rocniku %}c{% if not forloop.last %}@{\hskip.5em}{% endif %}{% endfor %}|r|}\hline +& & & & \multicolumn{{ lb }}{{ vysledkovka.cisla_rocniku|length }}}{c|}{\textbf{Číslo}} & \\\textbf{Poř.} & \textbf{Jméno} & \textbf{R.} & \raisebox{0.7mm}{$\sum_{-1}$} & {% for cislo in vysledkovka.cisla_rocniku %}\textbf{{ lb }}{{ cislo.poradi }}{{ rb }} & {% endfor %}\raisebox{0.7mm}{$\sum_1$} \\\hline \endhead \hline \endfoot -{% for rv in radky_vysledkovky %}{{ rv.poradi }} & {% if rv.titul %}\titul{{ lb }}{{ rv.titul }}}~{% endif %}{{ rv.resitel.osoba.jmeno|slice:":1" }}.~{{ rv.resitel.osoba.prijmeni }} & {% if rv.rocnik_resitele %}{{ rv.rocnik_resitele }}{% endif %} & {{ rv.body_celkem_odjakziva }} {% for b in rv.body_cisla_sezn %} & {{ b }}{% endfor %} & {{ rv.body_rocnik }} \\ +{% for rv in vysledkovka.radky_vysledkovky %}{{ rv.poradi }} & {% if rv.titul %}\titul{{ lb }}{{ rv.titul }}}~{% endif %}{{ rv.resitel.osoba.jmeno|slice:":1" }}.~{{ rv.resitel.osoba.prijmeni }} & {% if rv.rocnik_resitele %}{{ rv.rocnik_resitele }}{% endif %} & {{ rv.body_celkem_odjakziva }} {% for b in rv.body_cisla_sezn %} & {{ b }}{% endfor %} & {{ rv.body_rocnik }} \\ {% endfor %}\end{longtable} {% endwith %} {% endwith %} diff --git a/seminar/templates/seminar/zadani/AktualniVysledkovka.html b/seminar/templates/seminar/zadani/AktualniVysledkovka.html index c447d135..20e81ac7 100644 --- a/seminar/templates/seminar/zadani/AktualniVysledkovka.html +++ b/seminar/templates/seminar/zadani/AktualniVysledkovka.html @@ -8,7 +8,7 @@ {% endblock %} - {% if radky_vysledkovky %} + {% if vysledkovka.radky_vysledkovky %} {% include "vysledkovky/vysledkovka_rocnik.html" %} {% else %}

V tomto ročníku zatím žádné výsledky nejsou.

@@ -22,7 +22,7 @@ {% if user.je_org and vysledkovka_s_neverejnymi %}

Výsledky včetně neveřejných

- {% include "vysledkovky/vysledkovka_rocnik_neverejna.html" %} + {% include "vysledkovky/vysledkovka_rocnik.html" with vysledkovka=vysledkovka_neverejna %}
{% endif %} diff --git a/seminar/utils.py b/seminar/utils.py index 176831cb..f4a598eb 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -179,11 +179,11 @@ def resi_v_rocniku(rocnik, cislo=None): if cislo is None: # filtrujeme pouze podle ročníku return m.Resitel.objects.filter(rok_maturity__gte=rocnik.druhy_rok(), - reseni__hodnoceni__cislo_body__rocnik=rocnik).distinct() + reseni__hodnoceni__deadline_body__cislo__rocnik=rocnik).distinct() else: # filtrujeme podle ročníku i čísla return m.Resitel.objects.filter(rok_maturity__gte=rocnik.druhy_rok(), - reseni__hodnoceni__cislo_body__rocnik=rocnik, - reseni__hodnoceni__cislo_body__poradi__lte=cislo.poradi).distinct() + reseni__hodnoceni__deadline_body__cislo__rocnik=rocnik, + reseni__hodnoceni__deadline_body__cislo__poradi__lte=cislo.poradi).distinct() def aktivniResitele(cislo, pouze_letosni=False): @@ -269,11 +269,11 @@ def hlavni_problem(problem): return problem def problemy_rocniku(rocnik, jen_verejne=True): - return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body__in = cisla_rocniku(rocnik, jen_verejne))).distinct().select_related('nadproblem').select_related('nadproblem__nadproblem') + return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(deadline_body__cislo__in = cisla_rocniku(rocnik, jen_verejne))).distinct().select_related('nadproblem').select_related('nadproblem__nadproblem') def problemy_cisla(cislo): """ Vrátí seznam všech problémů s body v daném čísle. """ - return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body = cislo)).distinct().non_polymorphic().select_related('nadproblem').select_related('nadproblem__nadproblem') + return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(deadline_body__cislo = cislo)).distinct().non_polymorphic().select_related('nadproblem').select_related('nadproblem__nadproblem') def hlavni_problemy_f(problemy=None): diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 49327aa3..b5ab6b06 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -17,8 +17,8 @@ from seminar import utils from treenode import treelib import treenode.templatetags as tnltt import treenode.serializers as vr -from vysledkovky.utils import body_resitelu -from vysledkovky.views import vysledkovka_rocniku, vysledkovka_cisla +from vysledkovky.utils import body_resitelu, VysledkovkaCisla, \ + VysledkovkaRocniku from datetime import date, datetime from django.utils import timezone @@ -206,26 +206,17 @@ def ZadaniAktualniVysledkovkaView(request): nastaveni = get_object_or_404(Nastaveni) # Aktualni verejna vysledkovka rocnik = nastaveni.aktualni_rocnik - context = vysledkovka_rocniku( - rocnik=rocnik, - request=request, - sneverejnou=True - ) + context = {'vysledkovka': VysledkovkaRocniku(rocnik, True)} # kdyz neni verejna vysledkovka, tak zobraz starou - if len(context['cisla']) == 0: + if len(context['vysledkovka'].cisla_rocniku) == 0: try: minuly_rocnik = Rocnik.objects.get( - prvni_rok=(rocnik.prvni_rok-1)) + rocnik=(rocnik.rocnik-1)) rocnik = minuly_rocnik # Přepíšeme prázdnou výsledkovku výsledkovkou z minulého ročníku - context = vysledkovka_rocniku( - rocnik=rocnik, - context=context, - request=request, - sneverejnou=True - ) + context['vysledkovka'] = VysledkovkaRocniku(rocnik, True) except ObjectDoesNotExist: pass @@ -377,17 +368,10 @@ class RocnikView(generic.DetailView): return get_object_or_404(queryset,rocnik=self.kwargs.get('rocnik')) def get_context_data(self, **kwargs): - start = time.time() context = super(RocnikView, self).get_context_data(**kwargs) - context = vysledkovka_rocniku( - rocnik=context["rocnik"], - context=context, - request=self.request, - sneverejnou=True - ) - end = time.time() - print("Kontext:", end-start) - + context["vysledkovka"] = VysledkovkaRocniku(context["rocnik"], True) + context["neprazdna_vysledkovka"] = len(context['vysledkovka'].cisla_rocniku) != 0 + context["vysledkovka_neverejna"] = VysledkovkaRocniku(context["rocnik"], False) return context def resiteleRocnikuCsvExportView(request, rocnik): @@ -453,7 +437,8 @@ class CisloView(generic.DetailView): cislo = context['cislo'] context['prevcislo'] = Cislo.objects.filter((Q(rocnik__lt=self.object.rocnik) | Q(poradi__lt=self.object.poradi))&Q(rocnik__lte=self.object.rocnik)).first() # vrátíme context (aktuálně obsahuje jen věci ohledně výsledkovky - return vysledkovka_cisla(cislo, context) + context['vysledkovka'] = VysledkovkaCisla(cislo, not self.request.user.je_org) + return context class ArchivTemataView(generic.ListView): diff --git a/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html b/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html index 6243c32b..6c3fb416 100644 --- a/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html +++ b/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html @@ -3,21 +3,21 @@ # Jméno - {% for p in problemy %} + {% for p in vysledkovka.temata_a_spol%} {# #}{{ p.kod_v_rocniku }}{# #} {# TODELETE #} - {% for podproblemy in podproblemy_iter.next %} + {% for podproblemy in vysledkovka.podproblemy_iter.next %} {# #}{{ podproblemy.kod_v_rocniku }}{# #} {% endfor %} {# TODELETE #} {% endfor %} - {% if ostatni %}Ostatní {% endif %} + {% if vysledkovka.ostatni %}Ostatní {% endif %} {# TODELETE #} {% for podproblemy in podproblemy_iter.next %} - {# #}{{ podproblemy.kod_v_rocniku }}{# #} + {# #}{{ podproblemy.kod_v_rocniku }}{# #} {% endfor %} {# TODELETE #} @@ -25,7 +25,7 @@ Za číslo Za ročník Odjakživa - {% for rv in radky_vysledkovky %} + {% for rv in vysledkovka.radky_vysledkovky %} {% autoescape off %}{{ rv.poradi }}{% endautoescape %} @@ -33,14 +33,12 @@ {{ rv.titul }}MM {% endif %} {{ rv.resitel.osoba.plne_jmeno }} - {% for b in rv.body_problemy_sezn %} + {% for b in rv.body_hlavni_problemy_seznam %} {{ b }} - {# TODELETE #} {% for body_podproblemu in rv.body_podproblemy_iter.next %} {{ body_podproblemu }} {% endfor %} - {# TODELETE #} {% endfor %} {{ rv.body_cislo }} @@ -55,7 +53,7 @@ {# TODELETE #}