From ae4d8ea5ad29406bfeca106081fbab1b56c87659 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 21 Jul 2023 12:33:27 +0200 Subject: [PATCH] Add auszahlung.py --- wgmaster/auszahlung.py | 57 ++++++++++++++++++++++++++++++++++++++++++ wgmaster/migrate.py | 6 ++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100755 wgmaster/auszahlung.py diff --git a/wgmaster/auszahlung.py b/wgmaster/auszahlung.py new file mode 100755 index 0000000..2b09ee7 --- /dev/null +++ b/wgmaster/auszahlung.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import argparse +import json +import sqlite3 +import matplotlib.pyplot as plt + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument('db', type=str, metavar='DB', + help='The sqlite database file') + parser.add_argument('-s', '--season', type=int, required=False, + help='The season to use') + args = parser.parse_args() + + cnx = sqlite3.connect(args.db) + cur = cnx.cursor() + cur.execute("SELECT year, avnr FROM payment_variant WHERE NOT test_variant ORDER BY year, avnr") + payment_vars = cur.fetchall() + if args.season: + payment_vars = [p for p in payment_vars if p[0] == args.season] + cur.execute("SELECT data FROM payment_variant WHERE (year, avnr) = (?, ?)", payment_vars[-1]) + data = json.loads(cur.fetchall()[0][0]) + az_sort = data['AuszahlungSorten'] + curves = [{n: d for n, d in enumerate(c)} for c in az_sort['Kurven']] + c_sort_idx = [sum(c.values()) / len(c) for c in curves] + c_sort = sorted([i for i in range(len(curves))], key=lambda a: c_sort_idx[a])[::-1] + c_sort_2 = {c: i for i, c in enumerate(c_sort)} + + names: list[list[str]] = [[] for c in curves] + for sortid, d1 in az_sort.items(): + if len(sortid) != 2: + continue + for attrid, d2 in d1.items(): + for geb, d3 in d2.items(): + names[c_sort_2[d3]].append(f'{sortid}/{attrid}/{geb}') + + title = f'Endabrechnung {payment_vars[-1][0]}' + plt.figure(num=title) + plt.title(title) + for i in c_sort: + c = curves[i] + plt.plot(c.keys(), c.values()) + plt.legend(['\n'.join(a) for a in names], fontsize=8) + plt.xlabel('Gradation [°Oe]') + plt.ylabel('Betrag [€]') + plt.vlines([55, 68, 73, 84], 0.0, 1.5, colors='black') + plt.xlim([50, 120]) + plt.ylim([0.0, 1.5]) + plt.grid(linestyle='--') + plt.show() + + +if __name__ == '__main__': + main() diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index af1facd..eadcb42 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -1450,11 +1450,15 @@ def migrate_payments(in_dir: str, out_dir: str) -> None: geb = 'Gebunden' if s['gebunden'] else 'NichtGebunden' azs[snr][sanr][geb] = azs[snr][sanr].get(geb, {}) azs[snr][sanr][geb][s['Oechsle']] = s['Betrag'] + curves = [] for sortid, d1 in azs.items(): for attrid, d2 in d1.items(): for geb, d3 in d2.items(): oe = [d3.get(n, 0.0) for n in range(max(d3.keys()) + 1)] - azs[sortid][attrid][geb] = oe + if oe not in curves: + curves.append(oe) + azs[sortid][attrid][geb] = curves.index(oe) + azs['Kurven'] = curves azq = data['AuszahlungSortenQualitätsstufe'] for q in qual_map.get(p['AZNR'], []): del q['AZNR']