|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from django.shortcuts import render, get_object_or_404
|
|
|
|
from django.views import generic
|
|
|
|
from django.shortcuts import HttpResponseRedirect
|
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
|
|
from django.db.models import Sum, Subquery
|
|
|
|
|
|
|
|
from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH
|
|
|
|
from seminar.models import Soustredeni
|
|
|
|
from prednasky.forms import NewPrednaskyForm
|
|
|
|
|
|
|
|
def newPrednaska(request):
|
|
|
|
# hlasovani se vztahuje k nejnovejsimu soustredeni
|
|
|
|
sous = Soustredeni.objects.first()
|
|
|
|
seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first()
|
|
|
|
print seznam
|
|
|
|
# obsluha formulare
|
|
|
|
if request.method == 'POST':
|
|
|
|
form = NewPrednaskyForm(request.POST, request.FILES)
|
|
|
|
if form.is_valid():
|
|
|
|
jmeno = form.cleaned_data['ucastnik']
|
|
|
|
for i in request.POST:
|
|
|
|
if i[0] == 'q':
|
|
|
|
hlasovani = Hlasovani()
|
|
|
|
print("q:"+i[1:])
|
|
|
|
hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1:]))[0]
|
|
|
|
hlasovani.body = int(request.POST[i])
|
|
|
|
hlasovani.ucastnik = jmeno
|
|
|
|
hlasovani.seznam = seznam
|
|
|
|
hlasovani.save()
|
|
|
|
|
|
|
|
# presmerovani na prave vzniklou galerii
|
|
|
|
return HttpResponseRedirect('./hotovo')
|
|
|
|
|
|
|
|
else:
|
|
|
|
form = NewPrednaskyForm()
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'prednasky/base.html',
|
|
|
|
{'form': form, 'prednasky': seznam}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def Prednaska_hotovo(request):
|
|
|
|
return render(request, 'prednasky/hotovo.html')
|
|
|
|
|
|
|
|
class MetaSeznamListView(generic.ListView):
|
|
|
|
model = Seznam
|
|
|
|
template_name = 'prednasky/metaseznam_prednasek.html'
|
|
|
|
|
|
|
|
|
|
|
|
class SeznamListView(generic.ListView):
|
|
|
|
template_name = 'prednasky/seznam_prednasek.html'
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"])
|
|
|
|
# Od "annotate" je to hack opsaný ze stack overflow, kterým se filtrují
|
|
|
|
# jen výsledky z aktuálního seznamu. Dosud se zobrazoval součet bodů u
|
|
|
|
# přednášky od počátku historie.
|
|
|
|
# TODO: udělat lépe (Django 2 má Sum s filtrem)
|
|
|
|
prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by(
|
|
|
|
'org__user__first_name', 'org__user__last_name'
|
|
|
|
).annotate(body=Subquery(Hlasovani.objects.filter(seznam=self.seznam)
|
|
|
|
.values('body').annotate(b=Sum('body')).values('b')))
|
|
|
|
return prednasky
|
|
|
|
|
|
|
|
|
|
|
|
def SeznamExportView(request, seznam):
|
|
|
|
u"""Vypíše výsledky hlasování ve formátu pro prologovský optimalizátor"""
|
|
|
|
# TODO zřejmě se nepoužívá, časem vyřadit? nahradit tabulkou vhodnější pro
|
|
|
|
# lidi?
|
|
|
|
hlasovani = Hlasovani.objects.filter(seznam=seznam)
|
|
|
|
prednasky = Prednaska.objects.filter(seznamy=seznam)
|
|
|
|
orgove = set(p.org for p in prednasky)
|
|
|
|
ucastnici = set(h.ucastnik for h in hlasovani)
|
|
|
|
|
|
|
|
for p in prednasky:
|
|
|
|
p.body = []
|
|
|
|
for u in ucastnici:
|
|
|
|
try:
|
|
|
|
p.body.append(hlasovani.get(ucastnik=u, prednaska=p).body)
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
# účastník nehlasoval
|
|
|
|
p.body.append("?")
|
|
|
|
|
|
|
|
for h in hlasovani:
|
|
|
|
h.ucastnik = hash(h.ucastnik)
|
|
|
|
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'prednasky/seznam_prednasek_export.txt',
|
|
|
|
{"hlasovani": hlasovani, "prednasky": prednasky, "orgove": orgove},
|
|
|
|
content_type="text/plain"
|
|
|
|
)
|
|
|
|
|
|
|
|
|