132 lines
4.3 KiB
Python
132 lines
4.3 KiB
Python
import unicodedata
|
|
|
|
from django.shortcuts import get_object_or_404, render
|
|
from django.views import generic
|
|
from django.utils.translation import ugettext as _
|
|
from django.http import Http404
|
|
|
|
from personalni.models.resitel import Resitel
|
|
from tvorba.models import Rocnik, Cislo, Deadline
|
|
|
|
from vysledkovky.utils import body_resitelu, VysledkovkaCisla, VysledkovkaDoTeXu
|
|
from tvorba.views.archiv import CisloView, RocnikView
|
|
|
|
|
|
class CisloVysledkovkaView(CisloView):
|
|
"""View vytvořené pro stránku zobrazující výsledkovku čísla v TeXu."""
|
|
|
|
model = Cislo
|
|
template_name = 'tvorba/archiv/cislo_vysledkovka.tex'
|
|
# content_type = 'application/x-tex; charset=UTF8'
|
|
# umozni rovnou stahnout TeXovsky dokument
|
|
content_type = 'text/plain; charset=UTF8'
|
|
# vypise na stranku textovy obsah vyTeXane vysledkovky k okopirovani
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(CisloVysledkovkaView, self).get_context_data()
|
|
cislo = context['cislo']
|
|
|
|
cislopred = cislo.predchozi()
|
|
if cislopred is not None:
|
|
context['vysledkovka'] = VysledkovkaDoTeXu(
|
|
cislo,
|
|
od_vyjma=cislopred.zlomovy_deadline_pro_papirove_cislo(),
|
|
do_vcetne=cislo.zlomovy_deadline_pro_papirove_cislo(),
|
|
)
|
|
else:
|
|
context['vysledkovka'] = VysledkovkaCisla(
|
|
cislo,
|
|
jen_verejne=False,
|
|
do_deadlinu=cislo.zlomovy_deadline_pro_papirove_cislo(),
|
|
)
|
|
return context
|
|
|
|
|
|
# Podle předchozího
|
|
class PosledniCisloVysledkovkaView(generic.DetailView):
|
|
"""View vytvořené pro zobrazení výsledkovky posledního čísla v TeXu."""
|
|
|
|
model = Rocnik
|
|
template_name = 'tvorba/archiv/cislo_vysledkovka.tex'
|
|
content_type = 'text/plain; charset=UTF8'
|
|
|
|
def get_object(self, queryset=None):
|
|
if queryset is None:
|
|
queryset = self.get_queryset()
|
|
rocnik_arg = self.kwargs.get('rocnik')
|
|
queryset = queryset.filter(rocnik=rocnik_arg)
|
|
|
|
try:
|
|
obj = queryset.get()
|
|
except queryset.model.DoesNotExist:
|
|
raise Http404(
|
|
_("No %(verbose_name)s found matching the query") %
|
|
{'verbose_name': queryset.model._meta.verbose_name}
|
|
)
|
|
return obj
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(PosledniCisloVysledkovkaView, self).get_context_data()
|
|
rocnik = context['rocnik']
|
|
cislo = rocnik.cisla.order_by("poradi").last()
|
|
cislopred = cislo.predchozi()
|
|
context['vysledkovka'] = VysledkovkaDoTeXu(
|
|
cislo,
|
|
od_vyjma=cislopred.zlomovy_deadline_pro_papirove_cislo(),
|
|
do_vcetne=cislo.deadline_v_cisle.order_by("deadline").last(),
|
|
)
|
|
return context
|
|
|
|
|
|
class RocnikVysledkovkaView(RocnikView):
|
|
""" View vytvořené pro stránku zobrazující výsledkovku ročníku v TeXu."""
|
|
model = Rocnik
|
|
template_name = 'tvorba/archiv/rocnik_vysledkovka.tex'
|
|
# content_type = 'application/x-tex; charset=UTF8'
|
|
# umozni rovnou stahnout TeXovsky dokument
|
|
content_type = 'text/plain; charset=UTF8'
|
|
# vypise na stranku textovy obsah vyTeXane vysledkovky k okopirovani
|
|
|
|
|
|
# Tituly
|
|
def TitulyViewRocnik(request, rocnik):
|
|
return TitulyView(request, rocnik, None)
|
|
|
|
|
|
def TitulyView(request, rocnik, cislo):
|
|
""" View pro stažení makra titulů v TeXu."""
|
|
rocnik_obj = get_object_or_404(Rocnik, rocnik=rocnik)
|
|
resitele = Resitel.objects.filter(rok_maturity__gte=rocnik_obj.prvni_rok)
|
|
|
|
asciijmena = []
|
|
jmenovci = False # detekuje, zda jsou dva řešitelé jmenovci (modulo nabodeníčka),
|
|
# pokud ano, vrátí se jako true
|
|
if cislo is not None:
|
|
cislo_obj = get_object_or_404(Cislo, rocnik=rocnik_obj, poradi=cislo)
|
|
slovnik_s_body = body_resitelu(
|
|
do=cislo_obj.zlomovy_deadline_pro_papirove_cislo(), jen_verejne=False
|
|
)
|
|
else:
|
|
slovnik_s_body = body_resitelu(
|
|
do=Deadline.objects.filter(cislo__rocnik=rocnik_obj).last(),
|
|
jen_verejne=False
|
|
)
|
|
|
|
for resitel in resitele:
|
|
resitel.titul = resitel.get_titul(slovnik_s_body[resitel.id])
|
|
jmeno = resitel.osoba.jmeno+resitel.osoba.prijmeni
|
|
# převedeme jména a příjmení řešitelů do ASCII
|
|
ascii_jmeno_bytes = unicodedata.normalize('NFKD', jmeno).encode("ascii", "ignore")
|
|
# vrátí se byte string, převedeme na standardní string
|
|
ascii_jmeno_divnoznaky = str(ascii_jmeno_bytes, "utf-8", "ignore").replace(" ", "")
|
|
resitel.ascii = ''.join(a for a in ascii_jmeno_divnoznaky if a.isalnum())
|
|
if resitel.ascii not in asciijmena:
|
|
asciijmena.append(resitel.ascii)
|
|
else:
|
|
jmenovci = True
|
|
|
|
return render(
|
|
request, 'tvorba/archiv/tituly.tex',
|
|
{'resitele': resitele, 'jmenovci': jmenovci},
|
|
content_type="text/plain"
|
|
)
|