Browse Source

vysledkovka | uklid a procisteni

export_seznamu_prednasek
parent
commit
fdc38f99bc
  1. 34
      seminar/utils.py
  2. 6
      seminar/views/views_all.py
  3. 8
      seminar/views/vysledkovka.py

34
seminar/utils.py

@ -240,38 +240,16 @@ def hlavni_problem(problem):
problem = problem.nadproblem
return problem
def hlavni_problemy_rocniku(rocnik, jen_verejne=True):
""" Pro zadaný ročník vrátí hlavní problémy ročníku,
tj. ty, které nemají nadproblém."""
hlavni_problemy = []
for cislo in cisla_rocniku(rocnik, jen_verejne):
for problem in hlavni_problemy_cisla(cislo):
hlavni_problemy.append(problem)
hlavni_problemy_set = set(hlavni_problemy)
hlavni_problemy = list(hlavni_problemy_set)
hlavni_problemy.sort(key=lambda k:k.kod_v_rocniku) # setřídit podle pořadí
return hlavni_problemy
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')
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().select_related('nadproblem')
# hodnoceni = cislo.hodnoceni.select_related('problem').all()
# hodnocení, která se vážou k danému číslu
# problemy = [h.problem for h in hodnoceni]
# problemy_set = set(problemy) # chceme každý problém unikátně,
# problemy = (list(problemy_set)) # převedení na množinu a zpět to zaručí
return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body = cislo)).distinct().select_related('nadproblem').select_related('nadproblem__nadproblem')
# return problemy
def hlavni_problemy_cisla(cislo, problemy=None):
""" Vrátí seznam všech problémů s body v daném čísle, které již nemají nadproblém. """
if problemy is None:
problemy = problemy_cisla(cislo)
def hlavni_problemy_f(problemy=None):
""" Vrátí seznam všech problémů, které již nemají nadproblém. """
# hlavní problémy čísla
# (mají vlastní sloupeček ve výsledkovce, nemají nadproblém)
hlavni_problemy = set()
@ -290,7 +268,7 @@ def podproblemy_v_cislu(cislo, problemy=None, hlavni_problemy=None):
if problemy is None:
problemy = problemy_cisla(cislo)
if hlavni_problemy is None:
hlavni_problemy = hlavni_problemy_cisla(cislo, problemy)
hlavni_problemy = hlavni_problemy_f(problemy)
podproblemy = dict((hp.id, []) for hp in hlavni_problemy)
hlavni_problemy = set(hlavni_problemy)

6
seminar/views/views_all.py

@ -49,7 +49,7 @@ import csv
import logging
import time
from seminar.utils import aktivniResitele, resi_v_rocniku, hlavni_problemy_rocniku, cisla_rocniku, hlavni_problemy_cisla
from seminar.utils import aktivniResitele, resi_v_rocniku, problemy_rocniku, cisla_rocniku, hlavni_problemy_f
# ze starého modelu
#def verejna_temata(rocnik):
@ -657,10 +657,10 @@ class RocnikView(generic.DetailView):
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_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_rocniku(context["rocnik"])
context['radky_vysledkovky'] = vysledkovka_rocniku(context["rocnik"])
context['hlavni_problemy_v_rocniku'] = hlavni_problemy_rocniku(context["rocnik"])
context['hlavni_problemy_v_rocniku'] = hlavni_problemy_f(problemy_rocniku(context["rocnik"]))
end = time.time()
print("Kontext:", end-start)

8
seminar/views/vysledkovka.py

@ -1,6 +1,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_problemy_rocniku, hlavni_problem, hlavni_problemy_cisla, problemy_cisla, podproblemy_v_cislu
from seminar.utils import aktivniResitele, resi_v_rocniku, cisla_rocniku, hlavni_problem, hlavni_problemy_f, problemy_cisla, podproblemy_v_cislu
import time
### Výsledky
@ -239,7 +239,7 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
print("Scitam cislo",cislo)
if hlavni_problemy is None:
hlavni_problemy = hlavni_problemy_cisla(cislo)
hlavni_problemy = hlavni_problemy_f(problemy_cisla(cislo))
def ne_clanek_ne_konfera(problem):
inst = problem.get_real_instance()
@ -300,7 +300,7 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
def secti_body_za_cislo_podle_temat(cislo, aktivni_resitele, podproblemy=None, temata=None):
""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních problémech (témata)."""
if temata is None:
temata = hlavni_problemy_cisla(cislo)
temata = hlavni_problemy_f(problemy_cisla(cislo))
if podproblemy is None:
podproblemy_v_cislu(cislo, hlavni_problemy=temata)
@ -370,7 +370,7 @@ def vysledkovka_cisla(cislo, context=None):
if context is None:
context = {}
problemy = problemy_cisla(cislo)
hlavni_problemy = hlavni_problemy_cisla(cislo, problemy)
hlavni_problemy = hlavni_problemy_f(problemy)
## TODO možná chytřeji vybírat aktivní řešitele
# aktivní řešitelé - chceme letos něco poslal, TODO později vyfiltrujeme ty, kdo mají
# u alespoň jedné hodnoty něco jiného než NULL

Loading…
Cancel
Save