diff --git a/Elwig/Helpers/AppDbUpdater.cs b/Elwig/Helpers/AppDbUpdater.cs index 1ae2150..de4b797 100644 --- a/Elwig/Helpers/AppDbUpdater.cs +++ b/Elwig/Helpers/AppDbUpdater.cs @@ -9,7 +9,7 @@ namespace Elwig.Helpers { public static class AppDbUpdater { // Don't forget to update value in Tests/fetch-resources.bat! - public static readonly int RequiredSchemaVersion = 13; + public static readonly int RequiredSchemaVersion = 14; private static int VersionOffset = 0; diff --git a/Elwig/Helpers/Billing/BillingVariant.cs b/Elwig/Helpers/Billing/BillingVariant.cs index b913241..0d4842b 100644 --- a/Elwig/Helpers/Billing/BillingVariant.cs +++ b/Elwig/Helpers/Billing/BillingVariant.cs @@ -43,11 +43,10 @@ namespace Elwig.Helpers.Billing { ROUND(p.amount / POW(10, s.precision - 2)) AS net_amount, ROUND(lp.amount / POW(10, s.precision - 2)) AS prev_amount, IIF(m.buchführend, s.vat_normal, s.vat_flatrate) AS vat, - ROUND( - IIF({Data.ConsiderContractPenalties}, COALESCE(u.total_penalty, 0) / POW(10, 4 - 2), 0) + - IIF({Data.ConsiderTotalPenalty}, COALESCE(b.total_penalty, 0), 0) + - IIF({Data.ConsiderAutoBusinessShares}, -COALESCE(a.business_shares * s.bs_value, 0), 0) / POW(10, s.precision - 2) - ) AS modifiers, + ROUND(IIF({Data.ConsiderContractPenalties}, COALESCE(u.total_penalty, 0), 0) / POW(10, 4 - 2)) + + ROUND(IIF({Data.ConsiderTotalPenalty}, COALESCE(b.total_penalty, 0), 0) / POW(10, s.precision - 2)) + + ROUND(IIF({Data.ConsiderAutoBusinessShares}, -COALESCE(a.total_amount, 0), 0) / POW(10, s.precision - 2)) + AS modifiers, lc.modifiers AS prev_modifiers FROM season s JOIN payment_variant v ON v.year = s.year @@ -63,26 +62,9 @@ namespace Elwig.Helpers.Billing { LEFT JOIN payment_member lp ON (lp.year, lp.avnr, lp.mgnr) = (l.year, l.avnr, m.mgnr) LEFT JOIN payment_member p ON (p.year, p.avnr, p.mgnr) = (v.year, v.avnr, m.mgnr) LEFT JOIN credit lc ON (lc.year, lc.avnr, lc.mgnr) = (l.year, l.avnr, m.mgnr) - LEFT JOIN (SELECT year, mgnr, - SUM(COALESCE(IIF(u.weight = 0, -t.penalty_none, 0), 0) + - COALESCE(IIF(u.diff < 0, -t.penalty_amount, 0), 0) + - COALESCE(u.diff * t.penalty_per_kg, 0)) AS total_penalty - FROM v_under_delivery u - JOIN area_commitment_type t ON t.vtrgid = u.bucket - GROUP BY year, mgnr) u ON (u.year, u.mgnr) = (s.year, m.mgnr) - LEFT JOIN (SELECT s.year, u.mgnr, - (COALESCE(IIF(u.weight = 0, -s.penalty_none, 0), 0) + - COALESCE(IIF(u.diff < 0, -s.penalty_amount, 0), 0) + - COALESCE(u.diff * s.penalty_per_kg, 0) - ) / POW(10, s.precision - 2) AS total_penalty - FROM v_total_under_delivery u - JOIN season s ON s.year = u.year - WHERE u.diff < 0) b ON (b.year, b.mgnr) = (s.year, m.mgnr) - LEFT JOIN (SELECT h.mgnr, h.business_shares - FROM member_history h - WHERE type = 'auto' AND - date >= '{Year}-06-01' AND - date < '{Year + 1}-06-01') a ON a.mgnr = m.mgnr + LEFT JOIN v_penalty_area_commitments u ON (u.year, u.mgnr) = (s.year, m.mgnr) + LEFT JOIN v_penalty_business_shares b ON (b.year, b.mgnr) = (s.year, m.mgnr) + LEFT JOIN v_auto_business_shares a ON (a.year, a.mgnr) = (s.year, m.mgnr) WHERE s.year = {Year} AND v.avnr = {AvNr}; UPDATE payment_variant SET test_variant = FALSE WHERE (year, avnr) = ({Year}, {AvNr}); diff --git a/Elwig/Resources/Sql/12-13.sql b/Elwig/Resources/Sql/12-13.sql index a21b477..17704c7 100644 --- a/Elwig/Resources/Sql/12-13.sql +++ b/Elwig/Resources/Sql/12-13.sql @@ -1,4 +1,4 @@ --- schema version 11 to 12 +-- schema version 12 to 13 ALTER TABLE season ADD COLUMN bs_value INTEGER; diff --git a/Elwig/Resources/Sql/13-14.sql b/Elwig/Resources/Sql/13-14.sql new file mode 100644 index 0000000..c42e31a --- /dev/null +++ b/Elwig/Resources/Sql/13-14.sql @@ -0,0 +1,33 @@ +-- schema version 13 to 14 + +CREATE VIEW v_penalty_area_commitments AS +SELECT year, mgnr, + SUM(COALESCE(IIF(u.weight = 0, -t.penalty_none, 0), 0) + + COALESCE(IIF(u.diff < 0, -t.penalty_amount, 0), 0) + + COALESCE(u.diff * t.penalty_per_kg, 0) + ) AS total_penalty +FROM v_under_delivery u + JOIN area_commitment_type t ON t.vtrgid = u.bucket +GROUP BY year, mgnr +HAVING total_penalty < 0 +ORDER BY year, mgnr; + +CREATE VIEW v_penalty_business_shares AS +SELECT s.year, u.mgnr, + (COALESCE(IIF(u.weight = 0, -s.penalty_none, 0), 0) + + COALESCE(IIF(u.diff < 0, -s.penalty_amount, 0), 0) + + COALESCE(u.diff * s.penalty_per_kg, 0) + ) AS total_penalty +FROM v_total_under_delivery u + JOIN season s ON s.year = u.year +WHERE u.diff < 0 AND total_penalty < 0 +ORDER BY s.year, u.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;