diff --git a/sql/plz-fix.sql b/sql/plz-fix.sql index dcc5a8a..67d4b96 100644 --- a/sql/plz-fix.sql +++ b/sql/plz-fix.sql @@ -1,8 +1,8 @@ -INSERT INTO AT_plz VALUES -(2241, 3560, 'Schönkirchen-Reyersdorf'), -(2165, 5013, 'Drasenhofen'), -(2134, 5115, 'Staaz-Kautendorf'); +INSERT INTO AT_plz (plz, okz, dest) +VALUES (2241, 3560, 'Schönkirchen-Reyersdorf'), + (2165, 5013, 'Drasenhofen'), + (2134, 5115, 'Staaz-Kautendorf'); UPDATE AT_ort SET name = 'Etzmannsdorf am Kamp' WHERE okz = 3938; diff --git a/sql/v01/01.create.sql b/sql/v01/01.create.sql index 90ec2d6..e5a7c96 100644 --- a/sql/v01/01.create.sql +++ b/sql/v01/01.create.sql @@ -360,6 +360,7 @@ CREATE TABLE area_commitment ( CREATE TABLE season ( year INTEGER NOT NULL CHECK (year >= 1000 AND year <= 9999), currency TEXT NOT NULL, + precision INTEGER NOT NULL DEFAULT 2, start_date TEXT CHECK (start_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'), end_date TEXT CHECK (end_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'), @@ -376,7 +377,7 @@ CREATE TABLE modifier ( name TEXT NOT NULL, abs INTEGER, - rel INTEGER, + rel REAL, standard INTEGER NOT NULL CHECK (standard IN (TRUE, FALSE)), quick_select INTEGER NOT NULL CHECK (quick_select IN (TRUE, FALSE)), @@ -384,7 +385,8 @@ CREATE TABLE modifier ( CONSTRAINT pk_modifier PRIMARY KEY (year, mnr), CONSTRAINT fk_modifier_season FOREIGN KEY (year) REFERENCES season (year) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE, + CONSTRAINT c_modifier CHECK ((abs IS NOT NULL AND rel IS NULL) OR (abs IS NULL AND rel IS NOT NULL)) ) STRICT; CREATE TABLE delivery ( @@ -432,6 +434,7 @@ CREATE TABLE delivery_part ( weight INTEGER NOT NULL, kmw REAL NOT NULL, + qualid TEXT NOT NULL, hkid TEXT NOT NULL, kgnr INTEGER DEFAULT NULL, @@ -456,6 +459,9 @@ CREATE TABLE delivery_part ( CONSTRAINT fk_delivery_part_wine_attribute FOREIGN KEY (attrid) REFERENCES wine_attribute (attrid) ON UPDATE CASCADE ON DELETE RESTRICT, + CONSTRAINT fk_delivery_part_wine_quality FOREIGN KEY (qualid) REFERENCES wine_quality (qualid) + ON UPDATE CASCADE + ON DELETE RESTRICT, CONSTRAINT fk_delivery_part_wine_origin FOREIGN KEY (hkid) REFERENCES wine_origin (hkid) ON UPDATE CASCADE ON DELETE RESTRICT, @@ -507,3 +513,87 @@ CREATE TABLE delivery_part_modifier ( ON UPDATE CASCADE ON DELETE RESTRICT ) STRICT; + +CREATE TABLE payment_variant ( + year INTEGER NOT NULL, + avnr INTEGER NOT NULL, + + CONSTRAINT pk_payment PRIMARY KEY (year, avnr) +) STRICT; + +CREATE TABLE delivery_payment ( + year INTEGER NOT NULL, + did INTEGER NOT NULL, + dpnr INTEGER NOT NULL, + avnr INTEGER NOT NULL, + + bucket_1 INTEGER, + bucket_2 INTEGER, + bucket_3 INTEGER, + bucket_4 INTEGER, + bucket_5 INTEGER, + bucket_6 INTEGER, + bucket_7 INTEGER, + bucket_8 INTEGER, + bucket_9 INTEGER, + + price_1 INTEGER, + price_2 INTEGER, + price_3 INTEGER, + price_4 INTEGER, + price_5 INTEGER, + price_6 INTEGER, + price_7 INTEGER, + price_8 INTEGER, + price_9 INTEGER, + + amount INTEGER NOT NULL, + + CONSTRAINT pk_delivery_payment PRIMARY KEY (year, did, dpnr), + CONSTRAINT fk_delivery_payment_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr) + ON UPDATE CASCADE + ON DELETE CASCADE, + CONSTRAINT fk_delivery_payment_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr) + ON UPDATE CASCADE + ON DELETE CASCADE +) STRICT; + +CREATE TRIGGER t_delivery_payment_i + AFTER INSERT ON delivery_payment FOR EACH ROW +BEGIN + INSERT INTO member_payment (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_delivery_payment_u + AFTER UPDATE OF amount ON delivery_payment FOR EACH ROW +BEGIN + UPDATE member_payment + 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_delivery_payment_d + AFTER DELETE ON delivery_payment FOR EACH ROW +BEGIN + UPDATE member_payment + SET amount = amount - OLD.amount + WHERE (year, avnr, mgnr) = (OLD.year, OLD.avnr, (SELECT mgnr FROM delivery WHERE (year, did) = (OLD.year, OLD.did))); +END; + +CREATE TABLE member_payment ( + year INTEGER NOT NULL, + avnr INTEGER NOT NULL, + mgnr INTEGER NOT NULL, + + amount INTEGER NOT NULL, + + CONSTRAINT pk_member_payment PRIMARY KEY (year, avnr, mgnr), + CONSTRAINT fk_member_payment_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr) + ON UPDATE CASCADE + ON DELETE CASCADE, + CONSTRAINT fk_member_payment_member FOREIGN KEY (mgnr) REFERENCES member (mgnr) + ON UPDATE CASCADE + ON DELETE CASCADE +) STRICT; diff --git a/tt/HIL.csv b/tt/HIL.csv index 728230a..096b798 100644 --- a/tt/HIL.csv +++ b/tt/HIL.csv @@ -6,3 +6,4 @@ date;from;to;hours;category;name 2022-11-15;15:30;21:30;6;database;ER Diagram 2022-12-02;13:00;15:30;2.5;meeting;Kickoff Meeting 2023-02-04;23:45;01:00;1.25;structure;Projekt Setup +2023-02-16;17:00;19:00;2;database;Abrechnung diff --git a/tt/STE.csv b/tt/STE.csv index 6039c83..88f60a6 100644 --- a/tt/STE.csv +++ b/tt/STE.csv @@ -20,3 +20,5 @@ date;from;to;hours;category;name 2023-02-08;22:00;23:30;1.5;database;Flächenbindungen 2023-02-09;17:00;18:00;1;export;wgexport.py 2023-02-13;15:00;18:00;3;database;Lieferungen +2023-02-15;17:00;18:00;1;database;Abrechnung +2023-02-16;17:00;19:00;2;database;Abrechnung diff --git a/wgmaster/wgclean.py b/wgmaster/wgclean.py new file mode 100755 index 0000000..5e021d6 --- /dev/null +++ b/wgmaster/wgclean.py @@ -0,0 +1,10 @@ +#!/bin/env python3 + +import argparse + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('in_dir') + parser.add_argument('out_dir') + args = parser.parse_args() diff --git a/wgmaster/wgimport.py b/wgmaster/wgimport.py new file mode 100755 index 0000000..843736a --- /dev/null +++ b/wgmaster/wgimport.py @@ -0,0 +1,8 @@ +#!/bin/env python3 + +import argparse + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + args = parser.parse_args()