Rework wine origin migration

This commit is contained in:
2023-05-27 19:09:40 +02:00
parent 17ffbf8702
commit 289801f9fb
3 changed files with 33 additions and 17 deletions

View File

@ -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

View File

@ -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

View File

@ -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)