Oprava generování výsledkovky čísla: čára mezi odjakživa a celkem, setřízení
sdílených pozic podle příjmení, jména. Generování výsledkovky ročníku, funguje i průběžně.
This commit is contained in:
		
							parent
							
								
									0b30583b0a
								
							
						
					
					
						commit
						18fc4f98e8
					
				
					 4 changed files with 86 additions and 47 deletions
				
			
		|  | @ -221,7 +221,7 @@ class Resitel(SeminarModelBase): | ||||||
|                 else: |                 else: | ||||||
|                     return 'Z' + str(rozdil + 9) |                     return 'Z' + str(rozdil + 9) | ||||||
| 
 | 
 | ||||||
|     def titul(self, celkove_body): |     def get_titul(self, celkove_body): | ||||||
| 		"Vrati titul podle zadaneho poctu bodu." | 		"Vrati titul podle zadaneho poctu bodu." | ||||||
| 		if celkove_body < 10: | 		if celkove_body < 10: | ||||||
| 			return '' | 			return '' | ||||||
|  |  | ||||||
|  | @ -35,18 +35,18 @@ | ||||||
|       <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.cislo_zadani.cislo }}.{{ p.kod }}</a> |       <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.cislo_zadani.cislo }}.{{ p.kod }}</a> | ||||||
|       {% endfor %} |       {% endfor %} | ||||||
|       <th class='border-r'>Sum<sup>-1</sup> |       <th class='border-r'>Sum<sup>-1</sup> | ||||||
|       <th>Celkem |       <th class='border-r'>Celkem | ||||||
|       <th>Odjakživa |       <th class='border-r'>Odjakživa | ||||||
|   {% for rv in vysledkovka %} |   {% for rv in vysledkovka %} | ||||||
|     <tr> |     <tr> | ||||||
|       <td class='border-r'>{{ rv.poradi }} |       <td class='border-r'>{{ rv.poradi }} | ||||||
|         <th class='border-r'>{{ rv.resitel.plne_jmeno }} {{ rv.titul }} | 		  <th class='border-r'> {{ rv.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }} | ||||||
|       {% for b in rv.body %} |       {% for b in rv.body %} | ||||||
|       <td class='border-r'>{{ b }} |       <td class='border-r'>{{ b }} | ||||||
|       {% endfor %} |       {% endfor %} | ||||||
|       <td class='border-r'>{{ rv.body_minule }} |       <td class='border-r'>{{ rv.body_minule }} | ||||||
|       <td><b>{{ rv.body_celkem_rocnik }}</b> |       <td class='border-r'><b>{{ rv.body_celkem_rocnik }}</b> | ||||||
|       <td>{{ rv.body_celkem_odjakziva }} |       <td class='border-r'>{{ rv.body_celkem_odjakziva }} | ||||||
|     </tr> |     </tr> | ||||||
|   {% endfor %} |   {% endfor %} | ||||||
|   </table> |   </table> | ||||||
|  |  | ||||||
|  | @ -12,6 +12,38 @@ | ||||||
|   {% endfor %} |   {% endfor %} | ||||||
|   </ul> |   </ul> | ||||||
| 
 | 
 | ||||||
|  |   <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'>{{ rv.poradi }} | ||||||
|  | 	  <th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }} | ||||||
|  |       <td class='border-r'>{{ rv.resitel.rocnik }} | ||||||
|  |       <td class='border-r'>{{ rv.body_odjakziva }} | ||||||
|  |       {% for b in rv.body %} | ||||||
|  |       <td class='border-r'>{{ b }} | ||||||
|  |       {% endfor %} | ||||||
|  |       <td class='border-r'><b>{{ rv.body_rocnik }}</b> | ||||||
|  |     </tr> | ||||||
|  |   {% endfor %} | ||||||
|  |   </table> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| {% endblock content %} | {% endblock content %} | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -49,15 +49,11 @@ class RocnikView(generic.DetailView): | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         context = super(RocnikView, self).get_context_data(**kwargs) |         context = super(RocnikView, self).get_context_data(**kwargs) | ||||||
| 
 | 
 | ||||||
|         vysledkyCelkem = VysledkyCelkemKCislu.objects.all().order_by('-body_celkem').select_related("resitel") |         cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo') | ||||||
|        # vysledkyCisla = VysledkyKCislu.objects.filter(cislo.rocnik = context[]) |         #vyberu vsechny verejne vysledky z rocniku | ||||||
| 
 |         vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel') | ||||||
