Merge branch 'master' of atrey.karlin.mff.cuni.cz:/akce/MaM/MaMweb/mamweb
Conflicts: seminar/views.py
This commit is contained in:
		
						commit
						0b30583b0a
					
				
					 12 changed files with 284 additions and 41 deletions
				
			
		|  | @ -6,6 +6,12 @@ F2="$2" | |||
| TMPF1=`tempfile` | ||||
| TMPF2=`tempfile` | ||||
| 
 | ||||
| if which colordiff; then | ||||
|   DIFF=colordiff | ||||
| else | ||||
|   DIFF=diff | ||||
| fi | ||||
| 
 | ||||
| if [ "z$F1" == "z" ]; then | ||||
|   echo "Requies argument" | ||||
|   exit 1 | ||||
|  | @ -21,7 +27,7 @@ else | |||
|   cat "$F2" | bunzip2 > "$TMPF2" | ||||
| fi | ||||
| 
 | ||||
| colordiff "$TMPF1" "$TMPF2" | ||||
| $DIFF "$TMPF1" "$TMPF2" | ||||
| 
 | ||||
| rm "$TMPF1" "$TMPF2" | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ from .settings_common import * | |||
| # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ | ||||
| 
 | ||||
| INSTALLED_APPS += ( | ||||
|     'django_extensions', | ||||
|     ) | ||||
| 
 | ||||
| # SECURITY WARNING: keep the secret key used in production secret! | ||||
|  |  | |||
|  | @ -5,7 +5,8 @@ from django.core.urlresolvers import reverse | |||
| from django.views import generic | ||||
| from django.utils.encoding import force_text | ||||
| 
 | ||||
| from .models import Problem, Cislo, Reseni, VysledkyKCislu, Nastaveni, Rocnik, Soustredeni | ||||
| from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni | ||||
| from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | ||||
| from .ovvpfile import OvvpFile | ||||
| 
 | ||||
| class ExportIndexView(generic.View): | ||||
|  | @ -75,7 +76,7 @@ class ExportRocnikView(generic.View): | |||
| 
 | ||||
|         rocnik = get_object_or_404(Rocnik, prvni_rok=pr, exportovat=True) | ||||
|         cislo = rocnik.posledni_zverejnena_vysledkovka_cislo() | ||||
|         vysledky = VysledkyKCislu.objects.filter(cislo = cislo).select_related("resitel").order_by('-body_celkem').all() | ||||
|         vysledky = VysledkyKCisluZaRocnik.objects.filter(cislo = cislo).select_related("resitel").order_by('-body').all() | ||||
| 
 | ||||
