database: fix billing calculcation
This commit is contained in:
@ -19,22 +19,26 @@ CREATE TABLE branch (
|
||||
mobile_nr TEXT DEFAULT NULL CHECK (mobile_nr REGEXP '^\+[0-9]{1,3}( [0-9]+)+(-[0-9]+)?$'),
|
||||
|
||||
CONSTRAINT pk_branch PRIMARY KEY (zwstid),
|
||||
CONSTRAINT sk_branch_name UNIQUE (name),
|
||||
CONSTRAINT fk_branch_postal_dest FOREIGN KEY (country, postal_dest) REFERENCES postal_dest (country, id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE wine_attribute (
|
||||
attrid TEXT NOT NULL CHECK (attrid REGEXP '^[A-Z]+$'),
|
||||
name TEXT NOT NULL,
|
||||
attrid TEXT NOT NULL CHECK (attrid REGEXP '^[A-Z]+$'),
|
||||
name TEXT NOT NULL,
|
||||
active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE,
|
||||
|
||||
max_kg_per_ha INTEGER,
|
||||
fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (0, 1, 2)) DEFAULT 0,
|
||||
active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE,
|
||||
max_kg_per_ha INTEGER,
|
||||
strict INTEGER NOT NULL CHECK (strict IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
fill_lower INTEGER NOT NULL CHECK (fill_lower IN (0, 1, 2)) DEFAULT 0,
|
||||
|
||||
CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid)
|
||||
CONSTRAINT pk_wine_attribute PRIMARY KEY (attrid),
|
||||
CONSTRAINT sk_wine_attribute_name UNIQUE (name)
|
||||
) STRICT;
|
||||
|
||||
-- all values in the table are stored with precision 4!
|
||||
CREATE TABLE area_commitment_type (
|
||||
vtrgid TEXT NOT NULL CHECK (vtrgid = sortid || COALESCE(attrid, '') || disc),
|
||||
sortid TEXT NOT NULL,
|
||||
@ -42,8 +46,9 @@ CREATE TABLE area_commitment_type (
|
||||
disc TEXT DEFAULT NULL CHECK (disc REGEXP '^[A-Z0-9]+$'),
|
||||
|
||||
min_kg_per_ha INTEGER,
|
||||
max_kg_per_ha INTEGER,
|
||||
penalty_per_kg INTEGER,
|
||||
penalty_amount INTEGER,
|
||||
penalty_none INTEGER,
|
||||
|
||||
CONSTRAINT pk_area_commitment_type PRIMARY KEY (vtrgid),
|
||||
CONSTRAINT sk_area_commitment_type_sort_attr UNIQUE (sortid, attrid, disc),
|
||||
@ -56,10 +61,12 @@ CREATE TABLE area_commitment_type (
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE wine_cultivation (
|
||||
cultid TEXT NOT NULL CHECK (cultid REGEXP '^[A-Z]+$'),
|
||||
name TEXT NOT NULL,
|
||||
cultid TEXT NOT NULL CHECK (cultid REGEXP '^[A-Z]+$'),
|
||||
name TEXT NOT NULL,
|
||||
description TEXT DEFAULT NULL,
|
||||
|
||||
CONSTRAINT pk_wine_cultivation PRIMARY KEY (cultid)
|
||||
CONSTRAINT pk_wine_cultivation PRIMARY KEY (cultid),
|
||||
CONSTRAINT sk_wine_cultivation_name UNIQUE (name)
|
||||
) STRICT;
|
||||
|
||||
CREATE TABLE member (
|
||||
@ -84,6 +91,7 @@ CREATE TABLE member (
|
||||
ustid_nr TEXT CHECK (ustid_nr REGEXP '^[A-Z]{2}[A-Z0-9]{2,12}$') DEFAULT NULL,
|
||||
volllieferant INTEGER NOT NULL CHECK (volllieferant IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
buchführend INTEGER NOT NULL CHECK (buchführend IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
organic INTEGER NOT NULL CHECK (organic IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
funktionär INTEGER NOT NULL CHECK (funktionär IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
active INTEGER NOT NULL CHECK (active IN (TRUE, FALSE)) DEFAULT TRUE,
|
||||
deceased INTEGER NOT NULL CHECK (deceased IN (TRUE, FALSE)) DEFAULT FALSE,
|
||||
|
@ -1,11 +1,21 @@
|
||||
|
||||
CREATE TABLE season (
|
||||
year INTEGER NOT NULL CHECK (year >= 1000 AND year <= 9999),
|
||||
currency TEXT NOT NULL,
|
||||
precision INTEGER NOT NULL DEFAULT 4,
|
||||
year INTEGER NOT NULL CHECK (year >= 1000 AND year <= 9999),
|
||||
currency TEXT NOT NULL,
|
||||
precision INTEGER NOT NULL DEFAULT 4,
|
||||
|
||||
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])$'),
|
||||
max_kg_per_ha INTEGER NOT NULL DEFAULT 10000,
|
||||
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,
|
||||
|
||||
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])$'),
|
||||
|
||||
CONSTRAINT pk_season PRIMARY KEY (year),
|
||||
CONSTRAINT fk_season_currency FOREIGN KEY (currency) REFERENCES currency (code)
|
||||
|
@ -1,15 +1,15 @@
|
||||
|
||||
CREATE TABLE delivery_part_bin (
|
||||
CREATE TABLE delivery_part_bucket (
|
||||
year INTEGER NOT NULL,
|
||||
did INTEGER NOT NULL,
|
||||
dpnr INTEGER NOT NULL,
|
||||
binnr INTEGER NOT NULL,
|
||||
bktnr INTEGER NOT NULL,
|
||||
|
||||
discr TEXT NOT NULL,
|
||||
value INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT pk_delivery_part_bin PRIMARY KEY (year, did, dpnr, binnr),
|
||||
CONSTRAINT fk_delivery_part_bin_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
||||
CONSTRAINT pk_delivery_part_bucket PRIMARY KEY (year, did, dpnr, bktnr),
|
||||
CONSTRAINT fk_delivery_part_bucket_delivery_part FOREIGN KEY (year, did, dpnr) REFERENCES delivery_part (year, did, dpnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) STRICT;
|
||||
@ -77,21 +77,21 @@ BEGIN
|
||||
END;
|
||||
|
||||
-- all values in the table are stored with season-precision!
|
||||
CREATE TABLE payment_delivery_part_bin (
|
||||
CREATE TABLE payment_delivery_part_bucket (
|
||||
year INTEGER NOT NULL,
|
||||
did INTEGER NOT NULL,
|
||||
dpnr INTEGER NOT NULL,
|
||||
binnr INTEGER NOT NULL,
|
||||
bktnr INTEGER NOT NULL,
|
||||
avnr INTEGER NOT NULL,
|
||||
|
||||
price INTEGER NOT NULL,
|
||||
amount INTEGER NOT NULL,
|
||||
|
||||
CONSTRAINT pk_payment_delivery_part_bin PRIMARY KEY (year, did, dpnr, binnr, avnr),
|
||||
CONSTRAINT fk_payment_delivery_part_bin_delivery_part_bin FOREIGN KEY (year, did, dpnr, binnr) REFERENCES delivery_part_bin (year, did, dpnr, binnr)
|
||||
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_bin_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
|
||||
CONSTRAINT fk_payment_delivery_part_bucket_payment_variant FOREIGN KEY (year, avnr) REFERENCES payment_variant (year, avnr)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) STRICT;
|
||||
|
@ -5,19 +5,6 @@ FROM AT_gem g
|
||||
JOIN AT_ort o ON o.gkz = g.gkz
|
||||
JOIN AT_plz_dest p ON p.okz = o.okz;
|
||||
|
||||
CREATE VIEW v_area_commitment AS
|
||||
SELECT c.fbnr, m.mgnr, m.family_name, m.given_name,
|
||||
c.sortid, c.cultid, c.area,
|
||||
c.kgnr, c.gstnr, c.rdnr,
|
||||
c.year_from, c.year_to,
|
||||
GROUP_CONCAT(DISTINCT a.attrid) AS attributes,
|
||||
c.comment
|
||||
FROM area_commitment c
|
||||
JOIN member m ON m.mgnr = c.mgnr
|
||||
LEFT JOIN area_commitment_attribute a ON a.fbnr = c.fbnr
|
||||
GROUP BY c.fbnr
|
||||
ORDER BY c.fbnr;
|
||||
|
||||
CREATE VIEW v_delivery AS
|
||||
SELECT p.year, p.did, p.dpnr,
|
||||
d.date, d.time, d.zwstid, d.lnr, d.lsnr,
|
||||
@ -28,7 +15,7 @@ SELECT p.year, p.did, p.dpnr,
|
||||
p.gerebelt, p.gebunden,
|
||||
p.qualid IN (SELECT l.qualid FROM wine_quality_level l WHERE NOT l.predicate AND (p.kmw >= l.min_kmw OR l.min_kmw IS NULL) ORDER BY l.min_kmw DESC LIMIT 1,100) AS abgewertet,
|
||||
p.qualid NOT IN ('WEI', 'RSW', 'LDW') AS min_quw,
|
||||
COALESCE(a.fill_lower_bins, 0) AS attribute_prio,
|
||||
IIF(a.strict, COALESCE(a.fill_lower, 0), 0) AS attribute_prio,
|
||||
GROUP_CONCAT(o.modid) AS modifiers,
|
||||
d.comment, p.comment AS part_comment
|
||||
FROM delivery_part p
|
||||
@ -39,36 +26,6 @@ FROM delivery_part p
|
||||
GROUP BY p.year, p.did, p.dpnr
|
||||
ORDER BY p.year, p.did, p.dpnr, o.modid;
|
||||
|
||||
CREATE VIEW v_delivery_bin AS
|
||||
SELECT year, mgnr,
|
||||
sortid || IIF(min_quw, COALESCE(attrid, ''), '_') AS bin,
|
||||
SUM(weight) AS weight
|
||||
FROM v_delivery
|
||||
GROUP BY year, mgnr, bin
|
||||
ORDER BY year, mgnr, LENGTH(bin) DESC, bin;
|
||||
|
||||
CREATE VIEW v_payment_bin AS
|
||||
SELECT d.year, d.mgnr,
|
||||
sortid || discr AS bin,
|
||||
SUM(value) AS weight
|
||||
FROM v_delivery d
|
||||
JOIN delivery_part_bin b ON (b.year, b.did, b.dpnr) = (d.year, d.did, d.dpnr)
|
||||
GROUP BY d.year, d.mgnr, bin
|
||||
HAVING SUM(value) > 0
|
||||
ORDER BY d.year, d.mgnr, LENGTH(bin) DESC, bin;
|
||||
|
||||
CREATE VIEW v_area_commitment_bin AS
|
||||
SELECT s.year, c.mgnr,
|
||||
c.vtrgid AS bin,
|
||||
CAST(ROUND(SUM(COALESCE(area * min_kg_per_ha, 0)) / 10000.0, 0) AS INTEGER) AS min_kg,
|
||||
CAST(ROUND(SUM(COALESCE(area * max_kg_per_ha, 0)) / 10000.0, 0) AS INTEGER) AS max_kg
|
||||
FROM area_commitment c, season s
|
||||
JOIN area_commitment_type t ON t.vtrgid = c.vtrgid
|
||||
WHERE (year_from IS NULL OR year_from <= s.year) AND
|
||||
(year_to IS NULL OR year_to >= s.year)
|
||||
GROUP BY s.year, c.mgnr, c.vtrgid
|
||||
ORDER BY s.year, c.mgnr, LENGTH(c.vtrgid) DESC, c.vtrgid;
|
||||
|
||||
CREATE VIEW v_stat_season AS
|
||||
SELECT year,
|
||||
SUM(weight) AS sum,
|
||||
|
79
sql/v01/31.create.bucket-view.sql
Normal file
79
sql/v01/31.create.bucket-view.sql
Normal file
@ -0,0 +1,79 @@
|
||||
|
||||
CREATE VIEW v_area_commitment_bucket_strict AS
|
||||
SELECT s.year, c.mgnr,
|
||||
t.sortid || COALESCE(a.attrid, '') AS bucket,
|
||||
t.sortid, a.attrid,
|
||||
CAST(ROUND(SUM(area) * COALESCE(t.min_kg_per_ha, 0) / 10000.0, 0) AS INTEGER) AS min_kg,
|
||||
CAST(ROUND(SUM(area) * COALESCE(a.max_kg_per_ha, s.max_kg_per_ha) / 10000.0, 0) AS INTEGER) AS max_kg,
|
||||
CAST(ROUND(SUM(area) * s.max_kg_per_ha / 10000.0, 0) AS INTEGER) AS upper_max_kg
|
||||
FROM season s, area_commitment c
|
||||
JOIN area_commitment_type t ON t.vtrgid = c.vtrgid
|
||||
LEFT JOIN wine_attribute a ON a.attrid = t.attrid
|
||||
WHERE (year_from IS NULL OR year_from <= s.year) AND
|
||||
(year_to IS NULL OR year_to >= s.year)
|
||||
GROUP BY s.year, c.mgnr, bucket
|
||||
ORDER BY s.year, c.mgnr, bucket;
|
||||
|
||||
CREATE VIEW v_area_commitment_bucket AS
|
||||
SELECT year, mgnr, bucket, min_kg, max_kg
|
||||
FROM v_area_commitment_bucket_strict
|
||||
WHERE attrid IS NOT NULL
|
||||
UNION ALL
|
||||
SELECT b.year, b.mgnr, b.sortid,
|
||||
SUM(b.min_kg) AS min_kg,
|
||||
SUM(b.upper_max_kg) AS max_kg
|
||||
FROM v_area_commitment_bucket_strict b
|
||||
LEFT JOIN wine_attribute a ON a.attrid = b.attrid
|
||||
WHERE a.strict IS NULL OR a.strict = FALSE
|
||||
GROUP BY b.year, b.mgnr, b.sortid
|
||||
ORDER BY year, mgnr, bucket;
|
||||
|
||||
|
||||
CREATE VIEW v_delivery_bucket_strict AS
|
||||
SELECT year, mgnr,
|
||||
sortid || IIF(min_quw, COALESCE(attrid, ''), '_') AS bucket,
|
||||
sortid, IIF(min_quw, attrid, NULL) AS attrid,
|
||||
SUM(weight) AS weight,
|
||||
min_quw
|
||||
FROM v_delivery
|
||||
GROUP BY year, mgnr, bucket
|
||||
ORDER BY year, mgnr, bucket;
|
||||
|
||||
CREATE VIEW v_delivery_bucket AS
|
||||
SELECT year, mgnr, bucket, weight
|
||||
FROM v_delivery_bucket_strict
|
||||
WHERE attrid IS NOT NULL OR NOT min_quw
|
||||
UNION ALL
|
||||
SELECT b.year, b.mgnr, b.sortid,
|
||||
SUM(b.weight) AS weight
|
||||
FROM v_delivery_bucket_strict b
|
||||
LEFT JOIN wine_attribute a ON a.attrid = b.attrid
|
||||
WHERE min_quw AND (a.strict IS NULL OR a.strict = FALSE)
|
||||
GROUP BY b.year, b.mgnr, b.sortid
|
||||
ORDER BY year, mgnr, bucket;
|
||||
|
||||
|
||||
CREATE VIEW v_payment_bucket_strict AS
|
||||
SELECT d.year, d.mgnr,
|
||||
d.sortid || b.discr AS bucket,
|
||||
d.sortid, IIF(b.discr IN ('', '_'), NULL, b.discr) AS attrid,
|
||||
SUM(b.value) AS weight,
|
||||
b.discr != '_' AS gebunden
|
||||
FROM v_delivery d
|
||||
LEFT JOIN delivery_part_bucket b ON (b.year, b.did, b.dpnr) = (d.year, d.did, d.dpnr)
|
||||
GROUP BY d.year, d.mgnr, bucket
|
||||
HAVING SUM(b.value) > 0
|
||||
ORDER BY d.year, d.mgnr, bucket;
|
||||
|
||||
CREATE VIEW v_payment_bucket AS
|
||||
SELECT year, mgnr, bucket, weight
|
||||
FROM v_payment_bucket_strict
|
||||
WHERE attrid IS NOT NULL OR NOT gebunden
|
||||
UNION ALL
|
||||
SELECT b.year, b.mgnr, b.sortid,
|
||||
SUM(b.weight) AS weight
|
||||
FROM v_payment_bucket_strict b
|
||||
LEFT JOIN wine_attribute a ON a.attrid = b.attrid
|
||||
WHERE gebunden AND (a.strict IS NULL OR a.strict = FALSE)
|
||||
GROUP BY b.year, b.mgnr, b.sortid
|
||||
ORDER BY year, mgnr, bucket;
|
@ -1,3 +1,3 @@
|
||||
|
||||
-- This value MUST NOT be changed while other connections are open!
|
||||
PRAGMA schema_version = 500;
|
||||
PRAGMA schema_version = 600;
|
||||
|
Reference in New Issue
Block a user