From 289801f9fb5301feef080573b9212155e0e802cc Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sat, 27 May 2023 19:09:40 +0200 Subject: [PATCH] Rework wine origin migration --- sql/v01/10.create.sql | 6 +++--- sql/v01/20.view.sql | 2 +- wgmaster/migrate.py | 42 +++++++++++++++++++++++++++++------------- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/sql/v01/10.create.sql b/sql/v01/10.create.sql index 06ae5b8..3282a8c 100644 --- a/sql/v01/10.create.sql +++ b/sql/v01/10.create.sql @@ -329,7 +329,7 @@ CREATE TABLE member ( ON DELETE RESTRICT, CONSTRAINT fk_member_wb_kg FOREIGN KEY (default_kgnr) REFERENCES wb_kg (kgnr) ON UPDATE CASCADE - ON DELETE RESTRICT, + ON DELETE SET NULL, CONSTRAINT fk_member_branch FOREIGN KEY (zwstid) REFERENCES branch (zwstid) ON UPDATE CASCADE ON DELETE RESTRICT @@ -536,10 +536,10 @@ CREATE TABLE delivery_part ( ON DELETE RESTRICT, CONSTRAINT fk_delivery_part_wb_kg FOREIGN KEY (kgnr) REFERENCES wb_kg (kgnr) ON UPDATE CASCADE - ON DELETE RESTRICT, + ON DELETE SET NULL, CONSTRAINT fk_delivery_part_wb_rd FOREIGN KEY (kgnr, rdnr) REFERENCES wb_rd (kgnr, rdnr) ON UPDATE CASCADE - ON DELETE RESTRICT + ON DELETE SET NULL ) STRICT; CREATE TRIGGER t_delivery_part_i diff --git a/sql/v01/20.view.sql b/sql/v01/20.view.sql index 117cdef..bbd3bb3 100644 --- a/sql/v01/20.view.sql +++ b/sql/v01/20.view.sql @@ -22,7 +22,7 @@ CREATE VIEW v_delivery AS SELECT p.year, p.did, p.dpnr, d.date, d.time, d.zwstid, d.lnr, d.lsnr, m.mgnr, m.family_name, m.given_name, - p.sortid, p.weight, p.kmw, ROUND(p.kmw * (4.54 + 0.022 * p.kmw), 0) AS oe, p.qualid, p.hkid, p.kgnr, + p.sortid, p.weight, p.kmw, ROUND(p.kmw * (4.54 + 0.022 * p.kmw), 0) AS oe, p.qualid, p.hkid, p.kgnr, p.rdnr, GROUP_CONCAT(DISTINCT a.attrid) as attributes, GROUP_CONCAT(DISTINCT o.modid) as modifiers, d.comment, p.comment as part_comment FROM delivery_part p diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index 5665159..5a21b8e 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -15,8 +15,6 @@ import utils DB_CNX: Optional[sqlite3.Connection] = None QUIET: bool = False - -HKID: Optional[str] = None WG: Optional[str] = None USTID_RE = re.compile(r'[A-Z]{2}[A-Z0-9]{2,12}') @@ -223,7 +221,7 @@ def lookup_kgnr(okz: Optional[int]) -> Optional[int]: return None cur = DB_CNX.cursor() - cur.execute("SELECT k.kgnr FROM AT_ort o JOIN wb_kg k ON k.kgnr = o.kgnr WHERE okz = ?", (okz,)) + cur.execute("SELECT kgnr FROM AT_ort WHERE okz = ?", (okz,)) rows: List[Tuple[int]] = cur.fetchall() cur.close() @@ -265,6 +263,27 @@ def lookup_kg_name(kgnr: int) -> str: return rows[0][0] +def lookup_hkid(kgnr: Optional[int], qualid: str) -> str: + if qualid in ('WEI', 'RSW'): + return 'OEST' + elif kgnr is None: + if WG in ('MATZEN', 'GWK'): + hkid = 'WLWV' + else: + cur = DB_CNX.cursor() + cur.execute("SELECT wb.hkid FROM AT_kg kg JOIN AT_gem g ON g.gkz = kg.gkz JOIN wb_gem wb ON wb.gkz = g.gkz " + "WHERE kg.kgnr = ?", (kgnr,)) + rows = cur.fetchall() + cur.close() + hkid = rows[0][0] + if qualid == 'LDW': + if hkid == 'WIEN': + hkid = 'WLXX' + elif hkid[:2] in ('WL', 'BL', 'SL'): + hkid = hkid[:2] + 'XX' + return hkid + + def migrate_gradation(in_dir: str, out_dir: str) -> None: global GRADATION_MAP GRADATION_MAP = {} @@ -556,7 +575,6 @@ def migrate_members(in_dir: str, out_dir: str) -> None: active = m['Aktives Mitglied'] or False if kgnr is None: invalid(mgnr, 'KGNr.', ort) - active = False elif kgnr not in [kg[0] for gem in GEM_MAP.values() for kg in gem]: glnr = list(GROSSLAGE_MAP.values())[0] print(f'New KG: {lookup_kg_name(kgnr)} ({kgnr}, GL {glnr})') @@ -891,14 +909,14 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: if d['SNR'] != sortid: print(f'{d["SNR"]}/{d["SANR"]} -> {sortid}/{attributes}') + qualid = QUAL_MAP[d['QSNR']] kgnr, rdnr = None, None if d['GNR']: gem = GEM_MAP[d['GNR']] if len(gem) == 1: kgnr = gem[0][0] if d['RNR']: - rd = REED_MAP[d['RNR']] - # TODO reed nr + kgnr, rdnr = REED_MAP[d['RNR']] if kgnr is None: m = MEMBER_MAP[d['MGNR']] kgnr = m['default_kgnr'] @@ -908,6 +926,8 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: warning_delivery(lsnr, d['MGNR'], 'KGNr.', kgnr) kgnr = None + hkid = lookup_hkid(kgnr, qualid) + waage = d['Waagentext'] scale_id, weighing_id = None, None if waage: @@ -933,7 +953,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None: comments.append(comment) f_part.row( - date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, QUAL_MAP[d['QSNR']], HKID, kgnr, rdnr, + date.year, snr, dpnr, sortid, int(d['Gewicht']), kmw, qualid, hkid, kgnr, rdnr, d['Gerebelt'] or False, d['Handwiegung'] or False, d['Spaetlese-Ueberpruefung'] or False, hand, lesemaschine, d['Temperatur'], acid, scale_id, weighing_id, comment ) @@ -1001,7 +1021,7 @@ def migrate_parameters(in_dir: str, out_dir: str) -> None: def main() -> None: - global DB_CNX, QUIET, HKID, WG + global DB_CNX, QUIET, WG parser = argparse.ArgumentParser() parser.add_argument('in_dir', type=str, @@ -1013,16 +1033,12 @@ def main() -> None: parser.add_argument('-d', '--database', metavar='DB', required=True, help='The sqlite database file to look up information') parser.add_argument('-g', '--genossenschaft', metavar='WG', required=False, type=str, - choices=('MATZEN', 'WOLKERSDORF')) - parser.add_argument('-o', '--origin', metavar='HKID', required=True, - help='The default wine origin identifier ' - '(consider that the origin is ALWAYS set according to the KGNr if available)') + choices=('MATZEN', 'GWK')) args = parser.parse_args() os.makedirs(args.out_dir, exist_ok=True) QUIET = args.quiet - HKID = args.origin WG = args.genossenschaft DB_CNX = sqlite3.connect(args.database)