]>
git.siccegge.de Git - teilnehmertool.git/blob - teilnehmertool.py
2 # -*- coding: utf-8 -*-
16 env
= jinja2
.Environment(loader
=jinja2
.FileSystemLoader('templates', encoding
='utf-8'))
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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
29 row
[:-2] + ['Kein T-Shirt', 'Kein Pulli'] + row
[-2:] + [0, 0, 0])
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_remind(outdir
='output'):
96 def gen_rechnung(tshirt
, zipper
):
99 kosten
+= u
"%s | %s\n" % (u
" Konferenzbeitrag".ljust(30), "25.00")
100 kosten
+= u
"%s | %s\n" % ((u
" T-Shirt (Größe %s)" % tshirt
).ljust(30), " 0.00")
101 if zipper
!= 'Kein Pulli':
102 kosten
+= u
"%s | %s\n" % ((u
" Kapuzenzipper (Größe %s)" % zipper
).ljust(30), "25.00")
104 kosten
+= ' '*2 + 29*'-' + '+' + 6*'-' + '\n'
105 kosten
+= u
"%s | %s\n" % (u
" Summe".ljust(30), "%2d.00" % preis
)
109 def gen_token(id, vorname
, nachname
):
110 return u
"%s-%s-%s" % (id, nachname
.decode('utf-8').upper(), vorname
.decode('utf-8').upper())
112 template
= env
.get_template('erinnerung.eml')
114 for id, vorname
, nachname
, email
, tshirt
, zipper
in \
115 conn
.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer " +
116 "WHERE bezahlt < 25 AND datetime(emailsent) < datetime(?)",
117 [(datetime
.datetime
.now() - datetime
.timedelta(14)).isoformat()]):
119 rechnung
, preis
= gen_rechnung(tshirt
, zipper
)
121 with
open(os
.path
.join(outdir
, email
), 'w') as f
:
122 f
.write(template
.render(vorname
=vorname
.decode('utf-8'),
123 nachname
=nachname
.decode('utf-8'),
124 email
=email
.decode('utf-8'),
125 token
=gen_token(id, vorname
, nachname
),
126 rechnung
=rechnung
).encode('utf-8'))
128 conn
.execute("UPDATE teilnehmer set emailsent = ?, betrag = ? WHERE id = ?", [datetime
.datetime
.now().isoformat(),
132 def create_nametag(outdir
='output'):
133 template
= env
.get_template('nametag.svg')
135 for vorname
, nachname
, namensschild
, hochschule
in \
136 conn
.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"):
138 with
open(os
.path
.join(outdir
, "%s.svg" % namensschild
), 'w') as f
:
139 f
.write(template
.render(name
=u
"%s %s" % (vorname
.decode('utf-8'),
140 nachname
.decode('utf-8')),
141 nick
=namensschild
.decode('utf-8'),
142 uni1
=hochschule
.decode('utf-8')).encode('utf-8'))
144 def create_bmbf_list(outdir
= 'output'):
145 template
= env
.get_template('bmbf-unterschriftenliste.tex')
150 for vor
, nach
, hochschule
in \
151 conn
.execute("SELECT vorname, nachname, hochschule FROM teilnehmer ORDER BY UPPER(nachname) ASC"):
153 vor
= vor
.decode('utf8')
154 nach
= nach
.decode('utf8')
155 hochschule
= hochschule
.decode('utf8')
157 teilnehmer
.append({'vorname': vor
, 'nachname': nach
, 'num': i
, 'hochschule': hochschule
})
161 with
open(os
.path
.join(outdir
, "bmbf-unterschriftenliste.tex"), 'w') as out
:
162 out
.write(template
.render(teilnehmer
=teilnehmer
).encode('utf-8'))
166 parser
= argparse
.ArgumentParser(description
="Ultimate Teilnehmertool")
169 group
= parser
.add_mutually_exclusive_group(required
=True)
170 group
.add_argument('--importcsv', action
='store_true',
171 help='Importiere neue Teilnehmer aus CSV')
172 group
.add_argument('--nametag', action
='store_true',
173 help='Generiere Nametags')
174 group
.add_argument('--email', action
='store_true',
175 help='Generiere E-Mails mit Überweisungsinformationen')
176 group
.add_argument('--pay', action
='store_true',
177 help='Speichere Zahlungseingang')
178 group
.add_argument('--remind', action
='store_true',
179 help='Generiere Zahlungsaufforderungserinnerung')
180 group
.add_argument('--bmbf', action
='store_true',
181 help='Generiere BMBF-Unterschriftenliste')
184 parser
.add_argument('--db', default
='teilnehmer.sqlite',
185 help='Teilnehmerdatenbank')
186 parser
.add_argument('-i', '--input',
188 parser
.add_argument('-o', '--output', default
='output',
189 help='Ausgabeverzeichnis')
191 args
= parser
.parse_args()
194 conn
= sqlite3
.connect(args
.db
)
195 conn
.text_factory
= str
196 conn
.row_factory
= sqlite3
.Row
197 conn
.execute('pragma encoding = "UTF-8";')
199 if args
.nametag
or args
.email
or args
.pay
or args
.remind
or args
.bmbf
:
201 if not os
.path
.exists(args
.output
):
202 os
.mkdir(args
.output
)
205 create_nametag(args
.output
)
207 create_mail(args
.output
)
209 mark_pay(args
.output
)
211 create_remind(args
.output
)
213 create_bmbf_list(args
.output
)
217 import_teilnehmer(args
.input)
219 if __name__
== '__main__':
222 # vim: set expandtab :