Migrate Liefermengen

This commit is contained in:
2023-08-23 15:48:40 +02:00
parent b27d40aa92
commit 1c88dfe6a5
4 changed files with 70 additions and 62 deletions

View File

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

View File

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