vysledkovka | uklid a procisteni
This commit is contained in:
parent
194658c64d
commit
fdc38f99bc
3 changed files with 13 additions and 35 deletions
|
@ -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é už 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 problemy
|
||||
return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body = cislo)).distinct().select_related('nadproblem').select_related('nadproblem__nadproblem')
|
||||
|
||||
|
||||
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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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…
Reference in a new issue