Přepsání stvrzenek do templates #7

Merged
zelvuska merged 3 commits from strvzenky_templates into master 2 years ago
  1. 18
      seminar/migrations/0108_nastaveni_cena_sous.py
  2. 4
      seminar/models/tvorba.py
  3. 25
      seminar/static/seminar/stvrzenky.tex
  4. 37
      soustredeni/templates/soustredeni/stvrzenky.tex
  5. 5
      soustredeni/templates/soustredeni/ucastnici.tex
  6. 26
      soustredeni/views.py

18
seminar/migrations/0108_nastaveni_cena_sous.py

@ -0,0 +1,18 @@
# Generated by Django 3.2.16 on 2022-11-14 20:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('seminar', '0107_zmrazenavysledkovka'),
]
operations = [
migrations.AddField(
model_name='nastaveni',
name='cena_sous',
field=models.IntegerField(default=1000, verbose_name='Účastnický poplatek za soustředění'),
),
]

4
seminar/models/tvorba.py

@ -718,6 +718,10 @@ class Nastaveni(SingletonModel):
aktualni_cislo = models.ForeignKey(Cislo, verbose_name='Aktuální číslo',
null=False, on_delete=models.PROTECT)
cena_sous = models.IntegerField(null=False,
verbose_name="Účastnický poplatek za soustředění",
default=1000)
@property
def aktualni_rocnik(self):
return self.aktualni_cislo.rocnik

25
seminar/static/seminar/stvrzenky.tex

@ -1,25 +0,0 @@
\input opmac
\chyph
\nopagenumbers
\parindent=0pt
\def\castka{1000}
\newread\data
\openin\data=/dev/stdin
\read\data to\termin
\read\data to\misto
\loop
\read\data to\ucastnik
\unless\ifeof\data
\vbox{\picw=2cm\inspic logomm.pdf \smallskip\hrule\medskip
Potvrzujeme, že \ucastnik se zúčastnil(a) soustředění Korespondenčního semináře M\&M konaného % \ucastnik má na konci mezeru
v~termínu \termin a že zaplatil(a) účastnický poplatek ve výši $\sim$\castka$\sim$. % \termin též
\bigskip
\the\day.~\the\month.~\the\year, \misto\hfill Přijal(a): \hbox to 4cm{\hrulefill}
\bigskip
}
\repeat
\bye

37
soustredeni/templates/soustredeni/stvrzenky.tex

@ -0,0 +1,37 @@
{% autoescape off %}
{% load static %}
{% load tex %}
\documentclass[11pt,a4paper]{article}
\usepackage[left=0.75in, right=0.75in,top=0.5in,bottom=0.5in]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{graphicx}
\begin{document}
\pagenumbering{gobble}
\parindent=0pt
\def\stvrzenka#1#2{
\vbox{%
\includegraphics[width=2cm]{logomm.pdf}
\smallskip\hrule\medskip
{% with soustredeni as s %}
Potvrzujeme, že #1 #2 se zúčastnil(a) soustředění Korespondenčního semináře M\&M konaného
v~termínu {{s.datum_zacatku|date:"j.~n.~Y"|sloz}} --
{{s.datum_konce|date:"j.~n.~Y"|sloz}} a~že zaplatil(a) účastnický poplatek ve
výši $\sim${{castka|sloz}}$\sim$.
\bigskip
{{s.datum_zacatku|date:"j.~n.~Y"|sloz}}, {{s.misto|sloz}} \hfill Přijal(a): \hbox to 4cm{\hrulefill}
\bigskip
}
{% endwith %}
}
{% for u in ucastnici %}
{% with o=u.osoba %}
\stvrzenka{{o.jmeno|sloz}}{{o.prijmeni|sloz}}
{% endwith %}
{% endfor %}
\end{document}
{% endautoescape %}

5
soustredeni/templates/soustredeni/ucastnici.tex

@ -1,5 +0,0 @@
{% load tex %}
\newcommand{\datum}{{datum|date:"j. n. Y"|sloz}}
{% for u in ucastnici %}
\stvrzenka{{u.cislo_stvrzenky|sloz}}{{u.jmeno|sloz}}{{u.prijmeni|sloz}}{{u.ulice|sloz}}{{u.psc|sloz}}{{u.mesto|sloz}}
{% endfor %}

26
soustredeni/views.py

@ -1,8 +1,9 @@
from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404, render
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
from django.contrib.staticfiles.finders import find
from seminar.models import Soustredeni, Resitel, Soustredeni_Ucastnici, Nastaveni # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci
import csv
import tempfile
import shutil
@ -62,20 +63,17 @@ def soustredeniUcastniciExportView(request, soustredeni):
def soustredeniStvrzenkyView(request, soustredeni):
soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
castka = Nastaveni.get_solo().cena_sous
tex = render(request, 'soustredeni/stvrzenky.tex', {'ucastnici': ucastnici, 'soustredeni': soustredeni, 'castka': castka}).content
static = Path(settings.STATIC_ROOT)
tempdir = Path(tempfile.mkdtemp())
shutil.copy(static / 'images/logomm.pdf', tempdir)
shutil.copy(static / 'seminar/stvrzenky.tex', tempdir)
subprocess.run(
['pdfcsplain', '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:
with open(tempdir / "stvrzenky.tex", "w") as texfile:
texfile.write(tex.decode())
shutil.copy(find('images/logomm.pdf'), tempdir)
subprocess.call(["pdflatex", "stvrzenky.tex"], cwd = tempdir, stdout=subprocess.DEVNULL)
with open(tempdir / "stvrzenky.pdf", "rb") as pdffile:
response = HttpResponse(pdffile.read(), content_type='application/pdf')
shutil.rmtree(tempdir)
return response

Loading…
Cancel
Save