Zadání: aktuální výsledkovka
This commit is contained in:
		
							parent
							
								
									0e6d95615e
								
							
						
					
					
						commit
						0d68c40c73
					
				
					 5 changed files with 112 additions and 70 deletions
				
			
		|  | @ -29,38 +29,8 @@ | |||
|   {% endif %} | ||||
| 
 | ||||
|   {% if vysledkovka %} | ||||
|     <h3>Výsledkovka</h3> | ||||
|     <table class='vysledkovka'> | ||||
|       <tr class='border-b'> | ||||
|         <th class='border-r'># | ||||
|         <th class='border-r'>Jméno | ||||
|         <th class='border-r'>R. | ||||
|         <th class='border-r'>Odjakživa | ||||
|             {% for c in rocnik.verejna_cisla %} | ||||
|             {% if c.verejna_vysledkovka %} | ||||
|         <th class='border-r'><a href="{{ c.verejne_url }}"> | ||||
|                 {{c.rocnik.rocnik}}.{{ c.cislo }}</a> | ||||
|              {% endif %} | ||||
|         {% endfor %} | ||||
|         <th class='border-r'>Celkem | ||||
| 
 | ||||
|     {% for rv in vysledkovka %} | ||||
|       <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.plne_jmeno }} | ||||
|         <td class='border-r'>{{ rv.resitel.rocnik }} | ||||
|         <td class='border-r'>{{ rv.body_odjakziva }} | ||||
|         {% for b in rv.body_cisla %} | ||||
|         <td class='border-r'>{{ b }} | ||||
|         {% endfor %} | ||||
|         <td class='border-r'><b>{{ rv.body_rocnik }}</b> | ||||
|       </tr> | ||||
|     {% endfor %} | ||||
|     </table> | ||||
|     <h3>Výsledková listina</h3> | ||||
|     {% include "seminar/vysledkovka_rocnik.html" %} | ||||
|   {% endif %} | ||||
| 
 | ||||
| </div> | ||||
|  |  | |||
							
								
								
									
										31
									
								
								seminar/templates/seminar/vysledkovka_rocnik.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								seminar/templates/seminar/vysledkovka_rocnik.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| <table class='vysledkovka'> | ||||
|   <tr class='border-b'> | ||||
|     <th class='border-r'># | ||||
|     <th class='border-r'>Jméno | ||||
|     <th class='border-r'>R. | ||||
|     <th class='border-r'>Odjakživa | ||||
|         {% for c in rocnik.verejna_cisla %} | ||||
|         {% if c.verejna_vysledkovka %} | ||||
|     <th class='border-r'><a href="{{ c.verejne_url }}"> | ||||
|             {{c.rocnik.rocnik}}.{{ c.cislo }}</a> | ||||
|          {% endif %} | ||||
|     {% endfor %} | ||||
|     <th class='border-r'>Celkem | ||||
| 
 | ||||
| {% for rv in vysledkovka %} | ||||
|   <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.plne_jmeno }} | ||||
|     <td class='border-r'>{{ rv.resitel.rocnik }} | ||||
|     <td class='border-r'>{{ rv.body_odjakziva }} | ||||
|     {% for b in rv.body_cisla %} | ||||
|     <td class='border-r'>{{ b }} | ||||
|     {% endfor %} | ||||
|     <td class='border-r'><b>{{ rv.body_rocnik }}</b> | ||||
|   </tr> | ||||
| {% endfor %} | ||||
| </table> | ||||
							
								
								
									
										19
									
								
								seminar/templates/seminar/zadani/AktualniVysledkovka.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								seminar/templates/seminar/zadani/AktualniVysledkovka.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| {% extends "seminar/zadani/base.html" %} | ||||
| 
 | ||||
| {% block submenu %} | ||||
|   {% with "vysledkova-listina" as selected %} | ||||
|   {% include 'seminar/zadani/submenu.html' %} | ||||
|   {% endwith %} | ||||
| {% endblock submenu %} | ||||
| 
 | ||||
| 
 | ||||
| {% block content %} | ||||
| {% with nastaveni.aktualni_rocnik as rocnik %} | ||||
|   <h2>Výsledky</h2> | ||||
|   {% if vysledkovka %} | ||||
|     {% include "seminar/vysledkovka_rocnik.html" %} | ||||
|   {% else %} | ||||
|     V tomto ročníku zatím žádné výsledky nejsou | ||||
|   {% endif %} | ||||
| {% endwith %} | ||||
| {% endblock content %} | ||||
|  | @ -19,6 +19,7 @@ urlpatterns = patterns('', | |||
| 
 | ||||
|     url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'), | ||||
|     url(r'^zadani/temata/$', views.ZadaniTemataView, name='seminar_temata'), | ||||
|     url(r'^zadani/vysledkova-listina/$', views.ZadaniAktualniVysledkovkaView, name='seminar_vysledky'), | ||||
|     url(r'^$', views.TitulniStranaView.as_view(), name='titulni_strana'), | ||||
|     url(r'^stare-novinky/$', views.StareNovinkyView.as_view(), name='stare_novinky'), | ||||
| 
 | ||||
|  |  | |||
|  | @ -37,6 +37,17 @@ def ZadaniTemataView(request): | |||
|         } | ||||
|     ) | ||||
| 
 | ||||
