]>
git.siccegge.de Git - teilnehmertool.git/blob - teilnehmertool.py
2 # -*- coding: utf-8 -*-
16 env
= jinja2
.Environment(loader
=jinja2
.FileSystemLoader('templates'))
18 def import_teilnehmer(input):
19 ids
= set([ i
[0] for i
in conn
.execute('SELECT id FROM teilnehmer').fetchall() ])
21 with
open(input) as f
:
22 reader
= csv
.reader(f
, delimiter
=';', quotechar
='"')
26 if not int(row
[0]) in ids
:
27 print "Importing %s" % (row
, )
28 conn
.execute("INSERT INTO teilnehmer VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
34 def create_mail(outdir
='output'):
35 def gen_rechnung(tshirt
, zipper
):
38 kosten
+= u
"%s | %s\n" % (u
" Konferenzbeitrag".ljust(30), "25.00")
39 kosten
+= u
"%s | %s\n" % ((u
" T-Shirt (Größe %s)" % tshirt
).ljust(30), " 0.00")
40 if zipper
!= 'Kein Pulli':
41 kosten
+= u
"%s | %s\n" % ((u
" Kapuzenzipper (Größe %s)" % zipper
).ljust(30), "25.00")
43 kosten
+= ' '*2 + 29*'-' + '+' + 6*'-' + '\n'
44 kosten
+= u
"%s | %s\n" % (u
" Summe".ljust(30), "%2d.00" % preis
)
48 def gen_token(id, vorname
, nachname
):
49 return u
"%s-%s-%s" % (id, nachname
.decode('utf-8').upper(), vorname
.decode('utf-8').upper())
51 template
= env
.get_template('teilnehmerbeitrag.eml')
53 for id, vorname
, nachname
, email
, tshirt
, zipper
in \
54 conn
.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer WHERE emailsent = 0"):
56 with
open(os
.path
.join(outdir
, email
), 'w') as f
:
57 f
.write(template
.render(vorname
=vorname
.decode('utf-8'),
58 nachname
=nachname
.decode('utf-8'),
59 email
=email
.decode('utf-8'),
60 token
=gen_token(id, vorname
, nachname
),
61 rechnung
=gen_rechnung(tshirt
, zipper
)).encode('utf-8'))
63 conn
.execute("UPDATE teilnehmer set emailsent = ? WHERE id = ?", [datetime
.datetime
.now().isoformat(), id])
66 def create_nametag(outdir
='output'):
67 template
= env
.get_template('nametag.svg')
69 for vorname
, nachname
, namensschild
, hochschule
in \
70 conn
.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"):
72 with
open(os
.path
.join(outdir
, "%s.svg" % namensschild
), 'w') as f
:
73 f
.write(template
.render(name
=u
"%s %s" % (vorname
.decode('utf-8'),
74 nachname
.decode('utf-8')),
75 nick
=namensschild
.decode('utf-8'),
76 uni1
=hochschule
.decode('utf-8')).encode('utf-8'))
79 parser
= argparse
.ArgumentParser(description
="Ultimate Teilnehmertool")
82 group
= parser
.add_mutually_exclusive_group(required
=True)
83 group
.add_argument('--importcsv', action
='store_true',
84 help='Importiere neue Teilnehmer aus CSV')
85 group
.add_argument('--nametag', action
='store_true',
86 help='Generiere Nametags')
87 group
.add_argument('--email', action
='store_true',
88 help='Generiere E-Mails mit Überweisungsinformationen')
91 parser
.add_argument('--db', default
='teilnehmer.sqlite',
92 help='Teilnehmerdatenbank')
93 parser
.add_argument('-i', '--input',
95 parser
.add_argument('-o', '--output', default
='output',
96 help='Ausgabeverzeichnis')
98 args
= parser
.parse_args()
101 conn
= sqlite3
.connect(args
.db
)
102 conn
.text_factory
= str
104 if args
.nametag
or args
.email
:
106 if not os
.path
.exists(args
.output
):
107 os
.mkdir(args
.output
)
110 create_nametag(args
.output
)
112 create_mail(args
.output
)
116 import_teilnehmer(args
.input)
118 if __name__
== '__main__':