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 #}
|