X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=teilnehmertool.py;h=74f0161d1d50feeac1fa80ae4d0f481897db8ebe;hb=8947d74f9519656804f0f34c8d2cf80afd3f0688;hp=d80d2a1e98309b275d5c79a21cb241b1d1311335;hpb=f285089977c17a79f5458af7e57096674633bc4a;p=teilnehmertool.git diff --git a/teilnehmertool.py b/teilnehmertool.py index d80d2a1..74f0161 100755 --- a/teilnehmertool.py +++ b/teilnehmertool.py @@ -10,6 +10,9 @@ import jinja2 import os import os.path import re +import sys + +import csv conn = None @@ -19,7 +22,7 @@ env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates', encoding='u ## jinja2 TeX espaping from http://flask.pocoo.org/snippets/55/ LATEX_SUBS = [ - (re.compile(r'\\'), r'\\textbackslash'), + (re.compile(r'\\'), r'\\textbackslash{}'), (re.compile(r'([{}_#%&$])'), r'\\\1'), (re.compile(r'~'), r'\~{}'), (re.compile(r'\^'), r'\^{}'), @@ -36,6 +39,34 @@ def escape_tex(value): env.filters['escape_tex'] = escape_tex +## dont judge me. i don't see any good way sadly +VERANSTALTUNGSLEITER = { + } + +def is_veranstaltungsleiter(row): + if VERANSTALTUNGSLEITER.has_key(row['username']): + return True + return False + + +def create_helfer_nametags(csvpath, outdir='helfer_nametags'): + template = env.get_template('nametag.svg') + + with open(csvpath, 'r') as csvfile: + csvreader = csv.DictReader(csvfile, delimiter=',', quotechar='"') + uni = "FAU Erlangen" + + for row in csvreader: + if is_veranstaltungsleiter(row): + nick = "%s %s" % (VERANSTALTUNGSLEITER[row['username']][0], VERANSTALTUNGSLEITER[row['username']][1]) + with open(os.path.join(outdir, "%s.svg" % nick), 'w') as f: + f.write(template.render(nick=nick.decode('utf-8'), uni1=uni.decode('utf-8')).encode('utf-8')) + nick = "%s" % (row['username']) + + with open(os.path.join(outdir, "%s.svg" % nick), 'w') as f: + f.write(template.render(nick=nick.decode('utf-8'), uni1=uni.decode('utf-8')).encode('utf-8')) + + def import_teilnehmer(input): ids = set([ i[0] for i in conn.execute('SELECT id FROM teilnehmer').fetchall() ]) @@ -46,8 +77,8 @@ def import_teilnehmer(input): continue if not int(row[0]) in ids: print "Importing %s" % (row, ) - conn.execute("INSERT INTO teilnehmer VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", - row[:-2] + ['Kein T-Shirt', 'Kein Pulli'] + row[-2:] + [0, 0, 0]) + conn.execute("INSERT INTO teilnehmer VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + row[:-2] + ['Kein T-Shirt', 'Kein Pulli'] + row[-2:] + [0, 0, 0, "", "false"]) conn.commit() @@ -150,27 +181,31 @@ def create_remind(outdir='output'): preis, id]) conn.commit() + def create_nametag(outdir='output'): template = env.get_template('nametag.svg') - for vorname, nachname, namensschild, hochschule in \ - conn.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"): + for teiln_id, vorname, nachname, namensschild, hochschule, dochned in \ + conn.execute("SELECT id, vorname, nachname, namensschild, hochschule, dochned FROM teilnehmer"): + + if dochned != "false": + print >> sys.stderr, "not generating %s %s (id %s), because abgemeldet" % (vorname, nachname, teiln_id) + continue - with open(os.path.join(outdir, "%s.svg" % namensschild), 'w') as f: + with open(os.path.join(outdir, "%s.svg" % teiln_id), 'w') as f: f.write(template.render(name=u"%s %s" % (vorname.decode('utf-8'), nachname.decode('utf-8')), nick=namensschild.decode('utf-8'), uni1=hochschule.decode('utf-8')).encode('utf-8')) -## TODO: feld 'comments', alle abgemeldeten checken und eintragen, -## nicht-tüter, nicht-XYer.. def create_teilnehmer_list(outdir = 'output'): - template = env.get_template('teilnehmerliste.tex') + template_full = env.get_template('teilnehmerliste.tex') + template_pack = env.get_template('packliste.tex') teilnehmer = [] for vor, nach, nick, hochschule, betrag, bezahlt, shirtsize, zippersize, dochned, comment in \ - conn.execute("SELECT vorname, nachname, namensschild, hochschule, betrag, bezahlt, tshirt, zipper, dochned, orga_comment FROM teilnehmer ORDER BY UPPER(nachname) ASC"): + conn.execute("SELECT vorname, nachname, namensschild, hochschule, betrag, bezahlt, tshirt, zipper, dochned, orga_comment FROM teilnehmer ORDER BY UPPER(hochschule) ASC, UPPER(nachname) ASC"): vor = vor.decode('utf8') nach = nach.decode('utf8') @@ -191,6 +226,7 @@ def create_teilnehmer_list(outdir = 'output'): will_attend = True else: will_attend = False + comment = comment.decode('utf8') teilnehmer.append({'vorname': vor, 'nachname': nach, @@ -200,7 +236,10 @@ def create_teilnehmer_list(outdir = 'output'): with open(os.path.join(outdir, "teilnehmerliste.tex"), 'w') as out: - out.write(template.render(teilnehmer=teilnehmer).encode('utf-8')) + out.write(template_full.render(teilnehmer=teilnehmer).encode('utf-8')) + + with open(os.path.join(outdir, "packliste.tex"), 'w') as out: + out.write(template_pack.render(teilnehmer=teilnehmer).encode('utf-8')) @@ -244,6 +283,8 @@ def main(): help='Generiere BMBF-Unterschriftenliste') group.add_argument('--liste', action='store_true', help='Generiere Teilnehmerübersichtsliste') + group.add_argument('--helfer', action='store_true', + help='Generiere Helfer-Nametags aus helfer.csv') # Argumente parser.add_argument('--db', default='teilnehmer.sqlite', @@ -261,7 +302,8 @@ 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 or args.liste: + if args.nametag or args.email or args.pay or args.remind or args.bmbf or \ + args.liste or args.helfer: assert(args.output) if not os.path.exists(args.output): os.mkdir(args.output) @@ -278,6 +320,9 @@ def main(): create_bmbf_list(args.output) elif args.liste: create_teilnehmer_list(args.output) + elif args.helfer: + assert(args.input) + create_helfer_nametags(args.input, args.output) elif args.importcsv: assert(args.input)