| def ZadaniAktualniVysledkovkaView(request): | ||||
|     nastaveni = get_object_or_404(Nastaveni) | ||||
|     vysledkovka = vysledkovka_rocniku(nastaveni.aktualni_rocnik) | ||||
|     return render(request, 'seminar/zadani/AktualniVysledkovka.html', | ||||
|         { | ||||
|             'nastaveni': nastaveni, | ||||
|             'vysledkovka': vysledkovka, | ||||
|         } | ||||
|     ) | ||||
| 
 | ||||
| 
 | ||||
| ### Titulni strana | ||||
| 
 | ||||
| class TitulniStranaView(generic.ListView): | ||||
|  | @ -110,6 +121,53 @@ def sloupec_s_poradim(vysledky): | |||
|     return poradi_l | ||||
| 
 | ||||
| 
 | ||||
| def vysledkovka_rocniku(rocnik): | ||||
|     """Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve | ||||
|     formě vhodné pro šablonu "seminar/vysledkovka_rocniku.html" | ||||
|     """ | ||||
| 
 | ||||
|     #vyberu vsechny verejne vysledky z rocniku | ||||
|     cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka=True, cislo__rocnik=rocnik).order_by('cislo') | ||||
| 
 | ||||
|     #pokud žádné nejsou, výsledkovka se nezobrazí | ||||
|     if not cisla_v_rocniku: | ||||
|         return None | ||||
| 
 | ||||
|     #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu | ||||
|     vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')) | ||||
| 
 | ||||
|     vysledkovka = [] | ||||
| 
 | ||||
|     # doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině | ||||
|     for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky): | ||||
|         v.poradi = poradi | ||||
|         v.resitel.rocnik = v.resitel.rocnik(rocnik) | ||||
| 
 | ||||
|         verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka=True, cislo__rocnik=rocnik, cislo=cisla_v_rocniku[0].cislo) | ||||
| 
 | ||||
|         v.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = v.resitel)[0].body | ||||
|         v.titul = v.resitel.get_titul(v.body_odjakziva) | ||||
|         v.body_rocnik = v.body | ||||
|         v.body_cisla = [] | ||||
| 
 | ||||
|         #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 | ||||
|         for cis in rocnik.verejna_cisla(): | ||||
|             if cis.verejna_vysledkovka: | ||||
|                 #seznam vysledku se spravnym rocnikem a cislem pro resitele | ||||
|                 #zobrazim jen je-li vysledkovka verejna | ||||
|                 body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik=rocnik).filter(cislo = cis).filter(resitel = v.resitel) | ||||
|                 if body_za_cislo: | ||||
|                     #neprazdne vysledky by mely obsahovat prave jeden vysledek | ||||
|                     v.body_cisla.append(body_za_cislo[0].body) | ||||
|                 else: | ||||
|                     #resitel nema za cislo body | ||||
|                     v.body_cisla.append(0) | ||||
| 
 | ||||
|         vysledkovka.append(v) | ||||
| 
 | ||||
|     return vysledkovka | ||||
| 
 | ||||
| 
 | ||||
| class RocnikView(generic.DetailView): | ||||
|     model = Rocnik | ||||
|     template_name = 'seminar/archiv/rocnik.html' | ||||
|  | @ -131,44 +189,7 @@ class RocnikView(generic.DetailView): | |||
|     def get_context_data(self, **kwargs): | ||||
|         context = super(RocnikView, self).get_context_data(**kwargs) | ||||
| 
 | ||||
|         cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('cislo') | ||||
|         #vyberu vsechny verejne vysledky z rocniku | ||||
|         #pokud žádné nejsou, výsledkovka se nezobrazí | ||||
|         if cisla_v_rocniku: | ||||
|             vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')) | ||||
|             #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu | ||||
|             vysledkovka = [] | ||||
| 
 | ||||
|             # doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině | ||||
|             for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky): | ||||
|                 v.poradi = poradi | ||||
|                 v.resitel.rocnik = v.resitel.rocnik(context['rocnik']) | ||||
| 
 | ||||
|                 verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo) | ||||
| 
 | ||||
|                 v.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = v.resitel)[0].body | ||||
|                 v.titul = v.resitel.get_titul(v.body_odjakziva) | ||||
|                 v.body_rocnik = v.body | ||||
|                 v.body_cisla = [] | ||||
| 
 | ||||
|                 #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 | ||||
|                 for cis in context['rocnik'].verejna_cisla(): | ||||
|                     if cis.verejna_vysledkovka: | ||||
|                         body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = v.resitel) | ||||
|                         #seznam vysledku se spravnym rocnikem a cislem pro resitele | ||||
|                         #zobrazim jen je-li vysledkovka verejna | ||||
|                         if body_za_cislo: | ||||
|                             v.body_cisla.append(body_za_cislo[0].body) | ||||
|                             #neprazdne vysledky by mely obsahovat prave jeden vysledek | ||||
|                         else: | ||||
|                             v.body_cisla.append(0) | ||||
|                             #resitel nema za cislo body | ||||
| 
 | ||||
|                 vysledkovka.append(v) | ||||
| 
 | ||||
| 
 | ||||
|             context['vysledkovka'] = vysledkovka | ||||
| 
 | ||||
|         context['vysledkovka'] = vysledkovka_rocniku(context["rocnik"]) | ||||
|         temata_v_rocniku = Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=context['rocnik']).order_by('kod') | ||||
|         context['temata_v_rocniku'] = temata_v_rocniku | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Matěj Kocián
						Matěj Kocián