diff --git a/aesop/views.py b/aesop/views.py index c46ab605..d815b5d5 100644 --- a/aesop/views.py +++ b/aesop/views.py @@ -7,7 +7,7 @@ from django.utils.encoding import force_text from .utils import default_ovvpfile from seminar.models import Rocnik, Soustredeni -from seminar.views import vysledkovka +from vysledkovky import utils from seminar.utils import aktivniResitele class ExportIndexView(generic.View): @@ -66,8 +66,8 @@ class ExportRocnikView(generic.View): rocnik = get_object_or_404(Rocnik, prvni_rok=pr, exportovat=True) cislo = rocnik.posledni_zverejnena_vysledkovka_cislo() resitele = aktivniResitele(cislo, True) - slovnik_body = vysledkovka.secti_body_za_rocnik(cislo, resitele, False) - setrizeni_resitele, body = vysledkovka.setrid_resitele_a_body(slovnik_body) + slovnik_body = utils.secti_body_za_rocnik(cislo, resitele, False) + setrizeni_resitele, body = utils.setrid_resitele_a_body(slovnik_body) of = default_ovvpfile('MaM.rocnik', rocnik) of.headers['comment'] = u'MaM-Web export aktivnich resitelu rocniku {rocnik} do cisla {cislo}'.format(rocnik=rocnik, cislo=cislo) diff --git a/mamweb/settings_common.py b/mamweb/settings_common.py index 08997bb4..19f80548 100644 --- a/mamweb/settings_common.py +++ b/mamweb/settings_common.py @@ -139,6 +139,8 @@ INSTALLED_APPS = ( 'api', 'aesop', 'odevzdavatko', + 'vysledkovky', + # Admin upravy: # 'material', diff --git a/seminar/templates/seminar/archiv/cislo-normal.html b/seminar/templates/seminar/archiv/cislo-normal.html index e23da09c..4d4a9da0 100644 --- a/seminar/templates/seminar/archiv/cislo-normal.html +++ b/seminar/templates/seminar/archiv/cislo-normal.html @@ -58,34 +58,7 @@ {% endif %} {% if cislo.verejna_vysledkovka or user.is_staff %} - - - - - {% endfor %} -
# - Jméno #} - {# problémy by měly být veřejné, když je veřejná výsledkovka #} -{# {% for p in problemy %} - {{ p.kod_v_rocniku }} - {% endfor %} - Za číslo - Za ročník - Odjakživa - {% for rv in radky_vysledkovky %} -
{% autoescape off %}{{ rv.poradi }}{% endautoescape %} - - {% if rv.resitel.titul != "" %} - {{ rv.resitel.titul }}MM - {% endif %} - {{ rv.resitel.osoba.plne_jmeno }} - {% for b in rv.hlavni_problemy_body %} - {{ b }} - {% endfor %} - {{ rv.body_cislo }} - {{ rv.body_rocnik }} - {{ rv.body_celkem_odjakziva }} -
+ {% include "vysledkovky/vysledkovka_cisla.html" %} {% endif %} {% if not cislo.verejna_vysledkovka and user.is_staff %} diff --git a/seminar/templates/seminar/archiv/cislo.html b/seminar/templates/seminar/archiv/cislo.html index 1f18d4b5..13a505ac 100644 --- a/seminar/templates/seminar/archiv/cislo.html +++ b/seminar/templates/seminar/archiv/cislo.html @@ -79,73 +79,7 @@ {% endif %} {% if cislo.verejna_vysledkovka or user.je_org %} - - - - - {% endfor %} -
# - Jméno - {% for p in problemy %} - {# #}{{ p.kod_v_rocniku }}{# #} - - {# TODELETE #} - {% for podproblemy in podproblemy_iter.next %} - {# #}{{ podproblemy.kod_v_rocniku }}{# #} - {% endfor %} - {# TODELETE #} - - {% endfor %} - {% if ostatni %}Ostatní {% endif %} - - {# TODELETE #} - {% for podproblemy in podproblemy_iter.next %} - {# #}{{ podproblemy.kod_v_rocniku }}{# #} - {% endfor %} - {# TODELETE #} - - - Za číslo - Za ročník - Odjakživa - {% for rv in radky_vysledkovky %} -
{% autoescape off %}{{ rv.poradi }}{% endautoescape %} - - {% if rv.titul %} - {{ rv.titul }}MM - {% endif %} - {{ rv.resitel.osoba.plne_jmeno }} - {% for b in rv.body_problemy_sezn %} - {{ b }} - - {# TODELETE #} - {% for body_podproblemu in rv.body_podproblemy_iter.next %} - {{ body_podproblemu }} - {% endfor %} - {# TODELETE #} - - {% endfor %} - {{ rv.body_cislo }} - {{ rv.body_rocnik }} - {{ rv.body_celkem_odjakziva }} -
- - {# TODELETE #} - - {# TODELETE #} - + {% include "vysledkovky/vysledkovka_cisla.html" %} {% endif %} {% if not cislo.verejna_vysledkovka and user.je_org %} diff --git a/seminar/templates/seminar/archiv/rocnik.html b/seminar/templates/seminar/archiv/rocnik.html index aa2f1dbc..7f71037f 100644 --- a/seminar/templates/seminar/archiv/rocnik.html +++ b/seminar/templates/seminar/archiv/rocnik.html @@ -72,17 +72,13 @@ {% endif %}

Výsledková listina

- {% include "seminar/vysledkovka_rocnik.html" %} + {% include "vysledkovky/vysledkovka_rocnik.html" %} {% endif %} {% if user.je_org %}

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

- {% with radky_vysledkovky_s_neverejnymi as radky_vysledkovky %} - {% with cisla_s_neverejnymi as cisla %} - {% include "seminar/vysledkovka_rocnik.html" %} - {% endwith %} - {% endwith %} + {% include "vysledkovky/vysledkovka_rocnik_neverejna.html" %}
{% endif %} diff --git a/seminar/templates/seminar/zadani/AktualniVysledkovka.html b/seminar/templates/seminar/zadani/AktualniVysledkovka.html index 15c856d9..4ea2bffe 100644 --- a/seminar/templates/seminar/zadani/AktualniVysledkovka.html +++ b/seminar/templates/seminar/zadani/AktualniVysledkovka.html @@ -9,7 +9,7 @@ {% if radky_vysledkovky %} - {% include "seminar/vysledkovka_rocnik.html" %} + {% include "vysledkovky/vysledkovka_rocnik.html" %} {% else %}

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

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

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

- {% with vysledkovka_s_neverejnymi as radky_vysledkovky %} - {% with cisla_s_neverejnymi as cisla %} - {% include "seminar/vysledkovka_rocnik.html" %} - {% endwith %} - {% endwith %} + {% include "vysledkovky/vysledkovka_rocnik_neverejna.html" %}
{% endif %} diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index d5e3e54c..a646d98f 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -23,7 +23,8 @@ from seminar.forms import PrihlaskaForm, ProfileEditForm, PoMaturiteProfileEditF import seminar.forms as f import seminar.templatetags.treenodes as tnltt import seminar.views.views_rest as vr -from seminar.views.vysledkovka import vysledkovka_rocniku, vysledkovka_cisla, body_resitelu +from vysledkovky.utils import body_resitelu +from vysledkovky.views import vysledkovka_rocniku, vysledkovka_cisla from datetime import date, datetime from django.utils import timezone @@ -487,31 +488,34 @@ def ZadaniAktualniVysledkovkaView(request): nastaveni = get_object_or_404(Nastaveni) # Aktualni verejna vysledkovka rocnik = nastaveni.aktualni_rocnik - vysledkovka = vysledkovka_rocniku(rocnik) - cisla = cisla_rocniku(rocnik) + context = vysledkovka_rocniku( + rocnik=rocnik, + request=request, + sneverejnou=True + ) + # kdyz neni verejna vysledkovka, tak zobraz starou - if not vysledkovka or not any(map(lambda it: it.verejna_vysledkovka, cisla)): + if len(context['cisla']) == 0: try: minuly_rocnik = Rocnik.objects.get( prvni_rok=(rocnik.prvni_rok-1)) rocnik = minuly_rocnik - vysledkovka = vysledkovka_rocniku(minuly_rocnik) - cisla = cisla_rocniku(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 + ) except ObjectDoesNotExist: pass - # vysledkovka s neverejnyma vysledkama - vysledkovka_s_neverejnymi = vysledkovka_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False) - cisla_s_neverejnymi = cisla_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False) + + context['rocnik'] = rocnik return render( request, 'seminar/zadani/AktualniVysledkovka.html', - { - 'rocnik': rocnik, - 'radky_vysledkovky': vysledkovka, - 'cisla': cisla, - 'vysledkovka_s_neverejnymi': vysledkovka_s_neverejnymi, - 'cisla_s_neverejnymi': cisla_s_neverejnymi, - } + context ) @@ -655,18 +659,12 @@ class RocnikView(generic.DetailView): def get_context_data(self, **kwargs): start = time.time() context = super(RocnikView, self).get_context_data(**kwargs) - - # vysledkovka = True zajistí vykreslení, - # zkontrolovat, kdy se má a nemá vykreslovat - cisla = cisla_rocniku(context["rocnik"]) - context['vysledkovka'] = any(map(lambda it: it.verejna_vysledkovka, cisla)) - if self.request.user.je_org: - context['cisla_s_neverejnymi'] = cisla_rocniku(context["rocnik"], jen_verejne=False) - context['radky_vysledkovky_s_neverejnymi'] = vysledkovka_rocniku(context["rocnik"], jen_verejne=False) - context['hlavni_problemy_v_rocniku_s_neverejnymi'] = hlavni_problemy_f(problemy_rocniku(context["rocnik"], jen_verejne=False)) - context['cisla'] = cisla - context['radky_vysledkovky'] = vysledkovka_rocniku(context["rocnik"]) - context['hlavni_problemy_v_rocniku'] = hlavni_problemy_f(problemy_rocniku(context["rocnik"])) + context = vysledkovka_rocniku( + rocnik=context["rocnik"], + context=context, + request=self.request, + sneverejnou=True + ) end = time.time() print("Kontext:", end-start) diff --git a/vysledkovky/__init__.py b/vysledkovky/__init__.py new file mode 100644 index 00000000..a420da01 --- /dev/null +++ b/vysledkovky/__init__.py @@ -0,0 +1,3 @@ +""" +Obsahuje výsledkovky a vše, co se týká sčítání bodů. +""" \ No newline at end of file diff --git a/vysledkovky/apps.py b/vysledkovky/apps.py new file mode 100644 index 00000000..7221864c --- /dev/null +++ b/vysledkovky/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class VysledkovkyConfig(AppConfig): + name = 'vysledkovky' diff --git a/vysledkovky/migrations/__init__.py b/vysledkovky/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html b/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html new file mode 100644 index 00000000..adeb9067 --- /dev/null +++ b/vysledkovky/templates/vysledkovky/vysledkovka_cisla.html @@ -0,0 +1,66 @@ + + + + + {% endfor %} +
# + Jméno + {% for p in problemy %} + {# #}{{ p.kod_v_rocniku }}{# #} + + {# TODELETE #} + {% for podproblemy in podproblemy_iter.next %} + {# #}{{ podproblemy.kod_v_rocniku }}{# #} + {% endfor %} + {# TODELETE #} + + {% endfor %} + {% if ostatni %}Ostatní {% endif %} + + {# TODELETE #} + {% for podproblemy in podproblemy_iter.next %} + {# #}{{ podproblemy.kod_v_rocniku }}{# #} + {% endfor %} + {# TODELETE #} + + + Za číslo + Za ročník + Odjakživa + {% for rv in radky_vysledkovky %} +
{% autoescape off %}{{ rv.poradi }}{% endautoescape %} + + {% if rv.titul %} + {{ rv.titul }}MM + {% endif %} + {{ rv.resitel.osoba.plne_jmeno }} + {% for b in rv.body_problemy_sezn %} + {{ b }} + + {# TODELETE #} + {% for body_podproblemu in rv.body_podproblemy_iter.next %} + {{ body_podproblemu }} + {% endfor %} + {# TODELETE #} + + {% endfor %} + {{ rv.body_cislo }} + {{ rv.body_rocnik }} + {{ rv.body_celkem_odjakziva }} +
+ +{# TODELETE #} + +{# TODELETE #} diff --git a/seminar/templates/seminar/vysledkovka_rocnik.html b/vysledkovky/templates/vysledkovky/vysledkovka_rocnik.html similarity index 100% rename from seminar/templates/seminar/vysledkovka_rocnik.html rename to vysledkovky/templates/vysledkovky/vysledkovka_rocnik.html diff --git a/vysledkovky/templates/vysledkovky/vysledkovka_rocnik_neverejna.html b/vysledkovky/templates/vysledkovky/vysledkovka_rocnik_neverejna.html new file mode 100644 index 00000000..82871f07 --- /dev/null +++ b/vysledkovky/templates/vysledkovky/vysledkovka_rocnik_neverejna.html @@ -0,0 +1 @@ +{% include "vysledkovky/vysledkovka_rocnik.html" with radky_vysledkovky=radky_vysledkovky_s_neverejnymi cisla=cisla_s_neverejnymi %} \ No newline at end of file diff --git a/seminar/views/vysledkovka.py b/vysledkovky/utils.py similarity index 97% rename from seminar/views/vysledkovka.py rename to vysledkovky/utils.py index 182943b0..e637b587 100644 --- a/seminar/views/vysledkovka.py +++ b/vysledkovky/utils.py @@ -2,7 +2,6 @@ import seminar.models as m from django.db.models import Q, Sum, Count from seminar.utils import aktivniResitele, resi_v_rocniku, cisla_rocniku, hlavni_problem, hlavni_problemy_f, problemy_cisla, podproblemy_v_cislu import time -### Výsledky ROCNIK_ZRUSENI_TEMAT = 25 @@ -142,7 +141,7 @@ def setrid_resitele_a_body(slov_resitel_body): setrizene_body = [dvojice[1] for dvojice in slov_resitel_body] return setrizeni_resitele_id, setrizene_body -def vysledkovka_rocniku(rocnik, jen_verejne=True): +def data_vysledkovky_rocniku(rocnik, jen_verejne=True): """ Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve formě vhodné pro šablonu "seminar/vysledkovka_rocniku.html" """ @@ -197,7 +196,7 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): end = time.time() print("Vysledkovka rocniku",end-start) - return radky_vysledkovky + return radky_vysledkovky, cisla class RadekVysledkovkyCisla(object): """Obsahuje věci, které se hodí vědět při konstruování výsledkovky. @@ -372,9 +371,7 @@ class FixedIterator: # TODELETE -def vysledkovka_cisla(cislo, context=None): - if context is None: - context = {} +def data_vysledkovky_cisla(cislo): problemy = problemy_cisla(cislo) hlavni_problemy = hlavni_problemy_f(problemy) ## TODO možná chytřeji vybírat aktivní řešitele @@ -453,13 +450,11 @@ def vysledkovka_cisla(cislo, context=None): i += 1 # vytahané informace předáváme do kontextu - context['cislo'] = cislo - context['radky_vysledkovky'] = radky_vysledkovky - context['problemy'] = temata_a_spol - context['ostatni'] = je_nejake_ostatni pt = [podproblemy[it.id] for it in temata_a_spol]+[podproblemy[-1]] - context['podproblemy'] = pt - context['podproblemy_iter'] = FixedIterator(pt.__iter__()) # TODELETE - #context['v_cisle_zadane'] = TODO - #context['resene_problemy'] = resene_problemy - return context + return ( + radky_vysledkovky, + temata_a_spol, + je_nejake_ostatni, + pt, + FixedIterator(pt.__iter__()) + ) diff --git a/vysledkovky/views.py b/vysledkovky/views.py new file mode 100644 index 00000000..e5307bba --- /dev/null +++ b/vysledkovky/views.py @@ -0,0 +1,37 @@ +from .utils import data_vysledkovky_cisla, \ + data_vysledkovky_rocniku + + +def vysledkovka_cisla(cislo, context=None): + if context is None: + context = {} + context['cislo'] = cislo + + ( + context['radky_vysledkovky'], + context['problemy'], + context['ostatni'], + context['podproblemy'], + context['podproblemy_iter'] + ) = data_vysledkovky_cisla(cislo) + return context + + +def vysledkovka_rocniku(rocnik, context=None, request=None, sneverejnou=False): + if context is None: + context = {} + + ( + context['radky_vysledkovky'], + context['cisla'] + ) = data_vysledkovky_rocniku(rocnik) + + context['vysledkovka'] = len(context['cisla']) != 0 + + if sneverejnou and request and request.user.je_org: + ( + context['radky_vysledkovky_s_neverejnymi'], + context['cisla_s_neverejnymi'] + ) = data_vysledkovky_rocniku(rocnik, jen_verejne=False) + + return context