|         problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) |         #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu | ||||||
|         #setridi problemy podle typu a poradi zadani |        #  cisla = Cislo.objects.all().filter(rocnik.id = context['rocnik'].id).order_by('+cislo') | ||||||
|         problem_index = {} |  | ||||||
|         for i in range(len(problemy)): |  | ||||||
|             problem_index[problemy[i].id] = i |  | ||||||
|             #umoznuje zjistit index podle id problemu |  | ||||||
| 
 | 
 | ||||||
|         vysledky_resitele = {} |         vysledky_resitele = {} | ||||||
|         stejne_body = {} |         stejne_body = {} | ||||||
|  | @ -69,54 +65,65 @@ class RocnikView(generic.DetailView): | ||||||
| 
 | 
 | ||||||
|         for vi in range(len(vysledky)): |         for vi in range(len(vysledky)): | ||||||
|             v = vysledky[vi] |             v = vysledky[vi] | ||||||
|             tv = RadekVysledkovky() |             rv = RadekVysledkovky() | ||||||
|             tv.resitel = v.resitel   |             rv.resitel = v.resitel   | ||||||
|             tv.rocnik = tv.resitel.rocnik(context['cislo'].datum_vydani) |             verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo) | ||||||
|             tv.resitel.titul = tv.resitel.titul(v.body_celkem) |             rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body | ||||||
|             tv.vysledek = v |             rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva) | ||||||
|             #odkazuje na VysledkyKCislu |             rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik']) | ||||||
|             tv.body = ['']*len(problemy) |             rv.body = []*len(context['rocnik'].verejna_cisla()) | ||||||
|             #pole bodu za ulohy |             #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 | ||||||
|             tv.poradi = '' |             for cis in context['rocnik'].verejna_cisla(): | ||||||
|  |                 if cis.verejna_vysledkovka: | ||||||
|  |                     print cis | ||||||
|  |                     body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel) | ||||||
|  |                     #seznam vysledku se spravnym rocnikem a cislem pro resitele | ||||||
|  |                     #zobrazim jen je-li vysledkovka verejna | ||||||
|  |                     if body_za_cislo: | ||||||
|  |                         rv.body.append(body_za_cislo[0].body) | ||||||
|  |                         #neprazdne vysledky by mely obsahovat prave jeden vysledek | ||||||
|  |                     else: | ||||||
|  |                         rv.body.append(0) | ||||||
|  |                         #resitel nema za cislo body | ||||||
|  |             rv.poradi = '' | ||||||
|             #defaultni poradi je prazdne - kvuli sdilenym mistum |             #defaultni poradi je prazdne - kvuli sdilenym mistum | ||||||
|             tv.body_minule = 0 |             rv.body_rocnik = v.body | ||||||
|             #pocet bodu do tohoto cisla |             rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik | ||||||
|             if posledni_body > v.body_celkem: |             #body za minule rocniky | ||||||
|  |             if posledni_body > v.body: | ||||||
|                 if stejne_body.get(posledni_body): |                 if stejne_body.get(posledni_body): | ||||||
|  |                     #pokud uz jsme predtim narazili na stejny pocet bodu | ||||||
|                     konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] |                     konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] | ||||||
|                     #druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body |                     #druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body | ||||||
|                     predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body]) |                     predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body]) | ||||||
|                     #predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu |                     #predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu | ||||||
|                 elif predchozi_poradi : |                 elif predchozi_poradi : | ||||||
|                     predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) |                     predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) | ||||||
|                     #pokud nebyl rozsah hodnot, pridam tecku za cislo |                     #pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo | ||||||
|                 posledni_body = v.body_celkem |                 posledni_body = v.body | ||||||
|                 tv.poradi = vi + 1 |                 rv.poradi = vi + 1 | ||||||
|                 #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly |                 #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly | ||||||
|                 predchozi_poradi = tv |                 predchozi_poradi = rv | ||||||
|             elif posledni_body == v.body_celkem: |             elif posledni_body == v.body: | ||||||
|                 if not stejne_body.get(v.body_celkem): |                 if not stejne_body.get(v.body): | ||||||
|                     stejne_body[v.body_celkem] = 1 |                     stejne_body[v.body] = 1 | ||||||
|                     #pokud klic neexistuje, zalozim novy pro tohoto resitele |                     #pokud klic neexistuje, zalozim novy pro tohoto resitele | ||||||
|                 else: |                 else: | ||||||
|                     stejne_body[v.body_celkem] += 1 |                     stejne_body[v.body] += 1 | ||||||
|                     #rozsirim pocet resitelu sdilejici stejnou pozici |                     #rozsirim pocet resitelu sdilejici stejnou pozici | ||||||
|             vysledky_resitele[v.resitel.id] = tv |             vysledky_resitele[v.resitel.id] = rv | ||||||
|             #odkaz na radek vysledkovky patrici danemu resiteli |             #odkaz na radek vysledkovky patrici danemu resiteli | ||||||
|             vysledkovka.append(tv) |             vysledkovka.append(rv) | ||||||
| 
 | 
 | ||||||
