From bc578b212ee80c4fa7b8456dea19452fe13a88ff Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 22 Dec 2023 23:51:34 +0100 Subject: [PATCH] BillingVariant: Add Commit() and Revert() functions --- Elwig/Helpers/Billing/BillingVariant.cs | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/Elwig/Helpers/Billing/BillingVariant.cs b/Elwig/Helpers/Billing/BillingVariant.cs index 6caa57d..8abddfa 100644 --- a/Elwig/Helpers/Billing/BillingVariant.cs +++ b/Elwig/Helpers/Billing/BillingVariant.cs @@ -13,11 +13,70 @@ namespace Elwig.Helpers.Billing { public async Task Calculate() { await DeleteInDb(); + await SetCalcTime(); await CalculatePrices(); await CalculateModifiers(); await CalculateMemberModifiers(); } + public async Task Commit() { + await Revert(); + using var cnx = await AppDbContext.ConnectAsync(); + using (var cmd = cnx.CreateCommand()) { + // TODO modifiers and prev_modifiers + cmd.CommandText = $""" + INSERT INTO credit (year, tgnr, mgnr, avnr, net_amount, prev_net_amount, vat, modifiers, prev_modifiers) + SELECT s.year, + COALESCE(t.tgnr, 0) + ROW_NUMBER() OVER(ORDER BY m.mgnr) AS tgnr, + m.mgnr, + v.avnr, + ROUND(p.amount / POW(10, s.precision - 2)), + ROUND(lp.amount / POW(10, s.precision - 2)) AS prev_amount, + IIF(m.buchführend, s.vat_normal, s.vat_flatrate) AS vat, + NULL, + NULL + FROM season s + JOIN payment_variant v ON v.year = s.year + LEFT JOIN payment_variant l ON l.year = s.year + AND l.avnr = (SELECT avnr + FROM payment_variant + WHERE NOT test_variant + ORDER BY COALESCE(transfer_date, date) DESC, avnr DESC + LIMIT 1) + LEFT JOIN (SELECT year, MAX(tgnr) AS tgnr FROM credit GROUP BY year) t ON t.year = s.year + JOIN (SELECT DISTINCT year, mgnr FROM delivery) d ON d.year = s.year + JOIN member m ON m.mgnr = d.mgnr + 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) + WHERE s.year = {Year} AND v.avnr = {AvNr} + """; + await cmd.ExecuteNonQueryAsync(); + } + using (var cmd = cnx.CreateCommand()) { + cmd.CommandText = $"UPDATE payment_variant SET test_variant = FALSE WHERE (year, avnr) = ({Year}, {AvNr})"; + await cmd.ExecuteNonQueryAsync(); + } + } + + public async Task Revert() { + using var cnx = await AppDbContext.ConnectAsync(); + using (var cmd = cnx.CreateCommand()) { + cmd.CommandText = $"DELETE FROM credit WHERE (year, avnr) = ({Year}, {AvNr})"; + await cmd.ExecuteNonQueryAsync(); + } + using (var cmd = cnx.CreateCommand()) { + cmd.CommandText = $"UPDATE payment_variant SET test_variant = TRUE WHERE (year, avnr) = ({Year}, {AvNr})"; + await cmd.ExecuteNonQueryAsync(); + } + } + + protected async Task SetCalcTime() { + using var cnx = await AppDbContext.ConnectAsync(); + using var cmd = cnx.CreateCommand(); + cmd.CommandText = $"UPDATE payment_variant SET calc_time = UNIXEPOCH() WHERE (year, avnr) = ({Year}, {AvNr})"; + await cmd.ExecuteNonQueryAsync(); + } + protected async Task DeleteInDb() { using var cnx = await AppDbContext.ConnectAsync(); using (var cmd = cnx.CreateCommand()) { @@ -32,6 +91,10 @@ namespace Elwig.Helpers.Billing { cmd.CommandText = $"DELETE FROM payment_member WHERE (year, avnr) = ({Year}, {AvNr})"; await cmd.ExecuteNonQueryAsync(); } + using (var cmd = cnx.CreateCommand()) { + cmd.CommandText = $"UPDATE payment_variant SET calc_time = NULL WHERE (year, avnr) = ({Year}, {AvNr})"; + await cmd.ExecuteNonQueryAsync(); + } } protected async Task CalculateMemberModifiers() {