Rework wine origin migration
This commit is contained in:
@ -329,7 +329,7 @@ CREATE TABLE member (
|
|||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
CONSTRAINT fk_member_wb_kg FOREIGN KEY (default_kgnr) REFERENCES wb_kg (kgnr)
|
CONSTRAINT fk_member_wb_kg FOREIGN KEY (default_kgnr) REFERENCES wb_kg (kgnr)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT,
|
ON DELETE SET NULL,
|
||||||
CONSTRAINT fk_member_branch FOREIGN KEY (zwstid) REFERENCES branch (zwstid)
|
CONSTRAINT fk_member_branch FOREIGN KEY (zwstid) REFERENCES branch (zwstid)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT
|
ON DELETE RESTRICT
|
||||||
@ -536,10 +536,10 @@ CREATE TABLE delivery_part (
|
|||||||
ON DELETE RESTRICT,
|
ON DELETE RESTRICT,
|
||||||
CONSTRAINT fk_delivery_part_wb_kg FOREIGN KEY (kgnr) REFERENCES wb_kg (kgnr)
|
CONSTRAINT fk_delivery_part_wb_kg FOREIGN KEY (kgnr) REFERENCES wb_kg (kgnr)
|
||||||
ON UPDATE CASCADE
|
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)
|
CONSTRAINT fk_delivery_part_wb_rd FOREIGN KEY (kgnr, rdnr) REFERENCES wb_rd (kgnr, rdnr)
|
||||||
ON UPDATE CASCADE
|
ON UPDATE CASCADE
|
||||||
ON DELETE RESTRICT
|
ON DELETE SET NULL
|
||||||
) STRICT;
|
) STRICT;
|
||||||
|
|
||||||
CREATE TRIGGER t_delivery_part_i
|
CREATE TRIGGER t_delivery_part_i
|
||||||
|
@ -22,7 +22,7 @@ CREATE VIEW v_delivery AS
|
|||||||
SELECT p.year, p.did, p.dpnr,
|
SELECT p.year, p.did, p.dpnr,
|
||||||
d.date, d.time, d.zwstid, d.lnr, d.lsnr,
|
d.date, d.time, d.zwstid, d.lnr, d.lsnr,
|
||||||
m.mgnr, m.family_name, m.given_name,
|
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,
|
GROUP_CONCAT(DISTINCT a.attrid) as attributes, GROUP_CONCAT(DISTINCT o.modid) as modifiers,
|
||||||
d.comment, p.comment as part_comment
|
d.comment, p.comment as part_comment
|
||||||
FROM delivery_part p
|
FROM delivery_part p
|
||||||
|
@ -15,8 +15,6 @@ import utils
|
|||||||
|
|
||||||
DB_CNX: Optional[sqlite3.Connection] = None
|
DB_CNX: Optional[sqlite3.Connection] = None
|
||||||
QUIET: bool = False
|
QUIET: bool = False
|
||||||
|
|
||||||
HKID: Optional[str] = None
|
|
||||||
WG: Optional[str] = None
|
WG: Optional[str] = None
|
||||||
|
|
||||||
USTID_RE = re.compile(r'[A-Z]{2}[A-Z0-9]{2,12}')
|
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
|
return None
|
||||||
|
|
||||||
cur = DB_CNX.cursor()
|
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()
|
rows: List[Tuple[int]] = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
|
|
||||||
@ -265,6 +263,27 @@ def lookup_kg_name(kgnr: int) -> str:
|
|||||||
return rows[0][0]
|
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:
|
def migrate_gradation(in_dir: str, out_dir: str) -> None:
|
||||||
global GRADATION_MAP
|
global GRADATION_MAP
|
||||||
GRADATION_MAP = {}
|
GRADATION_MAP = {}
|
||||||
@ -556,7 +575,6 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
|
|||||||
active = m['Aktives Mitglied'] or False
|
active = m['Aktives Mitglied'] or False
|
||||||
if kgnr is None:
|
if kgnr is None:
|
||||||
invalid(mgnr, 'KGNr.', ort)
|
invalid(mgnr, 'KGNr.', ort)
|
||||||
active = False
|
|
||||||
elif kgnr not in [kg[0] for gem in GEM_MAP.values() for kg in gem]:
|
elif kgnr not in [kg[0] for gem in GEM_MAP.values() for kg in gem]:
|
||||||
glnr = list(GROSSLAGE_MAP.values())[0]
|
glnr = list(GROSSLAGE_MAP.values())[0]
|
||||||
print(f'New KG: {lookup_kg_name(kgnr)} ({kgnr}, GL {glnr})')
|
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:
|
if d['SNR'] != sortid:
|
||||||
print(f'{d["SNR"]}/{d["SANR"]} -> {sortid}/{attributes}')
|
print(f'{d["SNR"]}/{d["SANR"]} -> {sortid}/{attributes}')
|
||||||
|
|
||||||
|
qualid = QUAL_MAP[d['QSNR']]
|
||||||
kgnr, rdnr = None, None
|
kgnr, rdnr = None, None
|
||||||
if d['GNR']:
|
if d['GNR']:
|
||||||
gem = GEM_MAP[d['GNR']]
|
gem = GEM_MAP[d['GNR']]
|
||||||
if len(gem) == 1:
|
if len(gem) == 1:
|
||||||
kgnr = gem[0][0]
|
kgnr = gem[0][0]
|
||||||
if d['RNR']:
|
if d['RNR']:
|
||||||
rd = REED_MAP[d['RNR']]
|
kgnr, rdnr = REED_MAP[d['RNR']]
|
||||||
# TODO reed nr
|
|
||||||
if kgnr is None:
|
if kgnr is None:
|
||||||
m = MEMBER_MAP[d['MGNR']]
|
m = MEMBER_MAP[d['MGNR']]
|
||||||
kgnr = m['default_kgnr']
|
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)
|
warning_delivery(lsnr, d['MGNR'], 'KGNr.', kgnr)
|
||||||
kgnr = None
|
kgnr = None
|
||||||
|
|
||||||
|
hkid = lookup_hkid(kgnr, qualid)
|
||||||
|
|
||||||
waage = d['Waagentext']
|
waage = d['Waagentext']
|
||||||
scale_id, weighing_id = None, None
|
scale_id, weighing_id = None, None
|
||||||
if waage:
|
if waage:
|
||||||
@ -933,7 +953,7 @@ def migrate_deliveries(in_dir: str, out_dir: str) -> None:
|
|||||||
comments.append(comment)
|
comments.append(comment)
|
||||||
|
|
||||||
f_part.row(
|
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,
|
d['Gerebelt'] or False, d['Handwiegung'] or False, d['Spaetlese-Ueberpruefung'] or False,
|
||||||
hand, lesemaschine, d['Temperatur'], acid, scale_id, weighing_id, comment
|
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:
|
def main() -> None:
|
||||||
global DB_CNX, QUIET, HKID, WG
|
global DB_CNX, QUIET, WG
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('in_dir', type=str,
|
parser.add_argument('in_dir', type=str,
|
||||||
@ -1013,16 +1033,12 @@ def main() -> None:
|
|||||||
parser.add_argument('-d', '--database', metavar='DB', required=True,
|
parser.add_argument('-d', '--database', metavar='DB', required=True,
|
||||||
help='The sqlite database file to look up information')
|
help='The sqlite database file to look up information')
|
||||||
parser.add_argument('-g', '--genossenschaft', metavar='WG', required=False, type=str,
|
parser.add_argument('-g', '--genossenschaft', metavar='WG', required=False, type=str,
|
||||||
choices=('MATZEN', 'WOLKERSDORF'))
|
choices=('MATZEN', 'GWK'))
|
||||||
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)')
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
os.makedirs(args.out_dir, exist_ok=True)
|
os.makedirs(args.out_dir, exist_ok=True)
|
||||||
|
|
||||||
QUIET = args.quiet
|
QUIET = args.quiet
|
||||||
HKID = args.origin
|
|
||||||
WG = args.genossenschaft
|
WG = args.genossenschaft
|
||||||
|
|
||||||
DB_CNX = sqlite3.connect(args.database)
|
DB_CNX = sqlite3.connect(args.database)
|
||||||
|
Reference in New Issue
Block a user