X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=teilnehmertool.py;h=bc77a2873274ac5d89133b7a3f3b578620aa533e;hb=6efc0a9bdc78cb5f4023aae2908bca9533a39dc1;hp=60f36ef4a990fd1af2d763e0054f3b80f9280057;hpb=00c8374afec267cf6676fe074863f3ae95039075;p=teilnehmertool.git diff --git a/teilnehmertool.py b/teilnehmertool.py index 60f36ef..bc77a28 100755 --- a/teilnehmertool.py +++ b/teilnehmertool.py @@ -13,7 +13,7 @@ import os.path conn = None -env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates')) +env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates', encoding='utf-8')) def import_teilnehmer(input): ids = set([ i[0] for i in conn.execute('SELECT id FROM teilnehmer').fetchall() ]) @@ -29,17 +29,32 @@ def import_teilnehmer(input): row + [0, 0, 0]) conn.commit() - -def mark_pay(): + +def mark_pay(outdir): betrag = int(raw_input("Betrag: ")) + template = env.get_template('eingangsbestaetigung.eml') + while True: uid = raw_input("User: ") if uid == "": break uid = int(uid) + vorname, nachname, email, bezahlt = \ + conn.execute("SELECT vorname, nachname, email, bezahlt FROM teilnehmer WHERE id = ?", [uid]).fetchone() + + if bezahlt == betrag: + continue + conn.execute("UPDATE teilnehmer SET bezahlt = ? WHERE id = ?", [betrag, uid]) + + with open(os.path.join(outdir, email), 'w') as f: + f.write(template.render(vorname=vorname.decode('utf-8'), + nachname=nachname.decode('utf-8'), + email=email.decode('utf-8'), + betrag=betrag).encode('utf-8')) + conn.commit() def create_mail(outdir='output'): @@ -77,9 +92,46 @@ def create_mail(outdir='output'): preis, id]) conn.commit() +def create_remind(outdir='output'): + def gen_rechnung(tshirt, zipper): + preis = 25 + kosten = u"" + kosten += u"%s | %s\n" % (u" Konferenzbeitrag".ljust(30), "25.00") + kosten += u"%s | %s\n" % ((u" T-Shirt (Größe %s)" % tshirt).ljust(30), " 0.00") + if zipper != 'Kein Pulli': + kosten += u"%s | %s\n" % ((u" Kapuzenzipper (Größe %s)" % zipper).ljust(30), "25.00") + preis += 25 + kosten += ' '*2 + 29*'-' + '+' + 6*'-' + '\n' + kosten += u"%s | %s\n" % (u" Summe".ljust(30), "%2d.00" % preis) + + return kosten, preis + + def gen_token(id, vorname, nachname): + return u"%s-%s-%s" % (id, nachname.decode('utf-8').upper(), vorname.decode('utf-8').upper()) + + template = env.get_template('erinnerung.eml') + + for id, vorname, nachname, email, tshirt, zipper in \ + conn.execute("SELECT id, vorname, nachname, email, tshirt, zipper FROM teilnehmer " + + "WHERE bezahlt < 25 AND datetime(emailsent) < datetime(?)", + [(datetime.datetime.now() - datetime.timedelta(14)).isoformat()]): + + rechnung, preis = gen_rechnung(tshirt, zipper) + + with open(os.path.join(outdir, email), 'w') as f: + f.write(template.render(vorname=vorname.decode('utf-8'), + nachname=nachname.decode('utf-8'), + email=email.decode('utf-8'), + token=gen_token(id, vorname, nachname), + rechnung=rechnung).encode('utf-8')) + + conn.execute("UPDATE teilnehmer set emailsent = ?, betrag = ? WHERE id = ?", [datetime.datetime.now().isoformat(), + preis, id]) + conn.commit() + def create_nametag(outdir='output'): template = env.get_template('nametag.svg') - + for vorname, nachname, namensschild, hochschule in \ conn.execute("SELECT vorname, nachname, namensschild, hochschule FROM teilnehmer"): @@ -89,6 +141,27 @@ def create_nametag(outdir='output'): nick=namensschild.decode('utf-8'), uni1=hochschule.decode('utf-8')).encode('utf-8')) +def create_bmbf_list(outdir = 'output'): + template = env.get_template('bmbf-unterschriftenliste.tex') + + + teilnehmer = [] + i = 1 + for vor, nach, hochschule in \ + conn.execute("SELECT vorname, nachname, hochschule FROM teilnehmer ORDER BY UPPER(nachname) ASC"): + + vor = vor.decode('utf8') + nach = nach.decode('utf8') + hochschule = hochschule.decode('utf8') + + teilnehmer.append({'vorname': vor, 'nachname': nach, 'num': i, 'hochschule': hochschule}) + i = i+1 + + + with open(os.path.join(outdir, "bmbf-unterschriftenliste.tex"), 'w') as out: + out.write(template.render(teilnehmer=teilnehmer).encode('utf-8')) + + def main(): parser = argparse.ArgumentParser(description="Ultimate Teilnehmertool") @@ -102,7 +175,11 @@ def main(): help='Generiere E-Mails mit Überweisungsinformationen') group.add_argument('--pay', action='store_true', help='Speichere Zahlungseingang') - + group.add_argument('--remind', action='store_true', + help='Generiere Zahlungsaufforderungserinnerung') + group.add_argument('--bmbf', action='store_true', + help='Generiere BMBF-Unterschriftenliste') + # Argumente parser.add_argument('--db', default='teilnehmer.sqlite', help='Teilnehmerdatenbank') @@ -110,30 +187,36 @@ def main(): help='Eingabedatei') parser.add_argument('-o', '--output', default='output', help='Ausgabeverzeichnis') - + args = parser.parse_args() global conn conn = sqlite3.connect(args.db) conn.text_factory = str + conn.row_factory = sqlite3.Row + conn.execute('pragma encoding = "UTF-8";') - if args.nametag or args.email: + if args.nametag or args.email or args.pay or args.remind or args.bmbf: assert(args.output) if not os.path.exists(args.output): os.mkdir(args.output) - + if args.nametag: create_nametag(args.output) elif args.email: create_mail(args.output) + elif args.pay: + mark_pay(args.output) + elif args.remind: + create_remind(args.output) + elif args.bmbf: + create_bmbf_list(args.output) elif args.importcsv: assert(args.input) import_teilnehmer(args.input) - elif args.pay: - mark_pay() - if __name__ == '__main__': main() - + +# vim: set expandtab :