From f8fe1e4ff61bbc6c9e37a37c3bf4ceafdb237076 Mon Sep 17 00:00:00 2001 From: Christoph Egger Date: Mon, 9 Sep 2013 18:21:22 +0200 Subject: [PATCH] More Fancy Teilnehmertool --- teilnehmertool.py | 86 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 8 deletions(-) diff --git a/teilnehmertool.py b/teilnehmertool.py index 1547678..4961e70 100644 --- a/teilnehmertool.py +++ b/teilnehmertool.py @@ -1,18 +1,37 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +import argparse import sqlite3 +import datetime +import csv import string import jinja2 import os import os.path -conn = sqlite3.connect('teilnehmer.sqlite') -conn.text_factory = str +conn = None + env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates')) -def create_mail(): +def import_teilnehmer(input): + ids = set([ i[0] for i in conn.execute('SELECT id FROM teilnehmer').fetchall() ]) + + with open(input) as f: + reader = csv.reader(f, delimiter=';', quotechar='"') + for row in reader: + if row[0] == '#': + continue + if not int(row[0]) in ids: + print "Importing %s" % (row, ) + conn.execute("INSERT INTO teilnehmer VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + row + [0, 0, 0]) + + conn.commit() + + +def create_mail(outdir='output'): def gen_rechnung(tshirt, zipper): preis = 25 kosten = u"" @@ -29,22 +48,73 @@ def create_mail(): def gen_token(id, vorname, nachname): return u"%s-%s-%s" % (id, nachname.decode('utf-8').upper(), vorname.decode('utf-8').upper()) - if not os.path.exists('output'): - os.mkdir('output') - template = env.get_template('teilnehmerbeitrag.eml') for id, vorname, nachname, email, tshirt, zipper in \ conn.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer WHERE emailsent = 0"): - with open(os.path.join('output', email), 'w') as f: + with open(os.path.join(outdir, email), 'w') as f: f.write(template.render(vorname=vorname.decode('utf-8'), nachname=nachname.decode('utf-8'), email=email.decode('utf-8'), token=gen_token(id, vorname, nachname), rechnung=gen_rechnung(tshirt, zipper)).encode('utf-8')) + conn.execute("UPDATE teilnehmer set emailsent = ? WHERE id = ?", [datetime.datetime.now().isoformat(), 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"): + + with open(os.path.join(outdir, "%s.svg" % namensschild), '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')) + +def main(): + parser = argparse.ArgumentParser(description="Ultimate Teilnehmertool") + + # Modus + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('--importcsv', action='store_true', + help='Importiere neue Teilnehmer aus CSV') + group.add_argument('--nametag', action='store_true', + help='Generiere Nametags') + group.add_argument('--email', action='store_true', + help='Generiere E-Mails mit Überweisungsinformationen') + + # Argumente + parser.add_argument('--db', default='teilnehmer.sqlite', + help='Teilnehmerdatenbank') + parser.add_argument('-i', '--input', + help='Eingabedatei') + parser.add_argument('-o', '--output', default='output', + help='Ausgabeverzeichnis') + + args = parser.parse_args() + + global conn + conn = sqlite3.connect(args.db) + conn.text_factory = str + + if args.nametag or args.email: + assert(args.output) + if not os.path.exists(args.output): + os.mkdir(args.output) + + if args.nametag: + create_nametag(args.output) + elif args.email: + create_mail(args.output) + + elif args.importcsv: + assert(args.input) + import_teilnehmer(args.input) if __name__ == '__main__': - create_mail() + main() -- 2.39.2