From 5d92f909a1c67e2b864cb04d8b53b6f4b1301953 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Thu, 17 Aug 2023 22:20:14 +0200 Subject: [PATCH] Fix modifier migration --- sql/v01/10.create.sql | 1 + wgmaster/migrate.py | 30 +++++++++++++++++++----------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/sql/v01/10.create.sql b/sql/v01/10.create.sql index 3122531..c5d0593 100644 --- a/sql/v01/10.create.sql +++ b/sql/v01/10.create.sql @@ -438,6 +438,7 @@ CREATE TABLE modifier ( year INTEGER NOT NULL, modid TEXT NOT NULL CHECK (modid REGEXP '^[A-Z0-9]+$'), + ordering INTEGER NOT NULL, name TEXT NOT NULL, abs INTEGER, rel REAL, diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index 852a40e..9b8f3ca 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -1228,18 +1228,26 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: global DELIVERY_MAP, MODIFIER_MAP DELIVERY_MAP, MODIFIER_MAP = {}, {} - modifiers = {m['ASNR']: m for m in utils.csv_parse_dict(f'{in_dir}/TAbschlaege.csv') if m['Bezeichnung']} + modifiers = { + m['ASNR']: m + for m in utils.csv_parse_dict(f'{in_dir}/TAbschlaege.csv') + if m['Bezeichnung'] and m['Bezeichnung'] != '-' + } seasons = {} branches = {} for mod in modifiers.values(): - name: str = mod['Bezeichnung'] + name: str = mod['Bezeichnung'].replace('ausser', 'außer') nr: int = mod['ASNR'] MODIFIER_MAP[name] = mod if WG == 'MATZEN': mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'PZS' elif WG == 'GWK': - mod['id'] = str(nr) + mod['id'] = { + 1: 'KA', 2: 'LG', 3: 'MG', 4: 'SG', + 5: 'VT', 6: 'MV', 7: 'UP', 8: 'VL', + 9: 'DN', 10: 'SA', 11: 'DA', 12: 'EG', + }[nr] else: raise NotImplementedError() @@ -1377,15 +1385,14 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: ) for attrid in attributes: f_attr.row(date.year, snr, dpnr, attrid) - f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, - '; '.join(comments) or None) + f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None) for k, v in updated_varieties.items(): print(k + (f' ({v} times)' if v > 1 else '')) with utils.csv_open(f'{out_dir}/delivery_part_modifier.csv') as f_part_mod: f_part_mod.header('year', 'did', 'dpnr', 'modid') for m in utils.csv_parse_dict(f'{in_dir}/TLieferungAbschlag.csv'): - if m['LINR'] not in DELIVERY_MAP: + if m['LINR'] not in DELIVERY_MAP or m['ASNR'] not in modifiers: continue y, did, dpnr = DELIVERY_MAP[m['LINR']] f_part_mod.row(y, did, dpnr, modifiers[m['ASNR']]['id']) @@ -1393,12 +1400,13 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: with utils.csv_open(f'{out_dir}/season.csv') as f_season, \ utils.csv_open(f'{out_dir}/modifier.csv') as f_mod: f_season.header('year', 'currency', 'precision', 'start_date', 'end_date') - f_mod.header('year', 'modid', 'name', 'abs', 'rel', 'standard', 'quick_select') + f_mod.header('year', 'modid', 'ordering', 'name', 'abs', 'rel', 'standard', 'quick_select') for y, s in seasons.items(): f_season.row(y, s['currency'], s['precision'], s['start'], s['end']) for m in modifiers.values(): abs_v = round(m['AZAS'] * pow(10, s['precision'])) if m['AZAS'] is not None else None - f_mod.row(y, m['id'], m['Bezeichnung'], abs_v, m['AZASProzent'], + rel_v = m['AZASProzent'] / 100.0 if m['AZASProzent'] is not None else None + f_mod.row(y, m['id'], m['ASNR'], m['Bezeichnung'], abs_v, rel_v, m.get('Standard', False), m['Schnellauswahl']) @@ -1501,7 +1509,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None: for name in modifiers.split(' / '): mod = MODIFIER_MAP[name] if mod['AZASProzent']: - r += mod['AZASProzent'] + r += mod['AZASProzent'] / 100.0 if mod['AZAS']: a += round(mod['AZAS'] * pow(10, WGMASTER_PRECISION)) return a, r @@ -1557,7 +1565,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None: def migrate_parameters(in_dir: str, out_dir: str) -> None: params: Dict[str, str] = {p['Bezeichnung']: p['Wert'] for p in utils.csv_parse_dict(f'{in_dir}/TParameter.csv')} - name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', 'im') + name = params['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', ' im ') shortened = name.replace(' für ', ' f. ').replace(' und ', ' u. ').replace(' im ', ' i. ') suffix = params['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '') types = { @@ -1590,7 +1598,7 @@ def migrate_parameters(in_dir: str, out_dir: str) -> None: 'DELIVERY_OBLIGATION': params.get('LIEFERPFLICHT/GA1', None), 'DELIVERY_RIGHT': params.get('LIEFERRECHT/GA1', None), 'DOCUMENT_SENDER': params.get('ABSENDERTEXT2', None), - 'DELIVERY_NOTE_TEXT': params.get('LIEFERSCHEINTEXT', None).replace(' daß ', ' dass '), + 'DELIVERY_NOTE_TEXT': params.get('LIEFERSCHEINTEXT', None).replace(' daß ', ' dass ').replace('obige Angaben maßgeblicher Veränderungen', 'maßgeblichen Veränderungen obiger Angaben'), } with utils.csv_open(f'{out_dir}/client_parameter.csv') as f: