]> git.siccegge.de Git - teilnehmertool.git/commitdiff
teilnehmertool: teilnehmerliste erzeugen
authorJohannes Schilling <of82ecuq@cip.cs.fau.de>
Sat, 26 Oct 2013 16:42:11 +0000 (18:42 +0200)
committerJohannes Schilling <of82ecuq@cip.cs.fau.de>
Sat, 26 Oct 2013 16:42:11 +0000 (18:42 +0200)
teilnehmertool.py
templates/teilnehmerliste.tex [new file with mode: 0644]

index 24f144c128660db81637efe86b320ccf828677ab..0408eb22ed886723ac792b4c7cb20c74736fd1b2 100755 (executable)
@@ -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 (file)
index 0000000..34e2dc4
--- /dev/null
@@ -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}