Migrate Liefermengen
This commit is contained in:
@ -272,6 +272,30 @@ CREATE TABLE wine_attribute (
|
||||
CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid)
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE area_commitment_type (
|
||||
vtrgid TEXT NOT NULL CHECK (vtrgid LIKE sortid || attrid_1 || attrid_2 || disc),
|
||||
sortid TEXT NOT NULL,
|
||||
attrid_1 TEXT,
|
||||
attrid_2 TEXT,
|
||||
disc TEXT DEFAULT NULL CHECK (disc REGEXP '^[A-Z0-9]+$'),
|
||||
|
||||
min_kg_per_ha INTEGER,
|
||||
max_kg_per_ha INTEGER,
|
||||
penalty_amount REAL,
|
||||
|
||||
CONSTRAINT pk_area_commitment_type PRIMARY KEY (vtrgid),
|
||||
CONSTRAINT sk_area_commitment_type_sort_attr UNIQUE (sortid, attrid_1, attrid_2, disc),
|
||||
CONSTRAINT fk_area_commitment_type_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid_1) REFERENCES wine_attribute (attrid)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT fk_area_commitment_type_wine_attribute FOREIGN KEY (attrid_2) REFERENCES wine_attribute (attrid)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE wine_cultivation (
|
||||
cultid TEXT NOT NULL CHECK (cultid REGEXP '^[A-Z]+$'),
|
||||
name TEXT NOT NULL,
|
||||
@ -371,7 +395,7 @@ CREATE TABLE area_commitment (
|
||||
fbnr INTEGER NOT NULL,
|
||||
mgnr INTEGER NOT NULL,
|
||||
|
||||
sortid TEXT NOT NULL,
|
||||
vtrgid TEXT NOT NULL,
|
||||
cultid TEXT NOT NULL,
|
||||
area INTEGER NOT NULL,
|
||||
|
||||
@ -390,7 +414,7 @@ CREATE TABLE area_commitment (
|
||||
CONSTRAINT fk_are_commitment_member FOREIGN KEY (mgnr) REFERENCES member (mgnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT fk_area_commitment_wine_variety FOREIGN KEY (sortid) REFERENCES wine_variety (sortid)
|
||||
CONSTRAINT fk_area_commitment_area_commitment_type FOREIGN KEY (vtrgid) REFERENCES area_commitment_type (vtrgid)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT fk_area_commitment_wine_cultivation FOREIGN KEY (cultid) REFERENCES wine_cultivation (cultid)
|
||||
@ -404,19 +428,6 @@ CREATE TABLE area_commitment (
|
||||
ON DELETE RESTRICT
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE area_commitment_attribute (
|
||||
fbnr INTEGER NOT NULL,
|
||||
attrid TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT pk_area_commitment_attribute PRIMARY KEY (fbnr, attrid),
|
||||
CONSTRAINT fk_area_commitment_attribute_area_commitment FOREIGN KEY (fbnr) REFERENCES area_commitment (fbnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_area_commitment_attribute_wine_attribute FOREIGN KEY (attrid) REFERENCES wine_attribute (attrid)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT
|
||||
) STRICT;
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
@ -634,7 +645,7 @@ CREATE TABLE payment_variant (
|
||||
CONSTRAINT pk_payment PRIMARY KEY (year, avnr)
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE payment_delivery (
|
||||
CREATE TABLE payment_delivery_part (
|
||||
year INTEGER NOT NULL,
|
||||
did INTEGER NOT NULL,
|
||||
dpnr INTEGER NOT NULL,
|
||||
@ -665,33 +676,33 @@ CREATE TABLE payment_delivery (
|
||||
|
||||
amount INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT pk_payment_delivery PRIMARY KEY (year, did, dpnr, avnr),
|
||||
CONSTRAINT fk_payment_delivery_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
||||
CONSTRAINT pk_payment_delivery_part PRIMARY KEY (year, did, dpnr, avnr),
|
||||
CONSTRAINT fk_payment_delivery_part_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_payment_delivery_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
|
||||
CONSTRAINT fk_payment_delivery_part_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) STRICT;
|
||||
|
||||
CREATE TRIGGER t_payment_delivery_i
|
||||
AFTER INSERT ON payment_delivery FOR EACH ROW
|
||||
CREATE TRIGGER t_payment_delivery_part_i
|
||||
AFTER INSERT ON payment_delivery_part FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO payment_member (year, avnr, mgnr, amount)
|
||||
VALUES (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)), NEW.amount)
|
||||
ON CONFLICT DO UPDATE SET amount = amount + NEW.amount;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_payment_delivery_u
|
||||
AFTER UPDATE OF amount ON payment_delivery FOR EACH ROW
|
||||
CREATE TRIGGER t_payment_delivery_part_u
|
||||
AFTER UPDATE OF amount ON payment_delivery_part FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE payment_member
|
||||
SET amount = amount - OLD.amount + NEW.amount
|
||||
WHERE (year, avnr, mgnr) = (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)));
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_payment_delivery_d
|
||||
AFTER DELETE ON payment_delivery FOR EACH ROW
|
||||
CREATE TRIGGER t_payment_delivery_part_d
|
||||
AFTER DELETE ON payment_delivery_part FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE payment_member
|
||||
SET amount = amount - OLD.amount
|
||||
|
@ -99,26 +99,6 @@ END;
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
CREATE TRIGGER t_area_commitment_attribute_i_mtime_area_commitment
|
||||
AFTER INSERT ON area_commitment_attribute FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_area_commitment_attribute_u_mtime_area_commitment
|
||||
AFTER UPDATE ON area_commitment_attribute FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = OLD.fbnr OR fbnr = NEW.fbnr;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_area_commitment_attribute_d_mtime_area_commitment
|
||||
AFTER DELETE ON area_commitment_attribute FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = OLD.fbnr;
|
||||
END;
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
CREATE TRIGGER t_delivery_i_ctime
|
||||
AFTER INSERT ON delivery FOR EACH ROW
|
||||
WHEN NEW.ctime != UNIXEPOCH()
|
||||
@ -267,20 +247,20 @@ END;
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
CREATE TRIGGER t_payment_delivery_i_mtime_payment_variant
|
||||
AFTER INSERT ON payment_delivery FOR EACH ROW
|
||||
CREATE TRIGGER t_payment_delivery_part_i_mtime_payment_variant
|
||||
AFTER INSERT ON payment_delivery_part FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr);
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_payment_delivery_u_mtime_payment_variant
|
||||
AFTER UPDATE ON payment_delivery FOR EACH ROW
|
||||
CREATE TRIGGER t_payment_delivery_part_u_mtime_payment_variant
|
||||
AFTER UPDATE ON payment_delivery_part FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr) OR (year, avnr) = (NEW.year, NEW.avnr);
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_payment_delivery_d_mtime_payment_variant
|
||||
AFTER DELETE ON payment_delivery FOR EACH ROW
|
||||
CREATE TRIGGER t_payment_delivery_part_d_mtime_payment_variant
|
||||
AFTER DELETE ON payment_delivery_part FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr);
|
||||
END;
|
||||
|
@ -13,9 +13,9 @@ import utils
|
||||
DIR: str
|
||||
|
||||
TABLES = ['client_parameter', 'branch', 'wb_gl', 'wb_kg', 'wb_rd', 'wine_attribute', 'wine_cultivation',
|
||||
'member', 'member_billing_address', 'member_telephone_number', 'area_commitment', 'area_commitment_attribute',
|
||||
'area_commitment_type', 'member', 'member_billing_address', 'member_telephone_number', 'area_commitment',
|
||||
'season', 'modifier', 'delivery', 'delivery_part', 'delivery_part_attribute', 'delivery_part_modifier',
|
||||
'payment_variant', 'payment_delivery']
|
||||
'payment_variant', 'payment_delivery_part']
|
||||
|
||||
|
||||
def get_sql_files() -> List[str]:
|
||||
|
@ -608,6 +608,27 @@ def migrate_cultivations(in_dir: str, out_dir: str) -> None:
|
||||
f.row(cultid, name)
|
||||
|
||||
|
||||
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_1', 'attrid_2', 'disc',
|
||||
'min_kg_per_ha', 'max_kg_per_ha', 'penalty_amount')
|
||||
for t in utils.csv_parse_dict(f'{in_dir}/TLiefermengen.csv'):
|
||||
sortid: str = t['SNR']
|
||||
if not sortid or sortid == 'SV':
|
||||
continue
|
||||
menge = int(t['ErwarteteLiefermengeProHa'])
|
||||
f.row(sortid + (t['SANR'] or ''), sortid[:2], t['SANR'] or sortid[2:] or None, None, None,
|
||||
menge, menge, None)
|
||||
bio = []
|
||||
if WG == 'MATZEN':
|
||||
bio = ['GV', 'ZW', 'MT']
|
||||
f.row('BM', 'BM', None, None, None, 5000, 5000, None)
|
||||
elif WG == 'GWK':
|
||||
bio = ['GV', 'ZW', 'WR', 'MT', 'RR', 'WB', 'CH', 'MU']
|
||||
for sortid in bio:
|
||||
f.row(f'{sortid}B', sortid, 'B', 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]]:
|
||||
letters = string.ascii_letters + 'äöüßÄÖÜẞ-'
|
||||
double_names = ['eva maria', 'maria theresia']
|
||||
@ -1148,11 +1169,9 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
||||
new_reeds: Dict[Tuple[int, int], int] = {}
|
||||
|
||||
with utils.csv_open(f'{out_dir}/area_commitment.csv') as f_fb, \
|
||||
utils.csv_open(f'{out_dir}/area_commitment_attribute.csv') as f_attr, \
|
||||
utils.csv_open(f'{out_dir}/wb_rd.csv', 'a+') as f_rd:
|
||||
f_fb.header('fbnr', 'mgnr', 'sortid', 'cultid', 'area', 'kgnr', 'gstnr', 'rdnr',
|
||||
f_fb.header('fbnr', 'mgnr', 'vtrgid', 'cultid', 'area', 'kgnr', 'gstnr', 'rdnr',
|
||||
'year_from', 'year_to', 'comment')
|
||||
f_attr.header('fbnr', 'attrid')
|
||||
|
||||
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:
|
||||
@ -1201,7 +1220,6 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
||||
if WG == 'MATZEN':
|
||||
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
|
||||
else:
|
||||
# TODO GWK GstNrs
|
||||
gstnrs = []
|
||||
comment, gstnr = None, None
|
||||
if parz is None or parz == '0000':
|
||||
@ -1209,17 +1227,15 @@ def migrate_area_commitments(in_dir: str, out_dir: str) -> None:
|
||||
invalid(mgnr, 'GstNr.', f'{lookup_kg_name(kgnr)} {kgnr or 0:05}-{parz}')
|
||||
gstnrs = []
|
||||
gstnr = '-'
|
||||
if len(gstnrs) == 0:
|
||||
if WG == 'MATZEN' and len(gstnrs) == 0:
|
||||
comment = f'KG {kgnr or 0:05}: {parz}'
|
||||
gstnr = format_gstnr(gstnrs) or gstnr or parz
|
||||
if parz != gstnr.replace('+', '/'):
|
||||
convert(mgnr, f'GstNr. ({fbnr})', parz, gstnr)
|
||||
|
||||
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
|
||||
f_fb.row(fbnr, mgnr, fb['SNR'], CULTIVATION_MAP[fb['BANR'] or 1], area,
|
||||
f_fb.row(fbnr, mgnr, fb['SNR'] + (fb['SANR'] or ''), CULTIVATION_MAP[fb['BANR'] or 1], area,
|
||||
kgnr, gstnr, rdnr, fb['Von'], to, comment)
|
||||
if fb['SANR']:
|
||||
f_attr.row(fbnr, fb['SANR'])
|
||||
|
||||
|
||||
def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]:
|
||||
@ -1599,7 +1615,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
|
||||
prec = pow(10, WGMASTER_PRECISION)
|
||||
return round(p1 * prec), round(p2 * prec), round(p3 * prec)
|
||||
|
||||
with utils.csv_open(f'{out_dir}/payment_delivery.csv') as f_del_pay:
|
||||
with utils.csv_open(f'{out_dir}/payment_delivery_part.csv') as f_del_pay:
|
||||
f_del_pay.header('year', 'did', 'dpnr', 'avnr', 'bucket_1', 'bucket_2', 'bucket_3', 'amount')
|
||||
deliveries = {d['LINR']: d for d in utils.csv_parse_dict(f'{in_dir}/TLieferungen.csv')}
|
||||
for linr, (y, did, dpnr) in DELIVERY_MAP.items():
|
||||
@ -1704,6 +1720,7 @@ def main() -> None:
|
||||
migrate_reeds(args.in_dir, args.out_dir)
|
||||
migrate_attributes(args.in_dir, args.out_dir)
|
||||
migrate_cultivations(args.in_dir, args.out_dir)
|
||||
migrate_area_commitment_types(args.in_dir, args.out_dir)
|
||||
migrate_members(args.in_dir, args.out_dir)
|
||||
migrate_area_commitments(args.in_dir, args.out_dir)
|
||||
migrate_deliveries(args.in_dir, args.out_dir)
|
||||
|
Reference in New Issue
Block a user