[#47] Billing: Add penalty per business share
All checks were successful
Test / Run tests (push) Successful in 2m2s
All checks were successful
Test / Run tests (push) Successful in 2m2s
This commit is contained in:
@ -354,6 +354,27 @@ namespace Elwig.Helpers {
|
||||
_memberUnderDelivery[year] = buckets;
|
||||
}
|
||||
|
||||
public async Task<Dictionary<int, long>> GetBusinessSharePenalties(int year) {
|
||||
using var cnx = await ConnectAsync();
|
||||
var dict = new Dictionary<int, long>();
|
||||
using var cmd = cnx.CreateCommand();
|
||||
cmd.CommandText = $"""
|
||||
SELECT mgnr, ROUND((
|
||||
COALESCE(-s.penalty_amount, 0) +
|
||||
COALESCE(-s.penalty_per_bs_amount * CEIL(CAST(-u.diff AS REAL) / s.min_kg_per_bs), 0) +
|
||||
COALESCE(u.diff * s.penalty_per_kg, 0)
|
||||
) / POW(10, s.precision - 2))
|
||||
FROM v_total_under_delivery u
|
||||
JOIN season s ON s.year = u.year
|
||||
WHERE s.year = {year} AND u.diff < 0
|
||||
""";
|
||||
using var reader = await cmd.ExecuteReaderAsync();
|
||||
while (await reader.ReadAsync()) {
|
||||
dict[reader.GetInt32(0)] = reader.GetInt64(1);
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, AreaComBucket>> GetMemberAreaCommitmentBuckets(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
if (!_memberAreaCommitmentBuckets.ContainsKey(year))
|
||||
await FetchMemberAreaCommitmentBuckets(year, cnx);
|
||||
|
Reference in New Issue
Block a user