From 67c1e43dc1588fb3db4c1e68dd743895317421b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Wed, 15 Jul 2020 11:21:16 +0200 Subject: [PATCH] =?UTF-8?q?p=C5=99id=C3=A1n=C3=AD=20odkaz=C5=AF=20na=20akt?= =?UTF-8?q?ivn=C3=AD=20t=C3=A9mata=20na=20tituln=C3=AD=20str=C3=A1nku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 1 + seminar/templates/seminar/titulnistrana.html | 3 ++ seminar/views/views_all.py | 42 ++++++++++++++------ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index deb0c9b9..85188b1b 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -698,6 +698,7 @@ class Problem(SeminarModelBase,PolymorphicModel): (STAV_SMAZANY, 'Smazaný'), ] stav = models.CharField('stav problému', max_length=32, choices=STAV_CHOICES, blank=False, default=STAV_NAVRH) + # Téma je taky Problém, takže má stavy, "zadané" témátko je aktuálně otevřené a dá se k němu něco poslat (řešení nebo článek) zamereni = TaggableManager(verbose_name='zaměření', help_text='Zaměření M/F/I/O problému, příp. další tagy', blank=True) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 6b5c2fd5..c578c3d6 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -40,6 +40,9 @@
Přidej se k nám! Pusť se do řešení témát a pojeď na soustředění. + {% for tema in aktualni_temata %} +
{{ tema.nazev }}
+ {% endfor %}
diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 775de011..dd83ef83 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -43,14 +43,15 @@ import time from seminar.utils import aktivniResitele, resi_v_rocniku - -def verejna_temata(rocnik): - """Vrací queryset zveřejněných témat v daném ročníku. - """ - return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod') - -def temata_v_rocniku(rocnik): - return Problem.objects.filter(typ=Problem.TYP_TEMA, rocnik=rocnik) +# ze starého modelu +#def verejna_temata(rocnik): +# """ +# Vrací queryset zveřejněných témat v daném ročníku. +# """ +# return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod') +# +#def temata_v_rocniku(rocnik): +# return Problem.objects.filter(typ=Problem.TYP_TEMA, rocnik=rocnik) def get_problemy_k_tematu(tema): return Problem.objects.filter(nadproblem = tema) @@ -242,6 +243,12 @@ def spravne_novinky(request): qs = qs.filter(zverejneno=True) return qs.order_by('-datum') +def aktualni_temata(rocnik): + """ + Vrací PolymorphicQuerySet témat v daném ročníku, ke kterým se aktuálně dá něco odevzdat. + """ + return Tema.objects.filter(rocnik=rocnik, stav='zadany').order_by('kod') + class TitulniStranaView(generic.ListView): template_name='seminar/titulnistrana.html' @@ -283,7 +290,16 @@ class TitulniStranaView(generic.ListView): context['deadline_soustredeni'] = deadline_soustredeni # Aktuální témata - + nazvy_a_odkazy_na_aktualni_temata = [] + akt_temata = aktualni_temata(nastaveni.aktualni_rocnik) + + for tema in akt_temata: + # FIXME: netuším, jestli funguje tema.verejne_url(), nemáme testdata na témátka - je to asi url vzhledem k ročníku + nazvy_a_odkazy_na_aktualni_temata.append({'nazev':tema.nazev,'url':tema.verejne_url()}) + + context['aktualni_temata'] = nazvy_a_odkazy_na_aktualni_temata + + print(context) return context @@ -347,7 +363,8 @@ class ArchivView(generic.ListView): ### Výsledky def sloupec_s_poradim(setrizene_body): - """ Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník + """ + Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník vytvoří seznam s pořadími (včetně 3.-5. a pak 2 volná místa atp.), podle toho, jak jdou za sebou ve výsledkovce. Parametr: @@ -387,7 +404,8 @@ def sloupec_s_poradim(setrizene_body): return sloupec_s_poradim def cisla_rocniku(rocnik, jen_verejne=True): - """ Vrátí všechna čísla daného ročníku. + """ + Vrátí všechna čísla daného ročníku. Parametry: rocnik (Rocnik): ročník semináře jen_verejne (bool): zda se mají vrátit jen veřejná, nebo všechna čísla @@ -542,7 +560,7 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): # získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele) - + # setřídíme řešitele podle počtu bodů a získáme seznam s body od nejvyšších po nenižší setrizeni_resitele_id, setrizeni_resitele, setrizene_body = setrid_resitele_a_body(resitel_rocnikbody_sezn) poradi = sloupec_s_poradim(setrizene_body)