import datetime, django from django.shortcuts import get_object_or_404, render from django.http import HttpResponse from django.urls import reverse from django.views import generic from django.utils.encoding import force_text from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva from .ovvpfile import OvvpFile from seminar import views from seminar.views import vysledkovka 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') def default_ovvpfile(event, rocnik): of = OvvpFile() of.headers['version'] = '1' of.headers['event'] = event of.headers['year'] = force_text(rocnik.prvni_rok) of.headers['date'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") of.headers['id-scope'] = 'mam' of.headers['id-generation'] = '1' return of 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 = vysledkovka.secti_body_za_rocnik(cislo, resitele, False) _, setrizeni_resitele, body = vysledkovka.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',] # počítání pořadí řešitelů posledni_body = 100000 posledni_poradi = 0 for i in range(len(setrizeni_resitele)): rd = 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()