|         for r in reseni: |         context['vysledkovka'] = vysledkovka | ||||||
|  |         return context | ||||||
|  | '''       for r in reseni: | ||||||
|             vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body |             vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body | ||||||
|             body_za_cislo = vysledky_resitele[r.resitel.id].vysledek.body |             body_za_cislo = vysledky_resitele[r.resitel.id].vysledek.body | ||||||
|             #body za toto cislo, stejne jako tv.vysledek.body |             #body za toto cislo, stejne jako tv.vysledek.body | ||||||
|             body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem |             body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem | ||||||
|             vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo  |             vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo  | ||||||
|          |     '''     | ||||||
| 
 |  | ||||||
|         context['vysledkovka'] = vysledkovka |  | ||||||
|         context['problemy'] = problemy |  | ||||||
|         return context |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| class ProblemView(generic.DetailView): | class ProblemView(generic.DetailView): | ||||||
|     model = Problem |     model = Problem | ||||||
|  | @ -147,7 +154,7 @@ class CisloView(generic.DetailView): | ||||||
|     def get_context_data(self, **kwargs): |     def get_context_data(self, **kwargs): | ||||||
|         context = super(CisloView, self).get_context_data(**kwargs) |         context = super(CisloView, self).get_context_data(**kwargs) | ||||||
| 
 | 
 | ||||||
|         vysledky = VysledkyKCisluZaRocnik.objects.filter(cislo = context['cislo']).order_by('-body').select_related("resitel") |         vysledky = VysledkyKCisluZaRocnik.objects.filter(cislo = context['cislo']).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno') | ||||||
|         reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel") |         reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel") | ||||||
| 
 | 
 | ||||||
|         problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) |         problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) | ||||||
|  | @ -169,7 +176,7 @@ class CisloView(generic.DetailView): | ||||||
|             v = vysledky[vi] |             v = vysledky[vi] | ||||||
|             tv = RadekVysledkovky() |             tv = RadekVysledkovky() | ||||||
|             tv.resitel = v.resitel   |             tv.resitel = v.resitel   | ||||||
|             tv.resitel.titul = tv.resitel.titul(v.body_celkem) |             tv.resitel.titul = tv.resitel.get_titul(v.body) | ||||||
|             tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik) |             tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik) | ||||||
|             tv.vysledek = v |             tv.vysledek = v | ||||||
|             #odkazuje na VysledkyKCislu |             #odkazuje na VysledkyKCislu | ||||||
|  | @ -182,7 +189,7 @@ class CisloView(generic.DetailView): | ||||||
|             body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo']) |             body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo']) | ||||||
|             tv.body_cislo = body_cislo_q[0].body if len(body_cislo_q) > 0 else 0 |             tv.body_cislo = body_cislo_q[0].body if len(body_cislo_q) > 0 else 0 | ||||||
|             tv.body_minule = tv.body_celkem_rocnik - tv.body_cislo |             tv.body_minule = tv.body_celkem_rocnik - tv.body_cislo | ||||||
|             tv.titul = tv.resitel.titul(tv.body_celkem_odjakziva) |             tv.titul=tv.resitel.get_titul(int(tv.body_celkem_odjakziva)) | ||||||
|             #pocet bodu do tohoto cisla |             #pocet bodu do tohoto cisla | ||||||
|             if posledni_body > tv.body_celkem_rocnik: |             if posledni_body > tv.body_celkem_rocnik: | ||||||
|                 if stejne_body.get(posledni_body): |                 if stejne_body.get(posledni_body): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Aneta
						Aneta