]>
git.siccegge.de Git - teilnehmertool.git/blob - teilnehmertool.py
cb9d9d483a1018d38c773bf7d14a4785193a4b2d
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 rechnung
, preis
= gen_rechnung(tshirt
, zipper
)).encode('utf-8')
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
),
76 conn
.execute("UPDATE teilnehmer set emailsent = ?, betrag = ? WHERE id = ?", [datetime
.datetime
.now().isoformat(),
80 def create_nametag(outdir
='output'):
81 template
= env
.get_template('nametag.svg')
83 for vorname
, nachname
, namensschild
, hochschule
in \
84 conn
.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"):
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'))
93 parser
= argparse
.ArgumentParser(description
="Ultimate Teilnehmertool")
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')
107 parser
.add_argument('--db', default
='teilnehmer.sqlite',
108 help='Teilnehmerdatenbank')
109 parser
.add_argument('-i', '--input',
111 parser
.add_argument('-o', '--output', default
='output',
112 help='Ausgabeverzeichnis')
114 args
= parser
.parse_args()
117 conn
= sqlite3
.connect(args
.db
)
118 conn
.text_factory
= str
120 if args
.nametag
or args
.email
:
122 if not os
.path
.exists(args
.output
):
123 os
.mkdir(args
.output
)
126 create_nametag(args
.output
)
128 create_mail(args
.output
)
132 import_teilnehmer(args
.input)
137 if __name__
== '__main__':