|         of = default_ovvpfile('MaM.rocnik', rocnik) | ||||
|         of.headers['comment'] = u'MaM-Web export aktivnich resitelu rocniku {rocnik} do cisla {cislo}'.format( | ||||
|  | @ -91,11 +92,11 @@ class ExportRocnikView(generic.View): | |||
|             v = vysledky[vi] | ||||
|             rd = v.resitel.export_row() | ||||
| 
 | ||||
|             if posledni_body > v.body_celkem: | ||||
|                 posledni_body = v.body_celkem | ||||
|             if posledni_body > v.body: | ||||
|                 posledni_body = v.body | ||||
|                 posledni_poradi = vi + 1 | ||||
|             rd['rank'] = posledni_poradi | ||||
|             rd['points'] = v.body_celkem | ||||
|             rd['points'] = v.body | ||||
| 
 | ||||
|             of.rows.append(rd) | ||||
|          | ||||
|  |  | |||
							
								
								
									
										75
									
								
								seminar/migrations/0028_add_body_celkem_views.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								seminar/migrations/0028_add_body_celkem_views.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
| import django_countries.fields | ||||
| import seminar.models | ||||
| import django.utils.timezone | ||||
| from django.conf import settings | ||||
| 
 | ||||
| CREATE_VIEWS=""" | ||||
| drop view seminar_body_k_cislu; | ||||
| drop view seminar_body_za_cislo; | ||||
| 
 | ||||
| create view seminar_body_za_cislo as | ||||
|   select | ||||
|     seminar_reseni.cislo_body_id || '-' || seminar_reseni.resitel_id as id, | ||||
|     seminar_reseni.cislo_body_id as cislo_id, | ||||
|     seminar_reseni.resitel_id as resitel_id, | ||||
|     seminar_cisla.cislo as cislo, | ||||
|     seminar_cisla.rocnik_id as rocnik_id, | ||||
|     seminar_rocniky.rocnik as rocnik, | ||||
|     seminar_cisla.verejna_vysledkovka as verejna_vysledkovka, | ||||
|     sum(seminar_reseni.body) as body | ||||
|   from | ||||
|     seminar_reseni | ||||
|     inner join seminar_cisla on seminar_reseni.cislo_body_id = seminar_cisla.id | ||||
|     inner join seminar_rocniky on seminar_cisla.rocnik_id = seminar_rocniky.id | ||||
|   group by seminar_reseni.cislo_body_id, seminar_reseni.resitel_id, seminar_cisla.cislo, | ||||
|     seminar_cisla.rocnik_id, seminar_rocniky.rocnik, seminar_cisla.verejna_vysledkovka | ||||
|   order by body desc; | ||||
| 
 | ||||
| create view seminar_body_k_cislu_rocnik as | ||||
|   select | ||||
|     akt_body.id as id, | ||||
|     akt_body.cislo_id as cislo_id, | ||||
|     akt_body.resitel_id as resitel_id, | ||||
|     akt_body.body as body, | ||||
|     sum(min_body.body) as body_celkem | ||||
|   from | ||||
|     seminar_body_za_cislo as akt_body | ||||
|     inner join seminar_body_za_cislo as min_body on | ||||
|       (akt_body.resitel_id = min_body.resitel_id and | ||||
|         (akt_body.rocnik = min_body.rocnik and akt_body.cislo >= min_body.cislo) | ||||
|       ) | ||||
|   group by akt_body.id, akt_body.cislo_id, akt_body.resitel_id, akt_body.body | ||||
|   order by body_celkem desc; | ||||
| 
 | ||||
| create view seminar_body_k_cislu_odjakziva as | ||||
|   select | ||||
|     akt_body.id as id, | ||||
|     akt_body.cislo_id as cislo_id, | ||||
|     akt_body.resitel_id as resitel_id, | ||||
|     akt_body.body as body, | ||||
|     sum(min_body.body) as body_celkem | ||||
|   from | ||||
|     seminar_body_za_cislo as akt_body | ||||
|     inner join seminar_body_za_cislo as min_body on | ||||
|       (akt_body.resitel_id = min_body.resitel_id and | ||||
|         ((akt_body.rocnik = min_body.rocnik and akt_body.cislo >= min_body.cislo) or | ||||
|          (akt_body.rocnik < min_body.rocnik) | ||||
|         ) | ||||
|       ) | ||||
|   group by akt_body.id, akt_body.cislo_id, akt_body.resitel_id, akt_body.body | ||||
|   order by body_celkem desc; | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     dependencies = [("seminar", "0027_export_flag_a_typ_akce")] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.RunSQL(sql=CREATE_VIEWS) | ||||
|         ] | ||||
| 
 | ||||
							
								
								
									
										51
									
								
								seminar/migrations/0029_fix_body_celkem_views.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								seminar/migrations/0029_fix_body_celkem_views.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,51 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
| import django_countries.fields | ||||
| import seminar.models | ||||
| import django.utils.timezone | ||||
| from django.conf import settings | ||||
| 
 | ||||
| CREATE_VIEWS=""" | ||||
| 
 | ||||
| drop view seminar_body_k_cislu_rocnik; | ||||
| create view seminar_body_k_cislu_rocnik as | ||||
|   select | ||||
|     seminar_cisla.id || '-' || min_body.resitel_id as id, | ||||
|     seminar_cisla.id as cislo_id, | ||||
|     min_body.resitel_id as resitel_id, | ||||
|     sum(min_body.body) as body | ||||
|   from | ||||
|     seminar_cisla | ||||
|     inner join seminar_body_za_cislo as min_body on | ||||
|       (min_body.rocnik_id = seminar_cisla.rocnik_id and seminar_cisla.cislo >= min_body.cislo) | ||||
|   group by seminar_cisla.id, min_body.resitel_id | ||||
|   order by body desc; | ||||
| 
 | ||||
| drop view seminar_body_k_cislu_odjakziva; | ||||
| create view seminar_body_k_cislu_odjakziva as | ||||
|   select | ||||
|     seminar_cisla.id || '-' || min_body.resitel_id as id, | ||||
|     seminar_cisla.id as cislo_id, | ||||
|     min_body.resitel_id as resitel_id, | ||||
|     sum(min_body.body) as body | ||||
|   from | ||||
|     seminar_cisla | ||||
|     inner join seminar_rocniky on | ||||
|       (seminar_cisla.rocnik_id = seminar_rocniky.id) | ||||
|     inner join seminar_body_za_cislo as min_body on | ||||
|       (min_body.rocnik_id = seminar_cisla.rocnik_id and seminar_cisla.cislo >= min_body.cislo) or | ||||
|       (min_body.rocnik < seminar_rocniky.rocnik) | ||||
|   group by seminar_cisla.id, min_body.resitel_id | ||||
|   order by body desc; | ||||
| """ | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     dependencies = [("seminar", "0028_add_body_celkem_views")] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.RunSQL(sql=CREATE_VIEWS) | ||||
|         ] | ||||
| 
 | ||||
|  | @ -650,9 +650,9 @@ class VysledkyBase(SeminarModelBase): | |||
| 
 | ||||
|     def __str__(self): | ||||
|         return force_unicode(u"%s: %sb (%s)" % (self.resitel.plne_jmeno(), self.body, str(self.cislo))) | ||||
|         # NOTE: DB HOG (ale nepouzivany) | ||||
|         # NOTE: DB zatez pri vypisu (ale nepouzivany) | ||||
| 
 | ||||
| 
 | ||||
| @python_2_unicode_compatible | ||||
| class VysledkyZaCislo(VysledkyBase): | ||||
| 
 | ||||
|     class Meta: | ||||
|  | @ -660,25 +660,27 @@ class VysledkyZaCislo(VysledkyBase): | |||
|         abstract = False | ||||
|         managed = False | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         # NOTE: DB HOG (ale nepouzivany) | ||||
|         return force_unicode(u"%s: %sb (za %s)" % (self.resitel.plne_jmeno(), self.body, str(self.cislo))) | ||||
| 
 | ||||
| 
 | ||||
| @python_2_unicode_compatible | ||||
| class VysledkyKCislu(VysledkyBase): | ||||
| class VysledkyKCisluZaRocnik(VysledkyBase): | ||||
| 
 | ||||
|     class Meta: | ||||
|         db_table = 'seminar_body_k_cislu' | ||||
|         db_table = 'seminar_body_k_cislu_rocnik' | ||||
|         abstract = False | ||||
|         managed = False | ||||
| 
 | ||||
|     body_celkem = models.DecimalField(max_digits=8, decimal_places=1, db_column='body_celkem', | ||||
|             verbose_name=u'body celkem do čísla') | ||||
| #    body = models.DecimalField(max_digits=8, decimal_places=1, db_column='body', | ||||
| #            verbose_name=u'body do čísla (za ročník)') | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         # NOTE: DB HOG (ale nepouzivany) | ||||
|         return force_unicode(u"%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo))) | ||||
| 
 | ||||
| class VysledkyKCisluOdjakziva(VysledkyBase): | ||||
| 
 | ||||
|     class Meta: | ||||
|         db_table = 'seminar_body_k_cislu_odjakziva' | ||||
|         abstract = False | ||||
|         managed = False | ||||
| 
 | ||||
| #    body = models.DecimalField(max_digits=8, decimal_places=1, db_column='body', | ||||
| #            verbose_name=u'body do čísla (i minulé ročníky)') | ||||
| 
 | ||||
| 
 | ||||
| @python_2_unicode_compatible | ||||
|  |  | |||
|  | @ -34,17 +34,19 @@ | |||
|       {% for p in problemy %} | ||||
|       <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.cislo_zadani.cislo }}.{{ p.kod }}</a> | ||||
|       {% endfor %} | ||||
|       <th class='border-r'>Sum | ||||
|       <th class='border-r'>Sum<sup>-1</sup> | ||||
|       <th>Celkem | ||||
|       <th>Odjakživa | ||||
|   {% for rv in vysledkovka %} | ||||
|     <tr> | ||||
|       <td class='border-r'>{{ rv.poradi }} | ||||
|       <th class='border-r'>{{ rv.resitel.plne_jmeno }} [{{ rv.resitel.id }}] | ||||
|         <th class='border-r'>{{ rv.resitel.plne_jmeno }} {{ rv.titul }} | ||||
|       {% for b in rv.body %} | ||||
|       <td class='border-r'>{{ b }} | ||||
|       {% endfor %} | ||||
|       <td class='border-r'>{{ rv.vysledek.body |default:0 }} | ||||
|       <td>{{ rv.vysledek.body_celkem }} | ||||
|       <td class='border-r'>{{ rv.body_minule }} | ||||
|       <td><b>{{ rv.body_celkem_rocnik }}</b> | ||||
|       <td>{{ rv.body_celkem_odjakziva }} | ||||
|     </tr> | ||||
|   {% endfor %} | ||||
|   </table> | ||||
|  |  | |||
|  | @ -22,12 +22,12 @@ | |||
| {% for rv in vysledkovka %} | ||||
|     {{ rv.poradi }} &  | ||||
| {% if rv.resitel.titul %}  | ||||
| 	\titul{ {{ rv.resitel.titul }} }  | ||||
| 	\titul{ {{ rv.titul }} }  | ||||
| {% endif %}  | ||||
| 	{{ rv.resitel.plne_jmeno }} & {{ rv.resitel.rocnik |default:"" }} & {{ rv.body_minule }}  | ||||
|     {% for b in rv.body %} | ||||
| 		{{ b }} &  | ||||
| 	{% endfor %}  | ||||
| 		{{ rv.vysledek.body |default:0 }} & {{ rv.vysledek.body_celkem }} \\ | ||||
| 		{{ rv.body_celkem_rocnik |default:0 }} & {{ rv.body_celkem_minule }} \\ | ||||
| {% endfor %} | ||||
| \end{longtable} | ||||
|  |  | |||
							
								
								
									
										24
									
								
								seminar/templates/seminar/stav_databaze.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								seminar/templates/seminar/stav_databaze.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| {% extends "base.html" %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <div> | ||||
|   <h2>Stav databáze</h2> | ||||
| 
 | ||||
|   <h3>Řešitelé</h3> | ||||
| 
 | ||||
|   <div>Řešitelů: {{ resitele |length}} ({{ muzi |length}} mužů, {{ zeny |length}} žen)</div> | ||||
|   <div>Křestní jména mužů:</div> | ||||
|   <p><code>{% for n, c in jmena_muzu.items %}{{ n }} ({{ c }}), {% endfor %}</code> | ||||
|   <div>Křestní jména žen:</div> | ||||
|   <p><code>{% for n, c in jmena_zen.items %}{{ n }} ({{ c }}), {% endfor %}</code> | ||||
| 
 | ||||
|   <h3>Nastavení</h3> | ||||
| 
 | ||||
|   <h3>Problémy</h3> | ||||
|   {% for p in problemy %} | ||||
|   <div>{{ p |safe }}</div> | ||||
|   {% endfor %} | ||||
| 
 | ||||
| </div> | ||||
| {% endblock content %} | ||||
| 
 | ||||
|  | @ -17,6 +17,8 @@ urlpatterns = patterns('', | |||
| 
 | ||||
|     url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'), | ||||
| 
 | ||||
|     url(r'^stav$', views.StavDatabazeView, name='stav_databaze'), | ||||
| 
 | ||||
|     url(r'^aesop-export/mam-rocnik-(?P<prvni_rok>\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'), | ||||
|     url(r'^aesop-export/mam-sous-(?P<datum_zacatku>[\d-]+)\.csv$', export.ExportSousView.as_view(), name='seminar_export_sous'), | ||||
|     url(r'^aesop-export/index.csv$', export.ExportIndexView.as_view(), name='seminar_export_index'), | ||||
|  |  | |||
|  | @ -1,5 +1,17 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import datetime | ||||
| 
 | ||||
| 
 | ||||
| def histogram(seznam): | ||||
|     d = {} | ||||
|     for i in seznam: | ||||
|         if i not in d: | ||||
|             d[i] = 0 | ||||
|         d[i] += 1 | ||||
|     return d | ||||
| 
 | ||||
| 
 | ||||
| roman_numerals = zip((1000, 900,  500, 400, 100,  90, 50,  40, 10,  9,   5,  4,   1), | ||||
|                      ('M',  'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')) | ||||
| 
 | ||||
|  | @ -18,3 +30,49 @@ def from_roman(rom): | |||
|             return i + from_roman(rom[len(n):]) | ||||
|     raise Exception('Invalid roman numeral: "%s"', rom) | ||||
| 
 | ||||
| 
 | ||||
| def seznam_problemu(): | ||||
|     from .models import Problem, Resitel, Rocnik, Reseni, Cislo | ||||
|     problemy = [] | ||||
| 
 | ||||
|     # Pomocna fce k formatovani problemovych hlasek | ||||
|     def prb(cls, msg, objs=None): | ||||
|         s = u'<b>%s:</b> %s' % (cls.__name__, msg) | ||||
|         if objs: | ||||
|             s += u' [' | ||||
|             for o in objs: | ||||
|                 try: | ||||
|                     url = o.admin_url() | ||||
|                 except: | ||||
|                     url = None | ||||
|                 if url: | ||||
|                     s += u'<a href="%s">%s</a>, ' % (url, o.pk, ) | ||||
|                 else: | ||||
|                     s += u'%s, ' % (o.pk, ) | ||||
|             s = s[:-2] + u']' | ||||
|         problemy.append(s) | ||||
| 
 | ||||
|     # Duplicita jmen | ||||
|     jmena = {} | ||||
|     for r in Resitel.objects.all(): | ||||
|         j = r.plne_jmeno() | ||||
|         if j not in jmena: | ||||
|             jmena[j] = [] | ||||
|         jmena[j].append(r) | ||||
|     for j in jmena: | ||||
|         if len(jmena[j]) > 1: | ||||
|             prb(Resitel, u'Duplicitní jméno "%s"' % (j, ), jmena[j]) | ||||
| 
 | ||||
|     # Data maturity a narození | ||||
|     for r in Resitel.objects.all(): | ||||
|         if not r.rok_maturity: | ||||
|             prb(Resitel, u'Neznámý rok maturity', [r]) | ||||
|         if r.rok_maturity and (r.rok_maturity < 1990 or r.rok_maturity > datetime.date.today().year + 10): | ||||
|             prb(Resitel, u'Podezřelé datum maturity', [r]) | ||||
|         if r.datum_narozeni and (r.datum_narozeni.year < 1970 or r.datum_narozeni.year > datetime.date.today().year - 12): | ||||
|             prb(Resitel, u'Podezřelé datum narození', [r]) | ||||
| #        if not r.email: | ||||
| #            prb(Resitel, u'Neznámý email', [r]) | ||||
| 
 | ||||
|     return problemy | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,8 +5,9 @@ from django.views import generic | |||
| from django.utils.translation import ugettext as _ | ||||
| from django.http import Http404 | ||||
| 
 | ||||
| from .models import Problem, Cislo, Reseni, VysledkyKCislu, Nastaveni, Rocnik, Soustredeni, Organizator | ||||
| 
 | ||||
| from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel | ||||
| from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | ||||
| from . import utils | ||||
| 
 | ||||
| def AktualniZadaniView(request): | ||||
|     nastaveni = get_object_or_404(Nastaveni) | ||||
|  | @ -146,7 +147,7 @@ class CisloView(generic.DetailView): | |||
|     def get_context_data(self, **kwargs): | ||||
|         context = super(CisloView, self).get_context_data(**kwargs) | ||||
| 
 | ||||
|         vysledky = VysledkyKCislu.objects.filter(cislo = context['cislo']).order_by('-body_celkem').select_related("resitel") | ||||
|         vysledky = VysledkyKCisluZaRocnik.objects.filter(cislo = context['cislo']).order_by('-body').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)) | ||||
|  | @ -168,17 +169,22 @@ class CisloView(generic.DetailView): | |||
|             v = vysledky[vi] | ||||
|             tv = RadekVysledkovky() | ||||
|             tv.resitel = v.resitel   | ||||
|             tv.rocnik = tv.resitel.rocnik(context['cislo'].datum_vydani) | ||||
|             tv.resitel.titul = tv.resitel.titul(v.body_celkem) | ||||
|             tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik) | ||||
|             tv.vysledek = v | ||||
|             #odkazuje na VysledkyKCislu | ||||
|             tv.body = ['']*len(problemy) | ||||
|             #pole bodu za ulohy | ||||
|             tv.poradi = '' | ||||
|             #defaultni poradi je prazdne - kvuli sdilenym mistum | ||||
|             tv.body_minule = 0 | ||||
|             tv.body_celkem_rocnik = v.body | ||||
|             tv.body_celkem_odjakziva = VysledkyKCisluOdjakziva.objects.get(resitel=v.resitel, cislo=context['cislo']).body | ||||
|             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_minule = tv.body_celkem_rocnik - tv.body_cislo | ||||
|             tv.titul = tv.resitel.titul(tv.body_celkem_odjakziva) | ||||
|             #pocet bodu do tohoto cisla | ||||
|             if posledni_body > v.body_celkem: | ||||
|             if posledni_body > tv.body_celkem_rocnik: | ||||
|                 if stejne_body.get(posledni_body): | ||||
|                     konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] | ||||
|                     #druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body | ||||
|  | @ -187,16 +193,16 @@ class CisloView(generic.DetailView): | |||
|                 elif predchozi_poradi : | ||||
|                     predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) | ||||
|                     #pokud nebyl rozsah hodnot, pridam tecku za cislo | ||||
|                 posledni_body = v.body_celkem | ||||
|                 posledni_body = tv.body_celkem_rocnik | ||||
|                 tv.poradi = vi + 1 | ||||
|                 #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly | ||||
|                 predchozi_poradi = tv | ||||
|             elif posledni_body == v.body_celkem: | ||||
|                 if not stejne_body.get(v.body_celkem): | ||||
|                     stejne_body[v.body_celkem] = 1 | ||||
|             elif posledni_body == tv.body_celkem_rocnik: | ||||
|                 if not stejne_body.get(tv.body_celkem_rocnik): | ||||
|                     stejne_body[tv.body_celkem_rocnik] = 1 | ||||
|                     #pokud klic neexistuje, zalozim novy pro tohoto resitele | ||||
|                 else: | ||||
|                     stejne_body[v.body_celkem] += 1 | ||||
|                     stejne_body[tv.body_celkem_rocnik] += 1 | ||||
|                     #rozsirim pocet resitelu sdilejici stejnou pozici | ||||
|             vysledky_resitele[v.resitel.id] = tv | ||||
|             #odkaz na radek vysledkovky patrici danemu resiteli | ||||
|  | @ -204,10 +210,6 @@ class CisloView(generic.DetailView): | |||
| 
 | ||||
|         for r in reseni: | ||||
|             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 toto cislo, stejne jako tv.vysledek.body | ||||
|             body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem | ||||
|             vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo  | ||||
|          | ||||
| 
 | ||||
|         context['vysledkovka'] = vysledkovka | ||||
|  | @ -242,3 +244,22 @@ class SoustredeniListView(generic.ListView): | |||
| class SoustredeniView(generic.DetailView): | ||||
|     model = Soustredeni | ||||
|     template_name = 'seminar/archiv/soustredeni.html' | ||||
| 
 | ||||
| ### Status | ||||
| 
 | ||||
| def StavDatabazeView(request): | ||||
| #    nastaveni = Nastaveni.objects.get() | ||||
|     problemy = utils.seznam_problemu() | ||||
|     muzi = Resitel.objects.filter(pohlavi_muz=True) | ||||
|     zeny = Resitel.objects.filter(pohlavi_muz=False) | ||||
|     return render(request, 'seminar/stav_databaze.html', | ||||
|             { | ||||
| #                'nastaveni': nastaveni, | ||||
|                 'problemy': problemy, | ||||
| 
 | ||||
|                 'resitele': Resitel.objects.all(), | ||||
|                 'muzi': muzi, | ||||
|                 'zeny': zeny, | ||||
|                 'jmena_muzu': utils.histogram([r.jmeno for r in muzi]), | ||||
|                 'jmena_zen': utils.histogram([r.jmeno for r in zeny]), | ||||
|             }) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Aneta
						Aneta