From 0a1cce63afa9083bb5dbb01cb4fbcd64661f4bd1 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Wed, 2 Oct 2024 10:35:26 +0200 Subject: [PATCH] migrate.py: Adjust for Baden --- wgmaster/migrate.py | 57 ++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index dd4bdf1..492ae6d 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -811,7 +811,10 @@ def migrate_area_commitment_types(in_dir: str, out_dir: str) -> None: f.row(sortid + (attrid or ''), sortid[:2], attrid or sortid[2:] or None, None, menge, None, None, None) if CLIENT == WG.MATZEN: - f.row('BM', 'BM', None, None, None, None, None, None, None) + f.row('BM', 'BM', None, None, None, None, None, None) + elif CLIENT == WG.BADEN: + for sortid in ['NB', 'GW', 'BB', 'WB', 'SL', 'RG', 'ZF', 'SO', 'MO', 'TR', 'GR', 'CS', 'MU', 'ME', 'GB', 'SA', 'BO', 'RL', 'SB', 'SY']: + f.row(sortid, sortid, None, None, None, None, None, None) def normalize_name(family_name: str, given_name: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]]: @@ -951,7 +954,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None: utils.csv_open(f'{out_dir}/member_email_address.csv') as f_email, \ utils.csv_open(f'{out_dir}/wb_kg.csv', 'a') as f_kg): f_m.header( - 'mgnr', 'predecessor_mgnr', 'prefix', 'given_name', 'middle_names', 'family_name', 'suffix', + 'mgnr', 'predecessor_mgnr', 'name', 'prefix', 'given_name', 'middle_names', 'suffix', 'attn', 'birthday', 'entry_date', 'exit_date', 'business_shares', 'accounting_nr', 'zwstid', 'lfbis_nr', 'ustid_nr', 'volllieferant', 'buchführend', 'organic', 'funktionär', 'active', 'deceased', 'iban', 'bic', 'country', 'postal_dest', 'address', 'default_kgnr', 'comment') @@ -990,10 +993,12 @@ def migrate_members(in_dir: str, out_dir: str) -> None: if billing_name or n1.lower() != n2.lower(): convert_name(mgnr, (m['Nachname'], m['Vorname']), (prefix, given_name, middle_names, family_name, suffix), billing_name) - if not given_name or not family_name: - given_name = given_name or '' - family_name = family_name or '' - invalid(mgnr, 'Name', n1, active) + if not family_name: + if billing_name: + family_name = billing_name + billing_name = None + else: + invalid(mgnr, 'Name', n1, active) bnr: Optional[str] = m['Betriebsnummer'] if m['Betriebsnummer'] != '-' else None if bnr is not None: @@ -1105,6 +1110,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None: email: Optional[str] = m['EMail'] emails = [] if email is not None: + email = email.replace('qgmx.at', '@gmx.at').replace('qtuwien.ac.at', '@tuwien.ac.at') for email in (email.split(' ') if CLIENT == WG.BADEN else email.split(' + ')): if email.isupper(): email = email.lower() @@ -1146,7 +1152,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None: pred = m['MGNR-Vorgänger'] if m['MGNR-Vorgänger'] in mgnrs else None f_m.row( - mgnr, pred, prefix, given_name, middle_names, family_name, suffix, + mgnr, pred, family_name, prefix, given_name, middle_names, suffix, None, m['Geburtsjahr'], m['Eintrittsdatum'], m['Austrittsdatum'], m['Geschäftsanteile1'] or 0, m['BHKontonummer'], zwstid, bnr, ustid_nr, m['Volllieferant'] or False, m['Buchführend'] or False, False, funktionaer, active, deceased, @@ -1389,13 +1395,13 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None: 'year_from', 'year_to', 'comment') for fb in utils.csv_parse_dict(f'{in_dir}/TFlaechenbindungen.csv'): - if (fb['Von'] is None and fb['Bis'] is None) or fb['GNR'] is None: + if (fb['Von'] is None and fb['Bis'] is None) or (CLIENT != WG.BADEN and fb['GNR'] is None): continue parz: str = fb['Parzellennummer'] fbnr: int = fb['FBNR'] mgnr: int = fb['MGNR'] - gem = GEM_MAP[fb['GNR']] - kgnrs = [kgnr for kgnr, gkz in gem] + gem = GEM_MAP[fb['GNR']] if fb['GNR'] is not None else None + kgnrs = [kgnr for kgnr, gkz in gem] if gem is not None else [4002] rnr = fb['RNR'] rd_kgnr, rdnr, _ = REED_MAP.get(rnr, (None, None, None)) if rnr else (None, None, None) if mgnr not in MEMBER_MAP: @@ -1448,12 +1454,15 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None: if parz != gstnr.replace('+', '/'): convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr) + snr = fb['SNR'] + if snr == 'GO': + snr = 'SO' to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None attrid = ATTRIBUTE_MAP[fb['SANR']] if fb['SANR'] else None if attrid == 'B': attrid = None - f_fb.row(fbnr, mgnr, fb['SNR'] + (attrid or ''), CULTIVATION_MAP[fb['BANR'] or 1], area, - kgnr, gstnr, rdnr, fb['Von'], to, comment) + f_fb.row(fbnr, mgnr, snr + (attrid or ''), CULTIVATION_MAP[fb['BANR'] or 1], area, + kgnr, gstnr, rdnr, fb['Von'] if fb['Von'] != 0 else None, to, comment) def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]: @@ -1485,10 +1494,13 @@ def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, local_lnr = 99 for lnr, lsnr, date, zwstid, mgnr in deliveries: - if CLIENT == WG.WEINLAND and not lsnr or 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 CLIENT == WG.BADEN and len(lsnr) <= 8: + add(f'{date:%Y}B{lsnr:>03}', lnr, date) + continue elif len(lsnr) < 8: continue if lsnr.startswith('22'): @@ -1564,7 +1576,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: utils.csv_open(f'{out_dir}/delivery_part.csv') as f_part: f_delivery.header('year', 'did', 'date', 'time', 'zwstid', 'lnr', 'lsnr', 'mgnr', 'comment') f_part.header('year', 'did', 'dpnr', 'sortid', 'attrid', 'cultid', 'weight', 'kmw', 'qualid', - 'hkid', 'kgnr', 'rdnr', 'gerebelt', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen', + 'hkid', 'kgnr', 'rdnr', 'net_weight', 'manual_weighing', 'spl_check', 'hand_picked', 'lesewagen', 'gebunden', 'temperature', 'acid', 'scale_id', 'weighing_data', 'weighing_reason', 'comment') for lsnr, linrs, date in fixed: @@ -1583,10 +1595,12 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: snr = s['nr'] mgnr = delivery_dict[linrs[0]]['MGNR'] + if CLIENT == WG.BADEN and mgnr == 229: + mgnr = 3 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] + zwstid = lsnr[8] if len(lsnr) > 8 else lsnr[4] if zwstid not in branches: branches[zwstid] = {} if date not in branches[zwstid]: @@ -1637,6 +1651,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: attributes.remove('W') elif CLIENT == WG.BADEN: if sortid == 'GO': + # "Gem.Satz rot" sortid = 'SO' if d['SNR'] != sortid: @@ -1658,6 +1673,15 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: else: warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} (abgewertet)') qualid = 'WEI' + if qualid == 'LDW' and d['Oechsle'] < 68: + warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} ({d["Oechsle"]} °Oe)') + qualid = 'RSW' + elif qualid == 'QUW' and d['Oechsle'] < 73: + warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} ({d["Oechsle"]} °Oe)') + qualid = 'LDW' if d['Oechsle'] >= 68 else 'RSW' + elif qualid == 'KAB' and d['Oechsle'] < 84: + warning_delivery(lsnr, mgnr, 'qualid', f'{qualid} ({d["Oechsle"]} °Oe)') + qualid = 'QUW' if d['Oechsle'] >= 73 else 'LDW' if d['Oechsle'] >= 68 else 'RSW' kgnr, rdnr = None, None if d['GNR']: @@ -1727,7 +1751,8 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: gerebelt, handwiegung, d['Spaetlese-Ueberpruefung'] or False, hand, lesewagen, gebunden, d['Temperatur'], acid, scale_id, weighing_data, None, comment ) - f_delivery.row(date.year, snr, date, d['Uhrzeit'], zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None) + time = d['Uhrzeit'] if d['Uhrzeit'] != datetime.time(0, 0, 0) else None + f_delivery.row(date.year, snr, date, time, zwstid, lnr, lsnr, mgnr, '; '.join(comments) or None) for k, v in updated_varieties.items(): print(k + (f' ({v} times)' if v > 1 else ''))