|
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from django.http import HttpResponse
|
|
|
|
from django.views import generic
|
|
|
|
from django.conf import settings
|
|
|
|
from seminar.models import Soustredeni, Resitel, Soustredeni_Ucastnici # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci
|
|
|
|
import csv
|
|
|
|
import tempfile
|
|
|
|
import shutil
|
|
|
|
import subprocess
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from seminar.views import obalkyView
|
|
|
|
|
|
|
|
|
|
|
|
class SoustredeniListView(generic.ListView):
|
|
|
|
model = Soustredeni
|
|
|
|
template_name = 'soustredeni/seznam_soustredeni.html'
|
|
|
|
|
|
|
|
|
|
|
|
def soustredeniObalkyView(request, soustredeni):
|
|
|
|
soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
|
|
|
|
return obalkyView(request, soustredeni.ucastnici.all())
|
|
|
|
|
|
|
|
|
|
|
|
class SoustredeniUcastniciBaseView(generic.ListView):
|
|
|
|
model = Soustredeni_Ucastnici
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
soustredeni = get_object_or_404(
|
|
|
|
Soustredeni,
|
|
|
|
pk=self.kwargs["soustredeni"]
|
|
|
|
)
|
|
|
|
return Soustredeni_Ucastnici.objects.filter(
|
|
|
|
soustredeni=soustredeni).select_related('resitel')
|
|
|
|
|
|
|
|
|
|
|
|
class SoustredeniMailyUcastnikuView(SoustredeniUcastniciBaseView):
|
|
|
|
""" Seznam e-mailů řešitelů oddělených čárkami. """
|
|
|
|
model = Soustredeni_Ucastnici
|
|
|
|
template_name = 'soustredeni/maily_ucastniku.txt'
|
|
|
|
|
|
|
|
|
|
|
|
class SoustredeniUcastniciView(SoustredeniUcastniciBaseView):
|
|
|
|
""" HTML tabulka účastníků pro tisk. """
|
|
|
|
model = Soustredeni_Ucastnici
|
|
|
|
template_name = 'soustredeni/seznam_ucastniku.html'
|
|
|
|
|
|
|
|
|
|
|
|
def soustredeniUcastniciExportView(request, soustredeni):
|
|
|
|
soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
|
|
|
|
ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
|
|
|
|
response = HttpResponse(content_type='text/csv')
|
|
|
|
response['Content-Disposition'] = 'attachment; filename="ucastnici.csv"'
|
|
|
|
|
|
|
|
writer = csv.writer(response)
|
|
|
|
writer.writerow(["jmeno", "prijmeni", "rok_maturity", "telefon", "email", "ulice", "mesto", "psc","stat"])
|
|
|
|
for u in ucastnici:
|
|
|
|
o = u.osoba
|
|
|
|
writer.writerow([o.jmeno, o.prijmeni, str(u.rok_maturity), o.telefon, o.email, o.ulice, o.mesto, o.psc, o.stat.name])
|
|
|
|
return response
|
|
|
|
|
|
|
|
def soustredeniStvrzenkyView(request, soustredeni):
|
|
|
|
soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
|
|
|
|
ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
|
|
|
|
|
|
|
|
static = Path(settings.STATIC_ROOT)
|
|
|
|
tempdir = Path(tempfile.mkdtemp())
|
|
|
|
shutil.copy(static / 'images/logomm.pdf', tempdir)
|
|
|
|
subprocess.run(
|
|
|
|
['pdfcsplain', static / 'seminar/stvrzenky.tex'],
|
|
|
|
cwd=tempdir,
|
|
|
|
encoding='utf-8',
|
|
|
|
input=f'{soustredeni.datum_zacatku.strftime("%-d.~%-m.~%Y")} -- {soustredeni.datum_konce.strftime("%-d.~%-m.~%Y")}\n{soustredeni.misto}\n'
|
|
|
|
+ '\n'.join([f'{u.osoba.jmeno} {u.osoba.prijmeni}' for u in ucastnici])
|
|
|
|
)
|
|
|
|
|
|
|
|
with open(tempdir / 'stvrzenky.pdf', 'rb') as pdffile:
|
|
|
|
response = HttpResponse(pdffile.read(), content_type='application/pdf')
|
|
|
|
shutil.rmtree(tempdir)
|
|
|
|
return response
|