Add ctime/mtime to payment_variant

This commit is contained in:
2023-07-18 16:47:05 +02:00
parent 7e6e0c0fca
commit d5bacb65ea
3 changed files with 75 additions and 2 deletions

View File

@ -612,6 +612,7 @@ CREATE TABLE payment_variant (
name TEXT NOT NULL, 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, 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)), test_variant INTEGER NOT NULL CHECK (test_variant IN (TRUE, FALSE)),
calc_time INTEGER,
bucket_1_name TEXT DEFAULT NULL, bucket_1_name TEXT DEFAULT NULL,
bucket_2_name TEXT DEFAULT NULL, bucket_2_name TEXT DEFAULT NULL,
@ -625,6 +626,8 @@ CREATE TABLE payment_variant (
comment TEXT DEFAULT NULL, comment TEXT DEFAULT NULL,
data TEXT NOT NULL, data TEXT NOT NULL,
ctime INTEGER NOT NULL DEFAULT (UNIXEPOCH()),
mtime INTEGER NOT NULL DEFAULT (UNIXEPOCH()),
CONSTRAINT pk_payment PRIMARY KEY (year, avnr) CONSTRAINT pk_payment PRIMARY KEY (year, avnr)
) STRICT; ) STRICT;

View File

@ -234,3 +234,73 @@ CREATE TRIGGER t_delivery_part_modifier_d_mtime_delivery_part
BEGIN BEGIN
UPDATE delivery_part SET mtime = UNIXEPOCH() WHERE (year, did, dpnr) = (OLD.year, OLD.did, OLD.dpnr); UPDATE delivery_part SET mtime = UNIXEPOCH() WHERE (year, did, dpnr) = (OLD.year, OLD.did, OLD.dpnr);
END; 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;

View File

@ -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])} 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: 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') 'bucket_1_name', 'bucket_2_name', 'bucket_3_name', 'comment', 'data')
for p in utils.csv_parse_dict(f'{in_dir}/TAuszahlung.csv'): for p in utils.csv_parse_dict(f'{in_dir}/TAuszahlung.csv'):
year = p['Lesejahr'] year = p['Lesejahr']
@ -1486,7 +1486,7 @@ def migrate_payments(in_dir: str, out_dir: str) -> None:
if year not in variant_year_map: if year not in variant_year_map:
variant_year_map[year] = [] variant_year_map[year] = []
variant_year_map[year].append((p['AZNR'], year_map[year], p['TeilzahlungNr'])) 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)) 'Gebunden', 'Nicht gebunden', 'Abgewertet', p['Beschreibung'], json.dumps(data))
def get_modifiers(modifiers: str) -> Tuple[int, float]: def get_modifiers(modifiers: str) -> Tuple[int, float]: