CreditNote: Add member modifier display
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user