CreditNote: Add member modifier display

This commit is contained in:
2023-12-22 20:18:48 +01:00
parent c836b45920
commit 8368caf58a
6 changed files with 133 additions and 21 deletions

View File

@ -15,6 +15,7 @@ namespace Elwig.Helpers.Billing {
await DeleteInDb();
await CalculatePrices();
await CalculateModifiers();
await CalculateMemberModifiers();
}
protected async Task DeleteInDb() {
@ -33,6 +34,36 @@ namespace Elwig.Helpers.Billing {
}
}
protected async Task CalculateMemberModifiers() {
using var cnx = await AppDbContext.ConnectAsync();
if (App.Client.IsMatzen) {
var lastYears = 3;
var multiplier = 0.50;
var modName = "Treue%";
using var cmd = cnx.CreateCommand();
cmd.CommandText = $"""
INSERT INTO payment_member (year, avnr, mgnr, net_amount, mod_abs, mod_rel)
SELECT c.year, {AvNr}, s.mgnr, 0,
ROUND(s.sum * COALESCE(m.abs, 0)),
COALESCE(m.rel, 0)
FROM (SELECT {Year} AS year, mgnr,
ROUND(AVG(sum) * {multiplier}) AS baseline,
COUNT(*) = {lastYears} AND MIN(sum) > 0 AS allowed
FROM v_stat_member
WHERE year > {Year} - {lastYears}
GROUP BY mgnr
HAVING allowed) c
JOIN v_stat_member s ON (s.year, s.mgnr) = (c.year, c.mgnr)
LEFT JOIN modifier m ON m.year = c.year AND m.name LIKE '{modName}'
WHERE sum >= baseline
ON CONFLICT DO UPDATE
SET mod_abs = mod_abs + excluded.mod_abs,
mod_rel = mod_rel + excluded.mod_rel
""";
await cmd.ExecuteNonQueryAsync();
}
}
protected async Task CalculatePrices() {
using var cnx = await AppDbContext.ConnectAsync();
@ -81,7 +112,9 @@ namespace Elwig.Helpers.Billing {
LEFT JOIN delivery_part_modifier p ON (p.year, p.did, p.dpnr) = (d.year, d.did, d.dpnr)
LEFT JOIN modifier m ON m.modid = p.modid
WHERE d.year = {Year}
ON CONFLICT DO UPDATE SET mod_abs = mod_abs + excluded.mod_abs, mod_rel = mod_rel + excluded.mod_rel;
ON CONFLICT DO UPDATE
SET mod_abs = mod_abs + excluded.mod_abs,
mod_rel = mod_rel + excluded.mod_rel
""";
await cmd.ExecuteNonQueryAsync();
}