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