Web M&M
https://mam.matfyz.cz
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.5 KiB
101 lines
3.5 KiB
"""
|
|
Soubor sloužící k deklaraci jednotlivých „views“ (nejčastěji funkce beroucí request
|
|
a vracející :func:`django.shortcuts.render` respektive nějakou response, nebo
|
|
třídy většinou rozšiřující nějakou třídu z :mod:`django.views.generic`)
|
|
"""
|
|
import django
|
|
from django.shortcuts import get_object_or_404
|
|
from django.http import HttpResponse
|
|
from django.urls import reverse
|
|
from django.views import generic
|
|
from django.utils.encoding import force_str
|
|
|
|
from .utils import default_ovvpfile
|
|
from seminar.models import Rocnik, Soustredeni
|
|
from vysledkovky import utils
|
|
from seminar.utils import aktivniResitele
|
|
|
|
class ExportIndexView(generic.View):
|
|
def get(self, request):
|
|
ls = []
|
|
for r in Rocnik.objects.filter(exportovat = True):
|
|
url = reverse('seminar_export_rocnik', kwargs={'prvni_rok': r.prvni_rok})
|
|
ls.append(url.split('/')[-1])
|
|
for s in Soustredeni.objects.filter(exportovat = True):
|
|
url = reverse('seminar_export_sous', kwargs={'datum_zacatku': s.datum_zacatku.isoformat()})
|
|
ls.append(url.split('/')[-1])
|
|
|
|
return HttpResponse('\n'.join(ls) + '\n', content_type='text/plain; charset=utf-8')
|
|
|
|
|
|
class ExportSousView(generic.View):
|
|
|
|
def get(self, request, datum_zacatku=None):
|
|
try:
|
|
dz = django.utils.dateparse.parse_date(datum_zacatku)
|
|
except:
|
|
dz = None
|
|
if dz is None:
|
|
raise django.http.Http404()
|
|
|
|
s = get_object_or_404(Soustredeni, datum_zacatku=dz, exportovat=True)
|
|
|
|
akce = {Soustredeni.TYP_JARNI: 'MaM.sous.jaro',
|
|
Soustredeni.TYP_PODZIMNI: 'MaM.sous.podzim',
|
|
Soustredeni.TYP_VIKEND: 'MaM.vikend',
|
|
}[s.typ]
|
|
|
|
of = default_ovvpfile(akce, s.rocnik)
|
|
of.headers['x-event-begin'] = s.datum_zacatku.isoformat()
|
|
of.headers['x-event-end'] = s.datum_konce.isoformat()
|
|
of.headers['x-event-location'] = s.misto
|
|
of.headers['comment'] = u'MaM-Web export ucastniku soustredeni v {x-event-location} od {x-event-begin} do {x-event-end}'.format(**of.headers)
|
|
of.columns = ['id', 'name', 'surname', 'gender', 'email', 'end-year', 'school', 'school-name']
|
|
|
|
for u in s.ucastnici.all():
|
|
of.rows.append(u.export_row())
|
|
|
|
return of.to_HttpResponse()
|
|
|
|
# POZOR! Předělání na nový model neotestováno v reálu (ale zase jen drobné změny)
|
|
class ExportRocnikView(generic.View):
|
|
|
|
def get(self, request, prvni_rok=None):
|
|
try:
|
|
pr = int(prvni_rok)
|
|
except:
|
|
pr = None
|
|
if pr is None:
|
|
raise django.http.Http404()
|
|
|
|
rocnik = get_object_or_404(Rocnik, prvni_rok=pr, exportovat=True)
|
|
cislo = rocnik.posledni_zverejnena_vysledkovka_cislo()
|
|
resitele = aktivniResitele(cislo, True)
|
|
slovnik_body = utils.secti_body_za_rocnik(cislo, resitele, False)
|
|
setrizeni_resitele, body = utils.setrid_resitele_a_body(slovnik_body)
|
|
|
|
of = default_ovvpfile('MaM.rocnik', rocnik)
|
|
of.headers['comment'] = u'MaM-Web export aktivnich resitelu rocniku {rocnik} do cisla {cislo}'.format(rocnik=rocnik, cislo=cislo)
|
|
of.columns = ['id', 'name', 'surname', 'gender', 'born', 'email', 'end-year',
|
|
'street', 'town', 'postcode', 'country', 'spam-flag', 'spam-date',
|
|
'school', 'school-name', 'points', 'rank',]
|
|
|
|
resitele_slovnik = {}
|
|
for r in resitele:
|
|
resitele_slovnik[r.id] = r
|
|
|
|
# počítání pořadí řešitelů
|
|
posledni_body = 100000
|
|
posledni_poradi = 0
|
|
for i in range(len(setrizeni_resitele)):
|
|
rd = resitele_slovnik[setrizeni_resitele[i]].export_row()
|
|
|
|
if posledni_body > body[i]:
|
|
posledni_body = body[i]
|
|
posledni_poradi = i + 1
|
|
rd['rank'] = posledni_poradi
|
|
rd['points'] = body[i]
|
|
|
|
of.rows.append(rd)
|
|
|
|
return of.to_HttpResponse()
|
|
|