#!/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""
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()