mamweb/tvorba/views/obalky.py

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