From 67c1e43dc1588fb3db4c1e68dd743895317421b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= <katterrina98@gmail.com>
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 @@
 
   <div class="vitej">
     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 %}
+    <a href="{{ tema.url }}"> <div class="button"> {{ tema.nazev }} </div> </a>
+    {% endfor %}
   </div>
   
 </div>
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)