]> git.siccegge.de Git - teilnehmertool.git/commitdiff
More Fancy Teilnehmertool
authorChristoph Egger <Christoph.Egger@fau.de>
Mon, 9 Sep 2013 16:21:22 +0000 (18:21 +0200)
committerChristoph Egger <Christoph.Egger@fau.de>
Mon, 9 Sep 2013 16:21:22 +0000 (18:21 +0200)
teilnehmertool.py

index 1547678c2ba04b9ddf0163072231fa56607565a0..4961e70a04e166f37baa2bd966ecb87a2147ebed 100644 (file)
@@ -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()