91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
import tempfile
|
|
import subprocess
|
|
import shutil
|
|
import os
|
|
|
|
from django.conf import settings
|
|
from django.shortcuts import get_object_or_404, render
|
|
from django.http import HttpResponse
|
|
from django.views import generic
|
|
from django.db.models import Q
|
|
|
|
from tvorba.models import Cislo, Deadline
|
|
from personalni.models.resitel import Resitel
|
|
from vysledkovky.utils import body_resitelu
|
|
|
|
|
|
def cisloObalkyView(request, rocnik, cislo):
|
|
realne_cislo = get_object_or_404(Cislo, poradi=cislo, rocnik__rocnik=rocnik)
|
|
return obalkyView(request, Resitel.objects.aktivni_resitele(realne_cislo))
|
|
|
|
|
|
def obalkyView(request, resitele):
|
|
tex = render(
|
|
request, 'tvorba/archiv/obalky.tex',
|
|
{'resitele': resitele}
|
|
).content
|
|
|
|
tempdir = tempfile.mkdtemp()
|
|
with open(tempdir+"/obalky.tex", "w") as texfile:
|
|
texfile.write(tex.decode())
|
|
shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/lisak.pdf'), tempdir)
|
|
subprocess.call(["pdflatex", "obalky.tex"], cwd=tempdir)
|
|
|
|
with open(tempdir+"/obalky.pdf", "rb") as pdffile:
|
|
response = HttpResponse(pdffile.read(), content_type='application/pdf')
|
|
shutil.rmtree(tempdir)
|
|
return response
|
|
|
|
|
|
class OdmenyView(generic.TemplateView):
|
|
template_name = 'tvorba/archiv/odmeny.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
fromcislo = get_object_or_404(
|
|
Cislo,
|
|
rocnik=self.kwargs.get('frocnik'),
|
|
poradi=self.kwargs.get('fcislo'),
|
|
)
|
|
tocislo = get_object_or_404(
|
|
Cislo,
|
|
rocnik=self.kwargs.get('trocnik'),
|
|
poradi=self.kwargs.get('tcislo'),
|
|
)
|
|
resitele = Resitel.objects.aktivni_resitele(tocislo)
|
|
|
|
def get_diff(from_deadline: Deadline, to_deadline: Deadline):
|
|
frombody = body_resitelu(resitele=resitele, jen_verejne=False, do=from_deadline)
|
|
tobody = body_resitelu(resitele=resitele, jen_verejne=False, do=to_deadline)
|
|
outlist = []
|
|
for resitel in resitele:
|
|
fbody = frombody.get(resitel.id, 0)
|
|
tbody = tobody.get(resitel.id, 0)
|
|
ftitul = resitel.get_titul(fbody)
|
|
ttitul = resitel.get_titul(tbody)
|
|
if ftitul != ttitul:
|
|
outlist.append({
|
|
'jmeno': resitel.osoba.plne_jmeno(),
|
|
'ftitul': ftitul,
|
|
'ttitul': ttitul},
|
|
)
|
|
return outlist
|
|
|
|
def posledni_deadline_oprava(cislo: Cislo) -> Deadline:
|
|
posledni_deadline = cislo.posledni_deadline
|
|
if posledni_deadline is None:
|
|
return Deadline.objects.filter(
|
|
Q(cislo__poradi__lt=cislo.poradi, cislo__rocnik=cislo.rocnik) |
|
|
Q(cislo__rocnik__rocnik__lt=cislo.rocnik.rocnik),
|
|
).order_by("deadline").last()
|
|
return posledni_deadline
|
|
|
|
context["from_cislo"] = fromcislo
|
|
context["to_cislo"] = tocislo
|
|
from_deadline = posledni_deadline_oprava(fromcislo)
|
|
to_deadline = posledni_deadline_oprava(tocislo)
|
|
context["from_deadline"] = from_deadline
|
|
context["to_deadline"] = to_deadline
|
|
context["zmeny"] = get_diff(from_deadline, to_deadline)
|
|
|
|
return context
|