]> git.siccegge.de Git - teilnehmertool.git/blob - teilnehmertool.py
Add expected payment to db when generating email
[teilnehmertool.git] / teilnehmertool.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 import argparse
5 import sqlite3
6 import datetime
7 import csv
8 import string
9 import jinja2
10 import os
11 import os.path
12
13 conn = None
14
15
16 env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates'))
17
18 def import_teilnehmer(input):
19 ids = set([ i[0] for i in conn.execute('SELECT id FROM teilnehmer').fetchall() ])
20
21 with open(input) as f:
22 reader = csv.reader(f, delimiter=';', quotechar='"')
23 for row in reader:
24 if row[0] == '#':
25 continue
26 if not int(row[0]) in ids:
27 print "Importing %s" % (row, )
28 conn.execute("INSERT INTO teilnehmer VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
29 row + [0, 0, 0])
30
31 conn.commit()
32
33 def mark_pay():
34 betrag = int(raw_input("Betrag: "))
35
36 while True:
37 uid = raw_input("User: ")
38 if uid == "":
39 break
40 uid = int(uid)
41 conn.execute("UPDATE teilnehmer SET bezahlt = ? WHERE id = ?", [betrag, uid])
42
43 conn.commit()
44
45 def create_mail(outdir='output'):
46 def gen_rechnung(tshirt, zipper):
47 preis = 25
48 kosten = u""
49 kosten += u"%s | %s\n" % (u" Konferenzbeitrag".ljust(30), "25.00")
50 kosten += u"%s | %s\n" % ((u" T-Shirt (Größe %s)" % tshirt).ljust(30), " 0.00")
51 if zipper != 'Kein Pulli':
52 kosten += u"%s | %s\n" % ((u" Kapuzenzipper (Größe %s)" % zipper).ljust(30), "25.00")
53 preis += 25
54 kosten += ' '*2 + 29*'-' + '+' + 6*'-' + '\n'
55 kosten += u"%s | %s\n" % (u" Summe".ljust(30), "%2d.00" % preis)
56
57 return kosten, preis
58
59 def gen_token(id, vorname, nachname):
60 return u"%s-%s-%s" % (id, nachname.decode('utf-8').upper(), vorname.decode('utf-8').upper())
61
62 template = env.get_template('teilnehmerbeitrag.eml')
63
64 for id, vorname, nachname, email, tshirt, zipper in \
65 conn.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer WHERE emailsent = 0"):
66
67 rechnung, preis = gen_rechnung(tshirt, zipper)).encode('utf-8')
68
69 with open(os.path.join(outdir, email), 'w') as f:
70 f.write(template.render(vorname=vorname.decode('utf-8'),
71 nachname=nachname.decode('utf-8'),
72 email=email.decode('utf-8'),
73 token=gen_token(id, vorname, nachname),
74 rechnung=rechnung)
75
76 conn.execute("UPDATE teilnehmer set emailsent = ?, betrag = ? WHERE id = ?", [datetime.datetime.now().isoformat(),
77 preis, id])
78 conn.commit()
79
80 def create_nametag(outdir='output'):
81 template = env.get_template('nametag.svg')
82
83 for vorname, nachname, namensschild, hochschule in \
84 conn.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"):
85
86 with open(os.path.join(outdir, "%s.svg" % namensschild), 'w') as f:
87 f.write(template.render(name=u"%s %s" % (vorname.decode('utf-8'),
88 nachname.decode('utf-8')),
89 nick=namensschild.decode('utf-8'),
90 uni1=hochschule.decode('utf-8')).encode('utf-8'))
91
92 def main():
93 parser = argparse.ArgumentParser(description="Ultimate Teilnehmertool")
94
95 # Modus
96 group = parser.add_mutually_exclusive_group(required=True)
97 group.add_argument('--importcsv', action='store_true',
98 help='Importiere neue Teilnehmer aus CSV')
99 group.add_argument('--nametag', action='store_true',
100 help='Generiere Nametags')
101 group.add_argument('--email', action='store_true',
102 help='Generiere E-Mails mit Überweisungsinformationen')
103 group.add_argument('--pay', action='store_true',
104 help='Speichere Zahlungseingang')
105
106 # Argumente
107 parser.add_argument('--db', default='teilnehmer.sqlite',
108 help='Teilnehmerdatenbank')
109 parser.add_argument('-i', '--input',
110 help='Eingabedatei')
111 parser.add_argument('-o', '--output', default='output',
112 help='Ausgabeverzeichnis')
113
114 args = parser.parse_args()
115
116 global conn
117 conn = sqlite3.connect(args.db)
118 conn.text_factory = str
119
120 if args.nametag or args.email:
121 assert(args.output)
122 if not os.path.exists(args.output):
123 os.mkdir(args.output)
124
125 if args.nametag:
126 create_nametag(args.output)
127 elif args.email:
128 create_mail(args.output)
129
130 elif args.importcsv:
131 assert(args.input)
132 import_teilnehmer(args.input)
133
134 elif args.pay:
135 mark_pay()
136
137 if __name__ == '__main__':
138 main()
139