mamweb/seminar/views.py

126 lines
4.4 KiB
Python
Raw Normal View History

2015-03-13 20:08:18 +01:00
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views import generic
2015-06-08 22:38:13 +02:00
from django.utils.translation import ugettext as _
from django.http import Http404
from .models import Problem, Cislo, Reseni, VysledkyKCislu, Nastaveni, Rocnik, Soustredeni, Organizator
2014-11-17 12:05:46 +01:00
2015-04-01 14:05:04 +02:00
def AktualniZadaniView(request):
nastaveni = get_object_or_404(Nastaveni)
return render(request, 'seminar/zadani/AktualniZadani.html',
{'nastaveni' : nastaveni,
},
)
2015-03-13 20:08:18 +01:00
### Co je M&M
2015-06-03 14:16:30 +02:00
class CojemamOrganizatoriView(generic.ListView):
model = Organizator
2015-06-03 14:16:30 +02:00
template_name='seminar/cojemam/organizatori.html'
### Archiv
2015-06-04 10:13:52 +02:00
class CislaView(generic.ListView):
model = Rocnik
template_name='seminar/archiv/cisla.html'
2015-04-01 14:01:13 +02:00
class RocnikView(generic.DetailView):
model = Rocnik
template_name = 'seminar/archiv/rocnik.html'
2015-04-01 14:01:13 +02:00
2015-06-08 22:38:13 +02:00
# Vlastni ziskavani objektu z databaze podle (Rocnik.rocnik)
def get_object(self, queryset=None):
if queryset is None:
queryset = self.get_queryset()
rocnik_arg = self.kwargs.get('rocnik')
queryset = queryset.filter(rocnik=rocnik_arg)
try:
obj = queryset.get()
except queryset.model.DoesNotExist:
raise Http404(_("No %(verbose_name)s found matching the query") %
{'verbose_name': queryset.model._meta.verbose_name})
return obj
2015-03-13 20:08:18 +01:00
class ProblemView(generic.DetailView):
model = Problem
template_name = 'seminar/archiv/problem.html'
2015-03-13 20:08:18 +01:00
class RadekVysledkovky(object):
pass
2015-03-13 20:08:18 +01:00
class CisloView(generic.DetailView):
model = Cislo
template_name = 'seminar/archiv/cislo.html'
2015-06-08 22:38:13 +02:00
# Vlastni ziskavani objektu z databaze podle (Rocnik.rocnik)
def get_object(self, queryset=None):
if queryset is None:
queryset = self.get_queryset()
rocnik_arg = self.kwargs.get('rocnik')
cislo_arg = self.kwargs.get('cislo')
queryset = queryset.filter(rocnik__rocnik=rocnik_arg, cislo=cislo_arg)
try:
obj = queryset.get()
except queryset.model.DoesNotExist:
raise Http404(_("No %(verbose_name)s found matching the query") %
{'verbose_name': queryset.model._meta.verbose_name})
return obj
def get_context_data(self, **kwargs):
context = super(CisloView, self).get_context_data(**kwargs)
2015-07-03 17:55:39 +02:00
# Vysledky k cislu: seznam objektu typu (cislo, resitel, body [v tom cisle], body_celkem [od zac. rocniku])
2015-05-17 06:30:53 +02:00
vysledky = VysledkyKCislu.objects.filter(cislo = context['cislo']).order_by('-body_celkem').select_related("resitel")
2015-07-03 17:55:39 +02:00
reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel")
2015-07-03 17:55:39 +02:00
# seznam problemu s nejakymi body v tomto cisle
2015-05-17 06:30:53 +02:00
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod))
2015-07-03 17:55:39 +02:00
# cislo sloupecku pro problem (inverzni funkce)
problem_index = {}
for i in range(len(problemy)):
problem_index[problemy[i].id] = i
2015-07-03 17:55:39 +02:00
# pomocna mapa Resitel: RadekVysledkovky
vysledky_resitele = {}
2015-07-03 17:55:39 +02:00
# radky vysledkovky, seznam objektu RadekVysledkovky
vysledkovka = []
2015-07-03 17:55:39 +02:00
# posledni pocet bodu, pro detekci stejnych mist
posledni_body = 100000
2015-07-03 17:55:39 +02:00
for vi in range(len(vysledky)):
v = vysledky[vi]
tv = RadekVysledkovky()
tv.resitel = v.resitel
tv.vysledek = v
2015-07-03 17:55:39 +02:00
tv.body = ['']*len(problemy) # misto pro body za jednotlive uloy
tv.poradi = ''
if posledni_body > v.body_celkem:
posledni_body = v.body_celkem
tv.poradi = vi + 1
vysledky_resitele[v.resitel.id] = tv
vysledkovka.append(tv)
2015-07-03 17:55:39 +02:00
# doplneni bodu za jednotliva reseni lidi do RadekVysledkovky.body
for r in reseni:
vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body
context['vysledkovka'] = vysledkovka
context['problemy'] = problemy
return context
2015-03-13 20:08:18 +01:00
### Soustredeni
2015-03-13 20:08:18 +01:00
class SoustredeniListView(generic.ListView):
model = Soustredeni
template_name = 'seminar/soustredeni/seznam_soustredeni.html'
class SoustredeniView(generic.DetailView):
model = Soustredeni
template_name = 'seminar/archiv/soustredeni.html'