]>
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: "))
36 template
= env
.get_template('eingangsbestaetigung.eml')
39 uid
= raw_input("User: ")
43 vorname
, nachname
, email
, bezahlt
= \
44 conn
.execute("SELECT vorname, nachname, email, bezahlt FROM teilnehmer WHERE id = ?", [uid
]).fetchone()
49 conn
.execute("UPDATE teilnehmer SET bezahlt = ? WHERE id = ?", [betrag
, uid
])
52 with
open(os
.path
.join(outdir
, email
), 'w') as f
:
53 f
.write(template
.render(vorname
=vorname
.decode('utf-8'),
54 nachname
=nachname
.decode('utf-8'),
55 email
=email
.decode('utf-8'),
56 betrag
=betrag
).encode('utf-8'))
60 def create_mail(outdir
='output'):
61 def gen_rechnung(tshirt
, zipper
):
64 kosten
+= u
"%s | %s\n" % (u
" Konferenzbeitrag".ljust(30), "25.00")
65 kosten
+= u
"%s | %s\n" % ((u
" T-Shirt (Größe %s)" % tshirt
).ljust(30), " 0.00")
66 if zipper
!= 'Kein Pulli':
67 kosten
+= u
"%s | %s\n" % ((u
" Kapuzenzipper (Größe %s)" % zipper
).ljust(30), "25.00")
69 kosten
+= ' '*2 + 29*'-' + '+' + 6*'-' + '\n'
70 kosten
+= u
"%s | %s\n" % (u
" Summe".ljust(30), "%2d.00" % preis
)
74 def gen_token(id, vorname
, nachname
):
75 return u
"%s-%s-%s" % (id, nachname
.decode('utf-8').upper(), vorname
.decode('utf-8').upper())
77 template
= env
.get_template('teilnehmerbeitrag.eml')
79 for id, vorname
, nachname
, email
, tshirt
, zipper
in \
80 conn
.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer WHERE emailsent = 0"):
82 rechnung
, preis
= gen_rechnung(tshirt
, zipper
)
84 with
open(os
.path
.join(outdir
, email
), 'w') as f
:
85 f
.write(template
.render(vorname
=vorname
.decode('utf-8'),
86 nachname
=nachname
.decode('utf-8'),
87 email
=email
.decode('utf-8'),
88 token
=gen_token(id, vorname
, nachname
),
89 rechnung
=rechnung
).encode('utf-8'))
91 conn
.execute("UPDATE teilnehmer set emailsent = ?, betrag = ? WHERE id = ?", [datetime
.datetime
.now().isoformat(),
95 def create_nametag(outdir
='output'):
96 template
= env
.get_template('nametag.svg')
98 for vorname
, nachname
, namensschild
, hochschule
in \
99 conn
.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"):
101 with
open(os
.path
.join(outdir
, "%s.svg" % namensschild
), 'w') as f
:
102 f
.write(template
.render(name
=u
"%s %s" % (vorname
.decode('utf-8'),
103 nachname
.decode('utf-8')),
104 nick
=namensschild
.decode('utf-8'),
105 uni1
=hochschule
.decode('utf-8')).encode('utf-8'))
108 parser
= argparse
.ArgumentParser(description
="Ultimate Teilnehmertool")
111 group
= parser
.add_mutually_exclusive_group(required
=True)
112 group
.add_argument('--importcsv', action
='store_true',
113 help='Importiere neue Teilnehmer aus CSV')
114 group
.add_argument('--nametag', action
='store_true',
115 help='Generiere Nametags')
116 group
.add_argument('--email', action
='store_true',
117 help='Generiere E-Mails mit Überweisungsinformationen')
118 group
.add_argument('--pay', action
='store_true',
119 help='Speichere Zahlungseingang')
122 parser
.add_argument('--db', default
='teilnehmer.sqlite',
123 help='Teilnehmerdatenbank')
124 parser
.add_argument('-i', '--input',
126 parser
.add_argument('-o', '--output', default
='output',
127 help='Ausgabeverzeichnis')
129 args
= parser
.parse_args()
132 conn
= sqlite3
.connect(args
.db
)
133 conn
.text_factory
= str
135 if args
.nametag
or args
.email
or args
.pay
:
137 if not os
.path
.exists(args
.output
):
138 os
.mkdir(args
.output
)
141 create_nametag(args
.output
)
143 create_mail(args
.output
)
145 mark_pay(args
.output
)
149 import_teilnehmer(args
.input)
151 if __name__
== '__main__':