86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
-- schema version 8 to 9
 | 
						|
 | 
						|
CREATE TABLE payment_delivery_part_bucket (
 | 
						|
    year   INTEGER NOT NULL,
 | 
						|
    did    INTEGER NOT NULL,
 | 
						|
    dpnr   INTEGER NOT NULL,
 | 
						|
    bktnr  INTEGER NOT NULL,
 | 
						|
    avnr   INTEGER NOT NULL,
 | 
						|
 | 
						|
    price  INTEGER NOT NULL,
 | 
						|
    amount INTEGER NOT NULL,
 | 
						|
 | 
						|
    CONSTRAINT pk_payment_delivery_part_bucket PRIMARY KEY (year, did, dpnr, bktnr, avnr),
 | 
						|
    CONSTRAINT fk_payment_delivery_part_bucket_delivery_part_bucket FOREIGN KEY (year, did, dpnr, bktnr) REFERENCES delivery_part_bucket (year, did, dpnr, bktnr)
 | 
						|
        ON UPDATE CASCADE
 | 
						|
        ON DELETE CASCADE,
 | 
						|
    CONSTRAINT fk_payment_delivery_part_bucket_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
 | 
						|
        ON UPDATE CASCADE
 | 
						|
        ON DELETE CASCADE
 | 
						|
) STRICT;
 | 
						|
 | 
						|
DROP TRIGGER IF EXISTS t_payment_delivery_part_i;
 | 
						|
DROP TRIGGER IF EXISTS t_payment_delivery_part_u;
 | 
						|
DROP TRIGGER IF EXISTS t_payment_delivery_part_d;
 | 
						|
ALTER TABLE payment_delivery_part RENAME COLUMN amount TO net_amount;
 | 
						|
ALTER TABLE payment_delivery_part ADD COLUMN amount INTEGER NOT NULL GENERATED ALWAYS AS (ROUND(net_amount * (1 + mod_rel) + mod_abs)) VIRTUAL;
 | 
						|
 | 
						|
CREATE TRIGGER t_payment_delivery_part_bucket_i
 | 
						|
    AFTER INSERT ON payment_delivery_part_bucket FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
    INSERT INTO payment_delivery_part (year, did, dpnr, avnr, net_amount)
 | 
						|
    VALUES (NEW.year, NEW.did, NEW.dpnr, NEW.avnr, NEW.amount)
 | 
						|
    ON CONFLICT DO UPDATE SET net_amount = net_amount + NEW.amount;
 | 
						|
END;
 | 
						|
 | 
						|
CREATE TRIGGER t_payment_delivery_part_bucket_u
 | 
						|
    AFTER UPDATE OF amount ON payment_delivery_part_bucket FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
    UPDATE payment_delivery_part
 | 
						|
    SET net_amount = net_amount - OLD.amount
 | 
						|
    WHERE (year, did, dpnr, avnr) = (NEW.year, NEW.did, NEW.dpnr, NEW.avnr);
 | 
						|
    UPDATE payment_delivery_part
 | 
						|
    SET net_amount = net_amount + NEW.amount
 | 
						|
    WHERE (year, did, dpnr, avnr) = (NEW.year, NEW.did, NEW.dpnr, NEW.avnr);
 | 
						|
END;
 | 
						|
 | 
						|
CREATE TRIGGER t_payment_delivery_part_bucket_d
 | 
						|
    AFTER DELETE ON payment_delivery_part_bucket FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
    UPDATE payment_delivery_part
 | 
						|
    SET net_amount = net_amount - OLD.amount
 | 
						|
    WHERE (year, did, dpnr, avnr) = (OLD.year, OLD.did, OLD.dpnr, OLD.avnr);
 | 
						|
END;
 | 
						|
 | 
						|
ALTER TABLE payment_member RENAME COLUMN amount TO net_amount;
 | 
						|
ALTER TABLE payment_member ADD COLUMN mod_abs INTEGER NOT NULL DEFAULT 0;
 | 
						|
ALTER TABLE payment_member ADD COLUMN mod_rel REAL NOT NULL DEFAULT 0;
 | 
						|
ALTER TABLE payment_member ADD COLUMN amount INTEGER NOT NULL GENERATED ALWAYS AS (ROUND(net_amount * (1 + mod_rel) + mod_rel)) VIRTUAL;
 | 
						|
 | 
						|
CREATE TRIGGER t_payment_delivery_part_i
 | 
						|
    AFTER INSERT ON payment_delivery_part FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
    INSERT INTO payment_member (year, avnr, mgnr, net_amount)
 | 
						|
    VALUES (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)), NEW.amount)
 | 
						|
    ON CONFLICT DO UPDATE SET net_amount = net_amount + excluded.net_amount;
 | 
						|
END;
 | 
						|
 | 
						|
CREATE TRIGGER t_payment_delivery_part_u
 | 
						|
    AFTER UPDATE OF amount ON payment_delivery_part FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
    UPDATE payment_member
 | 
						|
    SET net_amount = net_amount - OLD.amount
 | 
						|
    WHERE (year, avnr, mgnr) = (NEW.year, NEW.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (NEW.year, NEW.did)));
 | 
						|
    UPDATE payment_member
 | 
						|
    SET net_amount = net_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_part_d
 | 
						|
    AFTER DELETE ON payment_delivery_part FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
    UPDATE payment_member
 | 
						|
    SET net_amount = net_amount - OLD.amount
 | 
						|
    WHERE (year, avnr, mgnr) = (OLD.year, OLD.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (OLD.year, OLD.did)));
 | 
						|
END;
 |