Browse Source

Move vysledkovek do aplikace vysledkovky

export_seznamu_prednasek
Jonas Havelka 3 years ago
parent
commit
61b6f4bfd9
  1. 6
      aesop/views.py
  2. 2
      mamweb/settings_common.py
  3. 29
      seminar/templates/seminar/archiv/cislo-normal.html
  4. 68
      seminar/templates/seminar/archiv/cislo.html
  5. 8
      seminar/templates/seminar/archiv/rocnik.html
  6. 8
      seminar/templates/seminar/zadani/AktualniVysledkovka.html
  7. 54
      seminar/views/views_all.py
  8. 3
      vysledkovky/__init__.py
  9. 5
      vysledkovky/apps.py
  10. 0
      vysledkovky/migrations/__init__.py
  11. 66
      vysledkovky/templates/vysledkovky/vysledkovka_cisla.html
  12. 0
      vysledkovky/templates/vysledkovky/vysledkovka_rocnik.html
  13. 1
      vysledkovky/templates/vysledkovky/vysledkovka_rocnik_neverejna.html
  14. 25
      vysledkovky/utils.py
  15. 37
      vysledkovky/views.py

6
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)

2
mamweb/settings_common.py

@ -139,6 +139,8 @@ INSTALLED_APPS = (
'api',
'aesop',
'odevzdavatko',
'vysledkovky',
# Admin upravy:
# 'material',

29
seminar/templates/seminar/archiv/cislo-normal.html

@ -58,34 +58,7 @@
{% endif %}
{% if cislo.verejna_vysledkovka or user.is_staff %}
<table class='vysledkovka'>
<tr class='border-b'>
<th class='border-r'>#
<th class='border-r'>Jméno #}
{# problémy by měly být veřejné, když je veřejná výsledkovka #}
{# {% for p in problemy %}
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a>
{% endfor %}
<th class='border-r'>Za číslo</sup>
<th class='border-r'>Za ročník
<th class='border-r'>Odjakživa
{% for rv in radky_vysledkovky %}
<tr>
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
<th class='border-r'>
{% if rv.resitel.titul != "" %}
{{ rv.resitel.titul }}<sup>MM</sup>
{% endif %}
{{ rv.resitel.osoba.plne_jmeno }}
{% for b in rv.hlavni_problemy_body %}
<td class='border-r'>{{ b }}
{% endfor %}
<td class='border-r'>{{ rv.body_cislo }}
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
<td class='border-r'>{{ rv.body_celkem_odjakziva }}
</tr>
{% endfor %}
</table>
{% include "vysledkovky/vysledkovka_cisla.html" %}
{% endif %}
{% if not cislo.verejna_vysledkovka and user.is_staff %}

68
seminar/templates/seminar/archiv/cislo.html

@ -79,73 +79,7 @@
{% endif %}
{% if cislo.verejna_vysledkovka or user.je_org %}
<table class='vysledkovka'>
<tr class='border-b'>
<th class='border-r'>#
<th class='border-r'>Jméno
{% for p in problemy %}
<th class='border-r' id="problem{{ forloop.counter }}">{# <a href="{{ p.verejne_url }}"> #}{{ p.kod_v_rocniku }}{# </a> #}
{# TODELETE #}
{% for podproblemy in podproblemy_iter.next %}
<th class='border-r podproblem{{ forloop.parentloop.counter }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}{{ podproblemy.kod_v_rocniku }}{# </a> #}
{% endfor %}
{# TODELETE #}
{% endfor %}
{% if ostatni %}<th class='border-r'>Ostatní {% endif %}
{# TODELETE #}
{% for podproblemy in podproblemy_iter.next %}
<th class='border-r podproblem{{ problemy.len }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}{{ podproblemy.kod_v_rocniku }}{# </a> #}
{% endfor %}
{# TODELETE #}
<th class='border-r'>Za číslo
<th class='border-r'>Za ročník
<th class='border-r'>Odjakživa
{% for rv in radky_vysledkovky %}
<tr>
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
<th class='border-r'>
{% if rv.titul %}
{{ rv.titul }}<sup>MM</sup>
{% endif %}
{{ rv.resitel.osoba.plne_jmeno }}
{% for b in rv.body_problemy_sezn %}
<td class='border-r'>{{ b }}
{# TODELETE #}
{% for body_podproblemu in rv.body_podproblemy_iter.next %}
<td class='border-r podproblem{{ forloop.parentloop.counter }} podproblem'>{{ body_podproblemu }}
{% endfor %}
{# TODELETE #}
{% endfor %}
<td class='border-r'>{{ rv.body_cislo }}
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
<td class='border-r'>{{ rv.body_celkem_odjakziva }}
</tr>
{% endfor %}
</table>
{# TODELETE #}
<script>
{% for p in problemy %}
$(".podproblem{{ forloop.counter }}").css("display", "none")
$("#problem{{ forloop.counter }}")[0].addEventListener('mouseover', podproblem{{ forloop.counter }})
$("#problem{{ forloop.counter }}")[0].addEventListener('mouseout', podproblem{{ forloop.counter }}end)
function podproblem{{ forloop.counter }}(event) {
$(".podproblem{{ forloop.counter }}").css("display", "")
}
function podproblem{{ forloop.counter }}end(event) {
$(".podproblem{{ forloop.counter }}").css("display", "none")
}
{% endfor %}
</script>
{# TODELETE #}
{% include "vysledkovky/vysledkovka_cisla.html" %}
{% endif %}
{% if not cislo.verejna_vysledkovka and user.je_org %}

8
seminar/templates/seminar/archiv/rocnik.html

@ -72,17 +72,13 @@
{% endif %}
<h2>Výsledková listina</h2>
{% include "seminar/vysledkovka_rocnik.html" %}
{% include "vysledkovky/vysledkovka_rocnik.html" %}
{% endif %}
{% if user.je_org %}
<div class='mam-org-only'>
<h2>Výsledková listina včetně neveřejných bodů</h2>
{% 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" %}
</div>
{% endif %}

8
seminar/templates/seminar/zadani/AktualniVysledkovka.html

@ -9,7 +9,7 @@
</h1>
{% if radky_vysledkovky %}
{% include "seminar/vysledkovka_rocnik.html" %}
{% include "vysledkovky/vysledkovka_rocnik.html" %}
{% else %}
<p>V tomto ročníku zatím žádné výsledky nejsou.</p>
{% endif %}
@ -22,11 +22,7 @@
{% if user.je_org and vysledkovka_s_neverejnymi %}
<div class='mam-org-only'>
<h1>Výsledky včetně neveřejných</h1>
{% 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" %}
</div>
{% endif %}

54
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)

3
vysledkovky/__init__.py

@ -0,0 +1,3 @@
"""
Obsahuje výsledkovky a vše, co se týká sčítání bodů.
"""

5
vysledkovky/apps.py

@ -0,0 +1,5 @@
from django.apps import AppConfig
class VysledkovkyConfig(AppConfig):
name = 'vysledkovky'

0
vysledkovky/migrations/__init__.py

66
vysledkovky/templates/vysledkovky/vysledkovka_cisla.html

@ -0,0 +1,66 @@
<table class='vysledkovka'>
<tr class='border-b'>
<th class='border-r'>#
<th class='border-r'>Jméno
{% for p in problemy %}
<th class='border-r' id="problem{{ forloop.counter }}">{# <a href="{{ p.verejne_url }}"> #}{{ p.kod_v_rocniku }}{# </a> #}
{# TODELETE #}
{% for podproblemy in podproblemy_iter.next %}
<th class='border-r podproblem{{ forloop.parentloop.counter }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}{{ podproblemy.kod_v_rocniku }}{# </a> #}
{% endfor %}
{# TODELETE #}
{% endfor %}
{% if ostatni %}<th class='border-r'>Ostatní {% endif %}
{# TODELETE #}
{% for podproblemy in podproblemy_iter.next %}
<th class='border-r podproblem{{ problemy.len }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}{{ podproblemy.kod_v_rocniku }}{# </a> #}
{% endfor %}
{# TODELETE #}
<th class='border-r'>Za číslo
<th class='border-r'>Za ročník
<th class='border-r'>Odjakživa
{% for rv in radky_vysledkovky %}
<tr>
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
<th class='border-r'>
{% if rv.titul %}
{{ rv.titul }}<sup>MM</sup>
{% endif %}
{{ rv.resitel.osoba.plne_jmeno }}
{% for b in rv.body_problemy_sezn %}
<td class='border-r'>{{ b }}
{# TODELETE #}
{% for body_podproblemu in rv.body_podproblemy_iter.next %}
<td class='border-r podproblem{{ forloop.parentloop.counter }} podproblem'>{{ body_podproblemu }}
{% endfor %}
{# TODELETE #}
{% endfor %}
<td class='border-r'>{{ rv.body_cislo }}
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
<td class='border-r'>{{ rv.body_celkem_odjakziva }}
</tr>
{% endfor %}
</table>
{# TODELETE #}
<script>
{% for p in problemy %}
$(".podproblem{{ forloop.counter }}").css("display", "none")
$("#problem{{ forloop.counter }}")[0].addEventListener('mouseover', podproblem{{ forloop.counter }})
$("#problem{{ forloop.counter }}")[0].addEventListener('mouseout', podproblem{{ forloop.counter }}end)
function podproblem{{ forloop.counter }}(event) {
$(".podproblem{{ forloop.counter }}").css("display", "")
}
function podproblem{{ forloop.counter }}end(event) {
$(".podproblem{{ forloop.counter }}").css("display", "none")
}
{% endfor %}
</script>
{# TODELETE #}

0
seminar/templates/seminar/vysledkovka_rocnik.html → vysledkovky/templates/vysledkovky/vysledkovka_rocnik.html

1
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 %}

25
seminar/views/vysledkovka.py → 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__())
)

37
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
Loading…
Cancel
Save