]>
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 betrag
= int(raw_input("Betrag: "))
37 uid
= raw_input("User: ")
41 conn
.execute("UPDATE teilnehmer SET bezahlt = ? WHERE id = ?", [betrag
, uid
])
45 def create_mail(outdir
='output'):
46 def gen_rechnung(tshirt
, zipper
):
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")
54 kosten
+= ' '*2 + 29*'-' + '+' + 6*'-' + '\n'
55 kosten
+= u
"%s | %s\n" % (u
" Summe".ljust(30), "%2d.00" % preis
)
59 def gen_token(id, vorname
, nachname
):
60 return u
"%s-%s-%s" % (id, nachname
.decode('utf-8').upper(), vorname
.decode('utf-8').upper())
62 template
= env
.get_template('teilnehmerbeitrag.eml')
64 for id, vorname
, nachname
, email
, tshirt
, zipper
in \
65 conn
.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer WHERE emailsent = 0"):
67 with
open(os
.path
.join(outdir
, email
), 'w') as f
:
68 f
.write(template
.render(vorname
=vorname
.decode('utf-8'),
69 nachname
=nachname
.decode('utf-8'),
70 email
=email
.decode('utf-8'),
71 token
=gen_token(id, vorname
, nachname
),
72 rechnung
=gen_rechnung(tshirt
, zipper
)).encode('utf-8'))
74 conn
.execute("UPDATE teilnehmer set emailsent = ? WHERE id = ?", [datetime
.datetime
.now().isoformat(), id])
77 def create_nametag(outdir
='output'):
78 template
= env
.get_template('nametag.svg')
80 for vorname
, nachname
, namensschild
, hochschule
in \
81 conn
.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"):
83 with
open(os
.path
.join(outdir
, "%s.svg" % namensschild
), 'w') as f
:
84 f
.write(template
.render(name
=u
"%s %s" % (vorname
.decode('utf-8'),
85 nachname
.decode('utf-8')),
86 nick
=namensschild
.decode('utf-8'),
87 uni1
=hochschule
.decode('utf-8')).encode('utf-8'))
90 parser
= argparse
.ArgumentParser(description
="Ultimate Teilnehmertool")
93 group
= parser
.add_mutually_exclusive_group(required
=True)
94 group
.add_argument('--importcsv', action
='store_true',
95 help='Importiere neue Teilnehmer aus CSV')
96 group
.add_argument('--nametag', action
='store_true',
97 help='Generiere Nametags')
98 group
.add_argument('--email', action
='store_true',
99 help='Generiere E-Mails mit Überweisungsinformationen')
100 group
.add_argument('--pay', action
='store_true',
101 help='Speichere Zahlungseingang')
104 parser
.add_argument('--db', default
='teilnehmer.sqlite',
105 help='Teilnehmerdatenbank')
106 parser
.add_argument('-i', '--input',
108 parser
.add_argument('-o', '--output', default
='output',
109 help='Ausgabeverzeichnis')
111 args
= parser
.parse_args()
114 conn
= sqlite3
.connect(args
.db
)
115 conn
.text_factory
= str
117 if args
.nametag
or args
.email
:
119 if not os
.path
.exists(args
.output
):
120 os
.mkdir(args
.output
)
123 create_nametag(args
.output
)
125 create_mail(args
.output
)
129 import_teilnehmer(args
.input)
134 if __name__
== '__main__':