From 6d2a08bd94817b741b9b4bad56c126648edf3505 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Wed, 23 Aug 2023 16:57:38 +0200 Subject: [PATCH] Migrate auszahlung kurven --- wgmaster/auszahlung.py | 11 ++++++++++- wgmaster/migrate.py | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/wgmaster/auszahlung.py b/wgmaster/auszahlung.py index eb09c45..83036a3 100755 --- a/wgmaster/auszahlung.py +++ b/wgmaster/auszahlung.py @@ -24,7 +24,16 @@ def main() -> None: 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']] + curves = [ + { + int(n[:-2]): d + for n, d in + [('50oe', c[sorted(c.keys(), key=lambda v: int(v[:-2]))[0]])] + + list(c.items()) + + [('120oe', c[sorted(c.keys(), key=lambda v: -int(v[:-2]))[0]])] + } if len(c) > 0 else {50: 0, 120: 0} + 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)} diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index be376f6..d246c33 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -1550,6 +1550,28 @@ def migrate_payments(in_dir: str, out_dir: str) -> None: if oe not in curves: curves.append(oe) azs[sortid][attrid][geb] = curves.index(oe) + for i, c in enumerate(curves): + n = {} + d = 0 + for oe, p0, p1, p2 in zip(range(0, len(c) + 1), [0] + c, c, c[1:] + [c[len(c) - 1]]): + d1, d2 = round(p1 - p0, 4), round(p2 - p1, 4) + if d1 == d: + continue + d = d2 + if p0 > 0: + n[f'{oe - 1}oe'] = p0 + n[f'{oe}oe'] = p1 + if c[len(c) - 1] > 0: + n[f'{len(c) - 1}oe'] = c[len(c) - 1] + keys = list(n.keys()) + vals = list(n.values()) + if len(n) >= 2 and vals[0] == vals[1]: + del n[keys[0]] + del n[keys[1]] + n = {keys[1]: vals[1], **n} + if len(n) == 1: + n = {'73oe': list(n.values())[0]} + curves[i] = n azs['Kurven'] = curves azq = data['AuszahlungSortenQualitätsstufe'] for q in qual_map.get(p['AZNR'], []):