From 977509fbe6ece842ec187d0bbe55fc9b1cb8ce25 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 23 Feb 2024 17:38:04 +0100 Subject: [PATCH] migrate.py: Adaptations for Gr.Inzersdorf --- wgmaster/migrate.py | 48 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index d02afeb..b5257b1 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -408,6 +408,10 @@ def lookup_plz(plz: Optional[int], ort: Optional[str], address: Optional[str] = ort = 'SCHÖNAU AN DER TRIESTING' elif ort.upper() == 'BAD FISCHAU - BRUNN' and plz == 2721: ort = 'BAD FISCHAU-BRUNN' + elif ort.upper() == 'NEUSIEDL/ZAYA': + ort = 'NEUSIEDL AN DER ZAYA' + elif ort.upper() == 'SIERNDORF/MARCH': + ort = 'SIERNDORF AN DER MARCH' cur = DB_CNX.cursor() cur.execute("SELECT o.okz, p.dest, o.name FROM AT_plz_dest p JOIN AT_ort o ON o.okz = p.okz WHERE plz = ?", (plz,)) @@ -532,6 +536,14 @@ def lookup_gem_name(name: str) -> List[Tuple[int, int]]: return [(9008, 31028), (9026, 31028), (9032, 31028), (9037, 31028), (9051, 31028), (9067, 31028)] elif CLIENT == WG.WEINLAND: hkid = "'WLWV'" + if name.lower() == 'neusiedl/zaya': + name = 'Neusiedl an der Zaya' + elif name.lower() == 'bad pirawarth': + name = 'pirawarth' + elif name.lower() == 'sierndorf': + gem_name = 'Jedenspeigen' + elif name.lower() == 'velm-götzendorf': + return [(6027, 30859), (6007, 30859)] elif CLIENT == WG.BADEN: hkid = "'WLTH'" if name.lower() == 'baden': @@ -599,7 +611,7 @@ def lookup_hkid(kgnr: Optional[int], qualid: str) -> str: if qualid in ('WEI', 'RSW'): return 'OEST' elif kgnr is None: - if CLIENT in (WG.MATZEN, WG.WINZERKELLER, WG.BADEN): + if CLIENT in (WG.MATZEN, WG.WINZERKELLER, WG.BADEN, WG.WEINLAND): hkid = 'WLNO' else: raise NotImplementedError(f'Default hkid for {CLIENT} not implemented yet') @@ -655,7 +667,8 @@ def migrate_branches(in_dir: str, out_dir: str) -> None: with utils.csv_open(f'{out_dir}/branch.csv') as f: f.header('zwstid', 'name', 'country', 'postal_dest', 'address', 'phone_nr', 'fax_nr', 'mobile_nr') for b in utils.csv_parse_dict(f'{in_dir}/TZweigstellen.csv'): - BRANCH_MAP[b['ZNR']] = b['Kennbst'] + kennbst = b['Kennbst'] or ('G' if CLIENT == WG.WEINLAND else None) + BRANCH_MAP[b['ZNR']] = kennbst address = b['Straße'] postal_dest = lookup_plz(int(b['PLZ']) if b['PLZ'] else None, b['Ort'], address) if CLIENT == WG.MATZEN: @@ -664,7 +677,7 @@ def migrate_branches(in_dir: str, out_dir: str) -> None: tel, mob = normalize_phone_nr(b['Telefon']), None if tel and tel[4] == '6': mob, tel = tel, None - f.row(b['Kennbst'], b['Name'].strip().title(), AUSTRIA, postal_dest, address, + f.row(kennbst, b['Name'].strip().title(), AUSTRIA, postal_dest, address, tel, normalize_phone_nr(b['Telefax']), mob) @@ -780,6 +793,8 @@ def migrate_area_commitment_types(in_dir: str, out_dir: str) -> None: with utils.csv_open(f'{out_dir}/area_commitment_type.csv') as f: f.header('vtrgid', 'sortid', 'attrid', 'disc', 'min_kg_per_ha', 'penalty_per_kg', 'penalty_amount', 'penalty_none') + if not os.path.exists(f'{in_dir}/TLiefermengen.csv'): + return for t in utils.csv_parse_dict(f'{in_dir}/TLiefermengen.csv'): sortid: str = t['SNR'] if not sortid or sortid == 'SV': @@ -1460,13 +1475,18 @@ def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, deliveries: List[Tuple[int, str, datetime.date, int, int]] = [ (d['LINR'], d['Lieferscheinnummer'], d['Datum'], d['ZNR'], d['MGNR']) for d in deliveries - if d['Lieferscheinnummer'] and not d['Storniert'] + if (d['Lieferscheinnummer'] or (CLIENT == WG.WEINLAND and d['Oechsle'] and d['MGNR'])) and not d['Storniert'] ] lsnrs = {d[1] for d in deliveries} + local_lnr = 99 for lnr, lsnr, date, zwstid, mgnr in deliveries: - if len(lsnr) < 8: + if CLIENT == WG.WEINLAND and not lsnr or len(lsnr) <= 8: + local_lnr += 1 + add(f'{date:%Y%m%d}G{local_lnr:03}', lnr, date) + continue + elif len(lsnr) < 8: continue if lsnr.startswith('22'): lsnr = '20' + lsnr[2:] @@ -1525,6 +1545,10 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: }[nr] elif CLIENT == WG.BADEN: mod['id'] = name[-1] if name.startswith('Klasse') else 'TB' if name == 'Treuebonus' else 'UE' + elif CLIENT == WG.WEINLAND: + mod['id'] = { + 1: 'PZS', 2: 'TB', 3: 'LM' + }[nr] else: raise NotImplementedError(f'Modifier migration for {CLIENT} not yet implemented') @@ -1556,7 +1580,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: snr = s['nr'] mgnr = delivery_dict[linrs[0]]['MGNR'] - znr = delivery_dict[linrs[0]]['ZNR'] + znr = delivery_dict[linrs[0]]['ZNR'] or (1 if CLIENT == WG.WEINLAND else None) glob_waage = set(delivery_dict[linr]['Waagentext'] for linr in linrs if delivery_dict[linr]['Waagentext']) zwstid = lsnr[8] @@ -1577,7 +1601,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: d = delivery_dict[linr] DELIVERY_MAP[linr] = (date.year, snr, dpnr) if lsnr != d['Lieferscheinnummer']: - renumber_delivery(d['Lieferscheinnummer'], lsnr) + renumber_delivery(d['Lieferscheinnummer'] or '', lsnr) oe = d['OechsleOriginal'] or d['Oechsle'] kmw = GRADATION_MAP[oe] @@ -1676,6 +1700,14 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: comment = None elif comment == '.': comment = None + elif comment in ('LW', 'lw'): + lesewagen = True + comment = None + elif 'LW' in comment: + lesewagen = True + comment = comment.replace('LW', '').strip() + if comment == '': + comment = None if comment: comments.append(comment) gerebelt = True if CLIENT == WG.MATZEN or (CLIENT == WG.WINZERKELLER and zwstid == 'W') else d['Gerebelt'] or False @@ -1923,7 +1955,7 @@ def migrate_parameters(in_dir: str, out_dir: str) -> None: global PARAMETERS PARAMETERS = {p['Bezeichnung']: p['Wert'] for p in utils.csv_parse_dict(f'{in_dir}/TParameter.csv')} name = PARAMETERS['MANDANTENNAME1'].title().replace('F.', 'für').replace('U.', 'und').replace(' Im ', ' im ') - suffix = PARAMETERS['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '') + suffix = PARAMETERS['MANDANTENNAME2'].lower().replace(' ', '').replace('.', '').split(',')[-1] types = { 'reggenmbh': 'reg. Gen.m.b.H.' }