From d5bacb65ea5d1276f2ca4e82f2491f281d05421b Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 18 Jul 2023 16:47:05 +0200 Subject: [PATCH] Add ctime/mtime to payment_variant --- sql/v01/10.create.sql | 3 ++ sql/v01/11.timestamp-trigger.sql | 70 ++++++++++++++++++++++++++++++++ wgmaster/migrate.py | 4 +- 3 files changed, 75 insertions(+), 2 deletions(-) diff --git a/sql/v01/10.create.sql b/sql/v01/10.create.sql index d706d18..fd5c699 100644 --- a/sql/v01/10.create.sql +++ b/sql/v01/10.create.sql @@ -612,6 +612,7 @@ CREATE TABLE payment_variant ( name TEXT NOT NULL, date TEXT NOT NULL CHECK (date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT CURRENT_DATE, test_variant INTEGER NOT NULL CHECK (test_variant IN (TRUE, FALSE)), + calc_time INTEGER, bucket_1_name TEXT DEFAULT NULL, bucket_2_name TEXT DEFAULT NULL, @@ -625,6 +626,8 @@ CREATE TABLE payment_variant ( comment TEXT DEFAULT NULL, data TEXT NOT NULL, + ctime INTEGER NOT NULL DEFAULT (UNIXEPOCH()), + mtime INTEGER NOT NULL DEFAULT (UNIXEPOCH()), CONSTRAINT pk_payment PRIMARY KEY (year, avnr) ) STRICT; diff --git a/sql/v01/11.timestamp-trigger.sql b/sql/v01/11.timestamp-trigger.sql index 7e484f7..c930821 100644 --- a/sql/v01/11.timestamp-trigger.sql +++ b/sql/v01/11.timestamp-trigger.sql @@ -234,3 +234,73 @@ CREATE TRIGGER t_delivery_part_modifier_d_mtime_delivery_part BEGIN UPDATE delivery_part SET mtime = UNIXEPOCH() WHERE (year, did, dpnr) = (OLD.year, OLD.did, OLD.dpnr); END; + +---------------------------------------------------------------- + +CREATE TRIGGER t_payment_variant_i_ctime + AFTER INSERT ON payment_variant FOR EACH ROW + WHEN NEW.ctime != UNIXEPOCH() +BEGIN + UPDATE payment_variant SET ctime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr); +END; + +CREATE TRIGGER t_payment_variant_u_ctime + BEFORE UPDATE ON payment_variant FOR EACH ROW + WHEN OLD.ctime != NEW.ctime +BEGIN + SELECT RAISE(ABORT, 'It is not allowed to change ctime'); +END; + +CREATE TRIGGER t_payment_variant_i_mtime + AFTER INSERT ON payment_variant FOR EACH ROW + WHEN NEW.mtime != UNIXEPOCH() +BEGIN + UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr); +END; + +CREATE TRIGGER t_payment_variant_u_mtime + AFTER UPDATE ON payment_variant FOR EACH ROW + WHEN NEW.mtime != UNIXEPOCH() +BEGIN + UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr); +END; + +---------------------------------------------------------------- + +CREATE TRIGGER t_payment_delivery_i_mtime_payment_variant + AFTER INSERT ON payment_delivery 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 +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 +BEGIN + UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr); +END; + +---------------------------------------------------------------- + +CREATE TRIGGER t_payment_member_i_mtime_payment_variant + AFTER INSERT ON payment_member FOR EACH ROW +BEGIN + UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (NEW.year, NEW.avnr); +END; + +CREATE TRIGGER t_payment_member_u_mtime_payment_variant + AFTER UPDATE ON payment_member 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_member_d_mtime_payment_variant + AFTER DELETE ON payment_member FOR EACH ROW +BEGIN + UPDATE payment_variant SET mtime = UNIXEPOCH() WHERE (year, avnr) = (OLD.year, OLD.avnr); +END; \ No newline at end of file diff --git a/wgmaster/migrate.py b/wgmaster/migrate.py index 1d27c58..8e8b94a 100755 --- a/wgmaster/migrate.py +++ b/wgmaster/migrate.py @@ -1413,7 +1413,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None: qual_map = {i: [s for s in p_qual if s['AZNR'] == i] for i in set([s['AZNR'] for s in p_qual])} with utils.csv_open(f'{out_dir}/payment_variant.csv') as f_payment: - f_payment.header('year', 'avnr', 'name', 'date', 'test_variant', + f_payment.header('year', 'avnr', 'name', 'date', 'test_variant', 'calc_time', 'bucket_1_name', 'bucket_2_name', 'bucket_3_name', 'comment', 'data') for p in utils.csv_parse_dict(f'{in_dir}/TAuszahlung.csv'): year = p['Lesejahr'] @@ -1486,7 +1486,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None: if year not in variant_year_map: variant_year_map[year] = [] variant_year_map[year].append((p['AZNR'], year_map[year], p['TeilzahlungNr'])) - f_payment.row(year, year_map[year], p['Titel'], p['Datum'], test, + f_payment.row(year, year_map[year], p['Titel'], p['Datum'], test, None, 'Gebunden', 'Nicht gebunden', 'Abgewertet', p['Beschreibung'], json.dumps(data)) def get_modifiers(modifiers: str) -> Tuple[int, float]: