Add PaymentVariantsWindow
This commit is contained in:
@ -1,15 +1,16 @@
|
||||
using Microsoft.Data.Sqlite;
|
||||
using System;
|
||||
using System.Windows;
|
||||
|
||||
namespace Elwig.Helpers {
|
||||
public static class AppDbUpdater {
|
||||
|
||||
public static readonly int RequiredSchemaVersion = 8;
|
||||
public static readonly int RequiredSchemaVersion = 9;
|
||||
|
||||
private static int _versionOffset = 0;
|
||||
private static readonly Action<SqliteConnection>[] _updaters = new[] {
|
||||
UpdateDbSchema_1_To_2, UpdateDbSchema_2_To_3, UpdateDbSchema_3_To_4, UpdateDbSchema_4_To_5,
|
||||
UpdateDbSchema_5_To_6, UpdateDBSchema_6_To_7, UpdateDbSchema_7_To_8
|
||||
UpdateDbSchema_5_To_6, UpdateDBSchema_6_To_7, UpdateDbSchema_7_To_8, UpdateDbSchema_8_To_9,
|
||||
};
|
||||
|
||||
private static void ExecuteNonQuery(SqliteConnection cnx, string sql) {
|
||||
@ -617,5 +618,101 @@ namespace Elwig.Helpers {
|
||||
WHERE gkz / 10000 = 8;
|
||||
""");
|
||||
}
|
||||
|
||||
private static void UpdateDbSchema_8_To_9(SqliteConnection cnx) {
|
||||
ExecuteNonQuery(cnx, """
|
||||
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;
|
||||
""");
|
||||
|
||||
ExecuteNonQuery(cnx, "DROP TRIGGER IF EXISTS t_payment_delivery_part_i");
|
||||
ExecuteNonQuery(cnx, "DROP TRIGGER IF EXISTS t_payment_delivery_part_u");
|
||||
ExecuteNonQuery(cnx, "DROP TRIGGER IF EXISTS t_payment_delivery_part_d");
|
||||
ExecuteNonQuery(cnx, "ALTER TABLE payment_delivery_part RENAME COLUMN amount TO net_amount");
|
||||
ExecuteNonQuery(cnx, "ALTER TABLE payment_delivery_part ADD COLUMN amount INTEGER NOT NULL GENERATED ALWAYS AS (ROUND(net_amount * (1 + mod_rel) + mod_abs)) VIRTUAL");
|
||||
|
||||
ExecuteNonQuery(cnx, """
|
||||
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;
|
||||
""");
|
||||
ExecuteNonQuery(cnx, """
|
||||
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;
|
||||
""");
|
||||
ExecuteNonQuery(cnx, """
|
||||
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;
|
||||
""");
|
||||
|
||||
ExecuteNonQuery(cnx, "ALTER TABLE payment_member RENAME COLUMN amount TO net_amount");
|
||||
ExecuteNonQuery(cnx, "ALTER TABLE payment_member ADD COLUMN mod_abs INTEGER NOT NULL DEFAULT 0");
|
||||
ExecuteNonQuery(cnx, "ALTER TABLE payment_member ADD COLUMN mod_rel REAL NOT NULL DEFAULT 0");
|
||||
ExecuteNonQuery(cnx, "ALTER TABLE payment_member ADD COLUMN amount INTEGER NOT NULL GENERATED ALWAYS AS (ROUND(net_amount * (1 + mod_rel) + mod_rel)) VIRTUAL");
|
||||
|
||||
ExecuteNonQuery(cnx, """
|
||||
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 amount = amount + excluded.amount;
|
||||
END;
|
||||
""");
|
||||
ExecuteNonQuery(cnx, """
|
||||
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;
|
||||
""");
|
||||
ExecuteNonQuery(cnx, """
|
||||
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;
|
||||
""");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user