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. 24
      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', aktualni_cislo = models.ForeignKey(Cislo, verbose_name='Aktuální číslo',
null=False, on_delete=models.PROTECT) null=False, on_delete=models.PROTECT)
cena_sous = models.IntegerField(null=False,
verbose_name="Účastnický poplatek za soustředění",
default=1000)
@property @property
def aktualni_rocnik(self): def aktualni_rocnik(self):
return self.aktualni_cislo.rocnik 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 %}

24
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.http import HttpResponse
from django.views import generic from django.views import generic
from django.conf import settings 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 csv
import tempfile import tempfile
import shutil import shutil
@ -62,20 +63,17 @@ def soustredeniUcastniciExportView(request, soustredeni):
def soustredeniStvrzenkyView(request, soustredeni): def soustredeniStvrzenkyView(request, soustredeni):
soustredeni = get_object_or_404(Soustredeni, id=soustredeni) soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
ucastnici = Resitel.objects.filter(soustredeni=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()) tempdir = Path(tempfile.mkdtemp())
shutil.copy(static / 'images/logomm.pdf', tempdir) with open(tempdir / "stvrzenky.tex", "w") as texfile:
shutil.copy(static / 'seminar/stvrzenky.tex', tempdir) texfile.write(tex.decode())
subprocess.run(
['pdfcsplain', 'stvrzenky.tex'], shutil.copy(find('images/logomm.pdf'), tempdir)
cwd=tempdir, subprocess.call(["pdflatex", "stvrzenky.tex"], cwd = tempdir, stdout=subprocess.DEVNULL)
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.pdf", "rb") as pdffile:
response = HttpResponse(pdffile.read(), content_type='application/pdf') response = HttpResponse(pdffile.read(), content_type='application/pdf')
shutil.rmtree(tempdir) shutil.rmtree(tempdir)
return response return response

Loading…
Cancel
Save