database: Add member_history and different types of business shares
This commit is contained in:
+1
-1
@@ -11,7 +11,7 @@ WHERE hkid = 'WLNS' AND k.name NOT IN
|
||||
('Nickelsdorf', 'Zurndorf', 'Parndorf', 'Bruckneudorf', 'Kaisersteinbruch', 'Gattendorf', 'Neudorf bei Parndorf',
|
||||
'Potzneusiedl', 'Pama', 'Deutsch Jahrndorf', 'Kittsee', 'Edelstal');
|
||||
|
||||
INSERT INTO member (mgnr, name, given_name, juridical_pers, zwstid, birthday, entry_date, business_shares, volllieferant, buchführend, country, postal_dest, address, default_kgnr, iban, lfbis_nr, ustid_nr) VALUES
|
||||
INSERT INTO member (mgnr, name, given_name, juridical_pers, zwstid, birthday, entry_date, shares, volllieferant, buchführend, country, postal_dest, address, default_kgnr, iban, lfbis_nr, ustid_nr) VALUES
|
||||
(101, 'Mustermann', 'Max', FALSE, 'X', '1991', '2012-06-04', 5, FALSE, FALSE, 40, 715200162, 'Winzerstraße 1', 32019, 'AT811234567890123457', '0123463', NULL ),
|
||||
(102, 'Weinbauer', 'Wernhardt', FALSE, 'X', '1975', '1994-05-20', 3, FALSE, FALSE, 40, 714300143, 'Winzerstraße 2', 32002, 'AT541234567890123458', '0123471', 'ATU12345684'),
|
||||
(103, 'Musterbauer', 'Matthäus', FALSE, 'X', '2000', '2021-07-03', 4, FALSE, FALSE, 40, 714200154, 'Ödenburger Straße 10', 32010, 'AT271234567890123459', '0123480', NULL ),
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ FROM wb_gem wg
|
||||
WHERE hkid = 'WLWV' AND g.gkz / 100 IN (308, 316) AND k.name IN
|
||||
('Erdpreß', 'Martinsdorf', 'Niedersulz', 'Obersulz', 'Großinzersdorf', 'Palterndorf', 'Gaweinstal', 'Zistersdorf');
|
||||
|
||||
INSERT INTO member (mgnr, name, given_name, juridical_pers, zwstid, birthday, entry_date, business_shares, volllieferant, buchführend, country, postal_dest, address, default_kgnr, iban, lfbis_nr, ustid_nr) VALUES
|
||||
INSERT INTO member (mgnr, name, given_name, juridical_pers, zwstid, birthday, entry_date, shares, volllieferant, buchführend, country, postal_dest, address, default_kgnr, iban, lfbis_nr, ustid_nr) VALUES
|
||||
(101, 'Mustermann', 'Max', FALSE, 'X', '1991', '2012-06-04', 5, FALSE, FALSE, 40, 212005138, 'Winzerstraße 1', 15224, 'AT811234567890123457', '0123463', NULL ),
|
||||
(102, 'Weinbauer', 'Wernhardt', FALSE, 'X', '1975', '1994-05-20', 3, FALSE, FALSE, 40, 221105097, 'Winzerstraße 2', 15213, 'AT541234567890123458', '0123471', 'ATU12345684'),
|
||||
(103, 'Musterbauer', 'Matthäus', FALSE, 'X', '2000', '2021-07-03', 4, FALSE, FALSE, 40, 222303524, 'Brünner Straße 10', 06019, 'AT271234567890123459', '0123480', NULL ),
|
||||
|
||||
+2
-2
@@ -25,8 +25,8 @@ INSERT INTO wine_attribute (attrid, name, active, max_kg_per_ha, strict, fill_lo
|
||||
('S', 'Saft', TRUE, NULL, FALSE, 0),
|
||||
('Z', 'Sekt', TRUE, NULL, FALSE, 0);
|
||||
|
||||
INSERT INTO season (year, currency, min_kg_per_bs, max_kg_per_bs, penalty_per_kg, penalty_amount, penalty_none, penalty_per_bs_amount, penalty_per_bs_none, bs_value, start_date, end_date) VALUES
|
||||
(2025, 'EUR', 1000, 3000, NULL, NULL, NULL, NULL, NULL, NULL, '2025-09-15', '2025-10-31');
|
||||
INSERT INTO season (year, currency, min_kg_per_share, max_kg_per_share, start_date, end_date) VALUES
|
||||
(2025, 'EUR', 1000, 3000, '2025-09-15', '2025-10-31');
|
||||
|
||||
INSERT INTO modifier (year, modid, ordering, name, abs, rel) VALUES
|
||||
(2025, 'L', 1, 'Leicht geschädigtes Traubenmaterial', NULL, -0.05),
|
||||
|
||||
@@ -84,7 +84,10 @@ CREATE TABLE member (
|
||||
entry_date TEXT CHECK (entry_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT CURRENT_DATE,
|
||||
exit_date TEXT CHECK (exit_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT NULL,
|
||||
|
||||
business_shares INTEGER NOT NULL DEFAULT 0,
|
||||
shares INTEGER NOT NULL DEFAULT 0 CHECK (shares >= 0),
|
||||
shares_red INTEGER NOT NULL DEFAULT 0 CHECK (shares_red >= 0),
|
||||
shares_white INTEGER NOT NULL DEFAULT 0 CHECK (shares_white >= 0),
|
||||
shares_dormant INTEGER NOT NULL DEFAULT 0 CHECK (shares_dormant >= 0),
|
||||
accounting_nr TEXT DEFAULT NULL,
|
||||
zwstid TEXT CHECK (NOT active OR zwstid IS NOT NULL),
|
||||
|
||||
@@ -229,15 +232,86 @@ CREATE TABLE area_commitment (
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE member_history (
|
||||
mgnr INTEGER 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,
|
||||
type TEXT NOT NULL CHECK (type REGEXP '^[a-z_]+$'),
|
||||
histnr INTEGER NOT NULL,
|
||||
from_mgnr INTEGER,
|
||||
from_type INTEGER,
|
||||
to_mgnr INTEGER,
|
||||
to_type INTEGER,
|
||||
date_notice TEXT NOT NULL CHECK (date_notice REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT CURRENT_DATE,
|
||||
date_effective TEXT NOT NULL CHECK (date_effective REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT CURRENT_DATE,
|
||||
reason TEXT NOT NULL CHECK (reason REGEXP '^[a-z_]+$'),
|
||||
source TEXT NOT NULL CHECK (source REGEXP '^[a-z_]+$'),
|
||||
|
||||
business_shares INTEGER NOT NULL,
|
||||
comment TEXT DEFAULT NULL,
|
||||
shares INTEGER NOT NULL CHECK (shares > 0),
|
||||
signed INTEGER NOT NULL CHECK (signed IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
value_per_share INTEGER DEFAULT NULL,
|
||||
currency TEXT DEFAULT NULL,
|
||||
deduct_year INTEGER DEFAULT NULL,
|
||||
comment TEXT DEFAULT NULL,
|
||||
|
||||
CONSTRAINT pk_member_history PRIMARY KEY (mgnr, date, type),
|
||||
CONSTRAINT fk_member_history_member FOREIGN KEY (mgnr) REFERENCES member (mgnr)
|
||||
CONSTRAINT pk_member_history PRIMARY KEY (histnr),
|
||||
CONSTRAINT fk_member_history_member_from FOREIGN KEY (from_mgnr) REFERENCES member (mgnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT fk_member_history_member_to FOREIGN KEY (to_mgnr) REFERENCES member (mgnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT fk_member_history_currency FOREIGN KEY (currency) REFERENCES currency (code)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT,
|
||||
CONSTRAINT c_member_history CHECK ((from_mgnr IS NOT NULL OR to_mgnr IS NOT NULL) AND
|
||||
((from_mgnr IS NULL AND from_type IS NULL) OR (from_mgnr IS NOT NULL AND from_type IS NOT NULL)) AND
|
||||
((to_mgnr IS NULL AND to_type IS NULL) OR (to_mgnr IS NOT NULL AND to_type IS NOT NULL)))
|
||||
) STRICT;
|
||||
|
||||
INSERT INTO client_parameter (param, value) VALUES ('ENABLE_MEMBER_HISTORY_TRIGGERS', '1');
|
||||
|
||||
CREATE TRIGGER t_member_history_i_member
|
||||
AFTER INSERT ON member_history FOR EACH ROW
|
||||
WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_MEMBER_HISTORY_TRIGGERS') = 1
|
||||
BEGIN
|
||||
UPDATE member SET shares = shares - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 1;
|
||||
UPDATE member SET shares_red = shares_red - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 2;
|
||||
UPDATE member SET shares_white = shares_white - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 9;
|
||||
UPDATE member SET shares = shares + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 1;
|
||||
UPDATE member SET shares_red = shares_red + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 2;
|
||||
UPDATE member SET shares_white = shares_white + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 9;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_member_history_u_member
|
||||
AFTER UPDATE OF from_mgnr, from_type, to_mgnr, to_type, shares ON member_history FOR EACH ROW
|
||||
WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_MEMBER_HISTORY_TRIGGERS') = 1
|
||||
BEGIN
|
||||
UPDATE member SET shares = shares + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 1;
|
||||
UPDATE member SET shares_red = shares_red + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 2;
|
||||
UPDATE member SET shares_white = shares_white + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 9;
|
||||
UPDATE member SET shares = shares - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 1;
|
||||
UPDATE member SET shares_red = shares_red - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 2;
|
||||
UPDATE member SET shares_white = shares_white - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 9;
|
||||
UPDATE member SET shares = shares - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 1;
|
||||
UPDATE member SET shares_red = shares_red - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 2;
|
||||
UPDATE member SET shares_white = shares_white - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant - NEW.shares WHERE mgnr = NEW.from_mgnr AND NEW.from_type = 9;
|
||||
UPDATE member SET shares = shares + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 1;
|
||||
UPDATE member SET shares_red = shares_red + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 2;
|
||||
UPDATE member SET shares_white = shares_white + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant + NEW.shares WHERE mgnr = NEW.to_mgnr AND NEW.to_type = 9;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER t_member_history_d_member
|
||||
AFTER DELETE ON member_history FOR EACH ROW
|
||||
WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_MEMBER_HISTORY_TRIGGERS') = 1
|
||||
BEGIN
|
||||
UPDATE member SET shares = shares + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 1;
|
||||
UPDATE member SET shares_red = shares_red + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 2;
|
||||
UPDATE member SET shares_white = shares_white + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant + OLD.shares WHERE mgnr = OLD.from_mgnr AND OLD.from_type = 9;
|
||||
UPDATE member SET shares = shares - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 1;
|
||||
UPDATE member SET shares_red = shares_red - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 2;
|
||||
UPDATE member SET shares_white = shares_white - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 3;
|
||||
UPDATE member SET shares_dormant = shares_dormant - OLD.shares WHERE mgnr = OLD.to_mgnr AND OLD.to_type = 9;
|
||||
END;
|
||||
|
||||
@@ -8,14 +8,18 @@ CREATE TABLE season (
|
||||
vat_normal REAL NOT NULL DEFAULT 0.10,
|
||||
vat_flatrate REAL NOT NULL DEFAULT 0.13,
|
||||
|
||||
min_kg_per_bs INTEGER NOT NULL,
|
||||
max_kg_per_bs INTEGER NOT NULL,
|
||||
penalty_per_kg INTEGER,
|
||||
penalty_amount INTEGER,
|
||||
penalty_none INTEGER,
|
||||
penalty_per_bs_amount INTEGER,
|
||||
penalty_per_bs_none INTEGER,
|
||||
bs_value INTEGER,
|
||||
min_kg_per_share INTEGER DEFAULT NULL,
|
||||
max_kg_per_share INTEGER DEFAULT NULL,
|
||||
min_kg_per_share_red INTEGER DEFAULT NULL,
|
||||
max_kg_per_share_red INTEGER DEFAULT NULL,
|
||||
min_kg_per_share_white INTEGER DEFAULT NULL,
|
||||
max_kg_per_share_white INTEGER DEFAULT NULL,
|
||||
penalty_per_kg INTEGER DEFAULT NULL,
|
||||
penalty_amount INTEGER DEFAULT NULL,
|
||||
penalty_none INTEGER DEFAULT NULL,
|
||||
penalty_per_share_amount INTEGER DEFAULT NULL,
|
||||
penalty_per_share_none INTEGER DEFAULT NULL,
|
||||
share_value INTEGER,
|
||||
|
||||
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])$'),
|
||||
|
||||
+60
-17
@@ -40,7 +40,7 @@ CREATE VIEW v_delivery AS
|
||||
SELECT p.year, p.did, p.dpnr,
|
||||
d.date, d.time, d.zwstid, d.lnr, d.lsnr,
|
||||
m.mgnr, m.name, m.given_name,
|
||||
p.sortid, a.attrid, p.cultid,
|
||||
v.sortid, v.type, a.attrid, p.cultid,
|
||||
p.weight, p.kmw, ROUND(p.kmw * (4.54 + 0.022 * p.kmw), 0) AS oe, p.qualid,
|
||||
p.hkid, p.kgnr, p.rdnr,
|
||||
p.net_weight, p.gebunden,
|
||||
@@ -52,6 +52,7 @@ SELECT p.year, p.did, p.dpnr,
|
||||
FROM delivery_part p
|
||||
JOIN delivery d ON (d.year, d.did) = (p.year, p.did)
|
||||
JOIN member m ON m.mgnr = d.mgnr
|
||||
LEFT JOIN wine_variety v ON v.sortid = p.sortid
|
||||
LEFT JOIN wine_attribute a ON a.attrid = p.attrid
|
||||
LEFT JOIN delivery_part_modifier o ON (o.year, o.did, o.dpnr) = (p.year, p.did, p.dpnr)
|
||||
GROUP BY p.year, p.did, p.dpnr
|
||||
@@ -59,7 +60,9 @@ ORDER BY p.year, p.did, p.dpnr, o.modid;
|
||||
|
||||
CREATE VIEW v_stat_season AS
|
||||
SELECT year,
|
||||
SUM(weight) AS sum,
|
||||
SUM(weight) AS weight_total,
|
||||
SUM(IIF(type = 'R', weight, 0)) AS weight_red,
|
||||
SUM(IIF(type = 'W', weight, 0)) AS weight_white,
|
||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||
COUNT(DISTINCT did) AS lieferungen,
|
||||
@@ -68,9 +71,11 @@ FROM v_delivery
|
||||
GROUP BY year
|
||||
ORDER BY year;
|
||||
|
||||
CREATE VIEW v_stat_sort AS
|
||||
CREATE VIEW v_stat_variety AS
|
||||
SELECT year, sortid,
|
||||
SUM(weight) AS sum,
|
||||
SUM(weight) AS weight_total,
|
||||
SUM(IIF(type = 'R', weight, 0)) AS weight_red,
|
||||
SUM(IIF(type = 'W', weight, 0)) AS weight_white,
|
||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||
COUNT(DISTINCT did) AS lieferungen,
|
||||
@@ -81,7 +86,9 @@ ORDER BY year, sortid;
|
||||
|
||||
CREATE VIEW v_stat_attr AS
|
||||
SELECT year, attrid,
|
||||
SUM(weight) AS sum,
|
||||
SUM(weight) AS weight_total,
|
||||
SUM(IIF(type = 'R', weight, 0)) AS weight_red,
|
||||
SUM(IIF(type = 'W', weight, 0)) AS weight_white,
|
||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||
COUNT(DISTINCT did) AS lieferungen,
|
||||
@@ -90,9 +97,11 @@ FROM v_delivery
|
||||
GROUP BY year, attrid
|
||||
ORDER BY year, attrid;
|
||||
|
||||
CREATE VIEW v_stat_sort_attr AS
|
||||
CREATE VIEW v_stat_variety_attr AS
|
||||
SELECT year, sortid, attrid,
|
||||
SUM(weight) AS sum,
|
||||
SUM(weight) AS weight_total,
|
||||
SUM(IIF(type = 'R', weight, 0)) AS weight_red,
|
||||
SUM(IIF(type = 'W', weight, 0)) AS weight_white,
|
||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||
COUNT(DISTINCT did) AS lieferungen,
|
||||
@@ -103,7 +112,9 @@ ORDER BY year, sortid, attrid;
|
||||
|
||||
CREATE VIEW v_stat_member AS
|
||||
SELECT year, mgnr,
|
||||
SUM(weight) AS sum,
|
||||
SUM(weight) AS weight_total,
|
||||
SUM(IIF(type = 'R', weight, 0)) AS weight_red,
|
||||
SUM(IIF(type = 'W', weight, 0)) AS weight_white,
|
||||
ROUND(SUM(kmw * weight) / SUM(weight), 2) AS kmw,
|
||||
ROUND(SUM(oe * weight) / SUM(weight), 1) AS oe,
|
||||
COUNT(DISTINCT did) AS lieferungen
|
||||
@@ -136,17 +147,49 @@ FROM v_delivery d
|
||||
JOIN wine_variety v ON v.sortid = d.sortid
|
||||
ORDER BY d.date, d.time;
|
||||
|
||||
CREATE VIEW v_member_history AS
|
||||
SELECT m.mgnr, s.year,
|
||||
m.shares + SUM(IIF(h1.from_type = 1, h1.shares, 0)) - SUM(IIF(h2.to_type = 1, h2.shares, 0)) AS shares,
|
||||
m.shares_red + SUM(IIF(h1.from_type = 2, h1.shares, 0)) - SUM(IIF(h2.to_type = 2, h2.shares, 0)) AS shares_red,
|
||||
m.shares_white + SUM(IIF(h1.from_type = 3, h1.shares, 0)) - SUM(IIF(h2.to_type = 3, h2.shares, 0)) AS shares_white,
|
||||
m.shares_dormant + SUM(IIF(h1.from_type = 9, h1.shares, 0)) - SUM(IIF(h2.to_type = 9, h2.shares, 0)) AS shares_dormant
|
||||
FROM member m, v_virtual_season s
|
||||
LEFT JOIN member_history h1 ON (SUBSTR(h1.date_notice, 1, 4) + 0) > s.year AND h1.from_mgnr = m.mgnr
|
||||
LEFT JOIN member_history h2 ON (SUBSTR(h2.date_notice, 1, 4) + 0) > s.year AND h2.to_mgnr = m.mgnr
|
||||
GROUP BY m.mgnr, s.year
|
||||
ORDER BY m.mgnr, s.year;
|
||||
|
||||
CREATE VIEW v_total_under_delivery AS
|
||||
SELECT s.year, m.mgnr, m.business_shares,
|
||||
m.business_shares * s.min_kg_per_bs AS min_kg,
|
||||
m.business_shares * s.max_kg_per_bs AS max_kg,
|
||||
COALESCE(d.sum, 0) AS weight,
|
||||
IIF(COALESCE(d.sum, 0) < m.business_shares * s.min_kg_per_bs,
|
||||
COALESCE(d.sum, 0) - m.business_shares * s.min_kg_per_bs,
|
||||
IIF(COALESCE(d.sum, 0) > m.business_shares * s.max_kg_per_bs,
|
||||
COALESCE(d.sum, 0) - m.business_shares * s.max_kg_per_bs,
|
||||
0)) AS diff
|
||||
SELECT s.year, m.mgnr,
|
||||
h.shares,
|
||||
h.shares * COALESCE(s.min_kg_per_share, 0) AS min_kg,
|
||||
h.shares * COALESCE(s.max_kg_per_share, 0) AS max_kg,
|
||||
COALESCE(d.weight_total, 0) AS weight_total,
|
||||
IIF(COALESCE(d.weight_total, 0) < h.shares * COALESCE(s.min_kg_per_share, 0),
|
||||
COALESCE(d.weight_total, 0) - h.shares * COALESCE(s.min_kg_per_share, 0),
|
||||
IIF(COALESCE(d.weight_total, 0) > h.shares * COALESCE(s.max_kg_per_share, 0),
|
||||
COALESCE(d.weight_total, 0) - h.shares * COALESCE(s.max_kg_per_share, 0),
|
||||
0)) AS diff,
|
||||
h.shares_red,
|
||||
h.shares_red * COALESCE(s.min_kg_per_share_red, s.min_kg_per_share, 0) AS min_kg_red,
|
||||
h.shares_red * COALESCE(s.max_kg_per_share_red, s.max_kg_per_share, 0) AS max_kg_red,
|
||||
COALESCE(d.weight_red, 0) AS weight_red,
|
||||
IIF(COALESCE(d.weight_red, 0) < h.shares_red * COALESCE(s.min_kg_per_share_red, s.min_kg_per_share, 0),
|
||||
COALESCE(d.weight_red, 0) - h.shares_red * COALESCE(s.min_kg_per_share_red, s.min_kg_per_share, 0),
|
||||
IIF(COALESCE(d.weight_red, 0) > h.shares_red * COALESCE(s.max_kg_per_share_red, s.max_kg_per_share, 0),
|
||||
COALESCE(d.weight_red, 0) - h.shares_red * COALESCE(s.max_kg_per_share_red, s.max_kg_per_share, 0),
|
||||
0)) AS diff_red,
|
||||
h.shares_white,
|
||||
h.shares_white * COALESCE(s.min_kg_per_share_white, s.min_kg_per_share, 0) AS min_kg_white,
|
||||
h.shares_white * COALESCE(s.max_kg_per_share_white, s.max_kg_per_share, 0) AS max_kg_white,
|
||||
COALESCE(d.weight_white, 0) AS weight_white,
|
||||
IIF(COALESCE(d.weight_white, 0) < h.shares_white * COALESCE(s.min_kg_per_share_white, s.min_kg_per_share, 0),
|
||||
COALESCE(d.weight_white, 0) - h.shares_white * COALESCE(s.min_kg_per_share_white, s.min_kg_per_share, 0),
|
||||
IIF(COALESCE(d.weight_white, 0) > h.shares_white * COALESCE(s.max_kg_per_share_white, s.max_kg_per_share, 0),
|
||||
COALESCE(d.weight_white, 0) - h.shares_white * COALESCE(s.max_kg_per_share_white, s.max_kg_per_share, 0),
|
||||
0)) AS diff_white
|
||||
FROM member m, season s
|
||||
LEFT JOIN v_member_history h ON (h.year, h.mgnr) = (s.year, m.mgnr)
|
||||
LEFT JOIN v_stat_member d ON (d.year, d.mgnr) = (s.year, m.mgnr)
|
||||
ORDER BY s.year, m.mgnr;
|
||||
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
|
||||
CREATE VIEW v_penalty_business_shares AS
|
||||
SELECT u.year, u.mgnr,
|
||||
SUM(IIF(u.weight = 0, COALESCE(-s.penalty_none, 0) + COALESCE(-u.business_shares * s.penalty_per_bs_none, 0), 0) +
|
||||
IIF(u.diff < 0, COALESCE(-s.penalty_amount, 0), 0) +
|
||||
COALESCE(u.diff * s.penalty_per_kg, 0) + COALESCE(CEIL(CAST(u.diff AS REAL) / s.min_kg_per_bs) * s.penalty_per_bs_amount, 0)
|
||||
SUM(IIF(u.weight_total = 0, COALESCE(-s.penalty_none, 0) + COALESCE(-(u.shares + u.shares_red + u.shares_white) * s.penalty_per_share_none, 0), 0) +
|
||||
IIF(u.diff < 0 OR u.diff_red < 0 OR u.diff_white < 0, COALESCE(-s.penalty_amount, 0), 0) +
|
||||
COALESCE((u.diff + u.diff_red + u.diff_white) * s.penalty_per_kg, 0) +
|
||||
COALESCE(CEIL(CAST(u.diff AS REAL) / s.min_kg_per_share) * s.penalty_per_share_amount, 0) +
|
||||
COALESCE(CEIL(CAST(u.diff_red AS REAL) / s.min_kg_per_share_red) * s.penalty_per_share_amount, 0) +
|
||||
COALESCE(CEIL(CAST(u.diff_white AS REAL) / s.min_kg_per_share_white) * s.penalty_per_share_amount, 0)
|
||||
) AS total_penalty
|
||||
FROM v_total_under_delivery u
|
||||
JOIN season s ON u.year = s.year
|
||||
@@ -26,10 +29,11 @@ HAVING total_penalty < 0
|
||||
ORDER BY year, mgnr;
|
||||
|
||||
CREATE VIEW v_auto_business_shares AS
|
||||
SELECT s.year, h.mgnr,
|
||||
SUM(h.business_shares) AS business_shares,
|
||||
SUM(h.business_shares) * s.bs_value AS total_amount
|
||||
FROM member_history h, season s
|
||||
WHERE h.type = 'auto' AND h.date >= s.year || '-01-01' AND h.date <= s.year || '-12-31'
|
||||
GROUP BY s.year, h.mgnr
|
||||
ORDER BY s.year, h.mgnr;
|
||||
SELECT (SUBSTR(h.date_notice, 1, 4) + 0) AS year,
|
||||
h.to_mgnr AS mgnr,
|
||||
SUM(h.shares) AS shares,
|
||||
SUM(h.shares * COALESCE(h.value_per_share, 0)) AS total_amount
|
||||
FROM member_history h
|
||||
WHERE h.reason = 'prescription' AND h.source = 'elwig'
|
||||
GROUP BY year, h.to_mgnr
|
||||
ORDER BY year, h.to_mgnr;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
|
||||
-- This value MUST NOT be changed while other connections are open!
|
||||
PRAGMA schema_version = 3900;
|
||||
PRAGMA schema_version = 4000;
|
||||
|
||||
Reference in New Issue
Block a user