From 3b89868acd11f048e2216d724612aaf815c5ff27 Mon Sep 17 00:00:00 2001 From: Johannes Schilling Date: Sat, 26 Oct 2013 18:42:11 +0200 Subject: [PATCH] teilnehmertool: teilnehmerliste erzeugen --- teilnehmertool.py | 62 +++++++++++++++++++++++++++++++++- templates/teilnehmerliste.tex | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 templates/teilnehmerliste.tex diff --git a/teilnehmertool.py b/teilnehmertool.py index 24f144c..0408eb2 100755 --- a/teilnehmertool.py +++ b/teilnehmertool.py @@ -9,12 +9,33 @@ import string import jinja2 import os import os.path +import re conn = None env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates', encoding='utf-8')) + +## jinja2 TeX espaping from http://flask.pocoo.org/snippets/55/ +LATEX_SUBS = [ + (re.compile(r'\\'), r'\\textbackslash'), + (re.compile(r'([{}_#%&$])'), r'\\\1'), + (re.compile(r'~'), r'\~{}'), + (re.compile(r'\^'), r'\^{}'), + (re.compile(r'"'), r"''"), + (re.compile(r'\.\.\.+'), r'\\ldots'), +] + +def escape_tex(value): + newval = value + for pattern, replacement in LATEX_SUBS: + newval = pattern.sub(replacement, newval) + return newval + +env.filters['escape_tex'] = escape_tex + + def import_teilnehmer(input): ids = set([ i[0] for i in conn.execute('SELECT id FROM teilnehmer').fetchall() ]) @@ -141,6 +162,41 @@ def create_nametag(outdir='output'): nick=namensschild.decode('utf-8'), uni1=hochschule.decode('utf-8')).encode('utf-8')) + + +def create_teilnehmer_list(outdir = 'output'): + template = env.get_template('teilnehmerliste.tex') + + teilnehmer = [] + i = 1 + for vor, nach, nick, hochschule, betrag, bezahlt, shirtsize, zippersize in \ + conn.execute("SELECT vorname, nachname, namensschild, hochschule, betrag, bezahlt, tshirt, zipper FROM teilnehmer ORDER BY UPPER(nachname) ASC"): + + vor = vor.decode('utf8') + nach = nach.decode('utf8') + nick = nick.decode('utf8') + hochschule = hochschule.decode('utf8') + ## betrag ist schon int + ## bezahlt ist schon int + shirtsize = shirtsize.decode('utf8') + if re.match("kein", shirtsize, flags=re.IGNORECASE): + shirtsize = "" + + zippersize = zippersize.decode('utf8') + if re.match("kein", zippersize, flags=re.IGNORECASE): + zippersize = "" + + teilnehmer.append({'vorname': vor, 'nachname': nach, 'num': i, + 'hochschule': hochschule, 'nick': nick, 'betrag': betrag, 'bezahlt': + bezahlt, 'shirtsize': shirtsize, 'zippersize': zippersize}) + i = i+1 + + + with open(os.path.join(outdir, "teilnehmerliste.tex"), 'w') as out: + out.write(template.render(teilnehmer=teilnehmer).encode('utf-8')) + + + def create_bmbf_list(outdir = 'output'): template = env.get_template('bmbf-unterschriftenliste.tex') @@ -179,6 +235,8 @@ def main(): help='Generiere Zahlungsaufforderungserinnerung') group.add_argument('--bmbf', action='store_true', help='Generiere BMBF-Unterschriftenliste') + group.add_argument('--liste', action='store_true', + help='Generiere Teilnehmerübersichtsliste') # Argumente parser.add_argument('--db', default='teilnehmer.sqlite', @@ -196,7 +254,7 @@ def main(): conn.row_factory = sqlite3.Row conn.execute('pragma encoding = "UTF-8";') - if args.nametag or args.email or args.pay or args.remind or args.bmbf: + if args.nametag or args.email or args.pay or args.remind or args.bmbf or args.liste: assert(args.output) if not os.path.exists(args.output): os.mkdir(args.output) @@ -211,6 +269,8 @@ def main(): create_remind(args.output) elif args.bmbf: create_bmbf_list(args.output) + elif args.liste: + create_teilnehmer_list(args.output) elif args.importcsv: assert(args.input) diff --git a/templates/teilnehmerliste.tex b/templates/teilnehmerliste.tex new file mode 100644 index 0000000..34e2dc4 --- /dev/null +++ b/templates/teilnehmerliste.tex @@ -0,0 +1,63 @@ +\documentclass[a4paper,landscape]{scrartcl} + +\usepackage[margin=2cm]{geometry} + +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[ngerman]{babel} + +\usepackage{color} + +\usepackage{amsmath,amsthm,amssymb} +\usepackage{mathtools} + +\usepackage{array} + +\usepackage{ytableau} + +\usepackage{enumerate} + +\usepackage{fancyhdr} +\pagestyle{fancy} + +\usepackage{booktabs} +\usepackage{multirow} + +\fancyhf{} +\chead{Teilnehmerliste KIF 41,5 Erlangen} +\cfoot{\thepage{}/\pageref{lastpage}} + +\usepackage{longtable} + +\setlength{\headheight}{28pt} +\addtolength{\textheight}{-28pt} + +\setlength{\parskip}{7pt} +\setlength{\parindent}{0pt} + +%% this took me an hour or so. hope it's worth it +\DeclareUnicodeCharacter{1ED1}{\resizebox{.80em}{!}{\resizebox{.4em}{!}{\^{o}}\hspace{-1mm}\'{}}\hspace{-1mm}{}} +%% easier unicode characters +\DeclareUnicodeCharacter{03B2}{$\beta$} + +\begin{document} + +\begin{center} + \begin{longtable}{|m{.1\textwidth}|m{.1\textwidth}|m{.18\textwidth}|m{.15\textwidth}|m{.07\textwidth}|m{.07\textwidth}|m{.05\textwidth}|m{.05\textwidth}|m{.1\textwidth}|} + \textbf{Vorname} & \textbf{Nachname} & \textbf{Namensschild} & \textbf{Hochschule} & + \textbf{Betrag} & \textbf{Bezahlt} & \textbf{Bar bezahlt} & \textbf{T-Shirt-Größe} & + \textbf{Zippergröße} \\ + \hline + \hline + \endhead +{% for t in teilnehmer %} + {{ t['vorname'] | escape_tex }} & {{ t['nachname'] | escape_tex }} & {{ t['nick'] | escape_tex }} & {{ + t['hochschule'] | escape_tex }} & {{ t['betrag'] }} & {{ t['bezahlt'] }} & \vspace{1em} & {{ + t['shirtsize'] | escape_tex }} & {{ t['zippersize'] | escape_tex }} \\ + \hline{% endfor %} + \end{longtable} +\end{center} + + +\label{lastpage} +\end{document} -- 2.39.5