CreditNote: Display under deliveries of area commitments
This commit is contained in:
@ -14,6 +14,7 @@ using Elwig.Models.Dtos;
|
||||
namespace Elwig.Helpers {
|
||||
|
||||
public record struct AreaComBucket(int Area, int Obligation, int Right);
|
||||
public record struct UnderDelivery(int Weight, int Diff);
|
||||
public record struct MemberBucket(string Name, int Area, int Obligation, int Right, int Delivery, int DeliveryStrict, int Payment);
|
||||
|
||||
public class AppDbContext : DbContext {
|
||||
@ -64,10 +65,11 @@ namespace Elwig.Helpers {
|
||||
|
||||
public static string ConnectionString => $"Data Source=\"{App.Config.DatabaseFile}\"; Foreign Keys=True; Mode=ReadWrite; Cache=Default";
|
||||
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, AreaComBucket>>> _memberAreaCommitmentBuckets = new();
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberDeliveryBuckets = new();
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberDeliveryBucketsStrict = new();
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberPaymentBuckets = new();
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, AreaComBucket>>> _memberAreaCommitmentBuckets = [];
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberDeliveryBuckets = [];
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberDeliveryBucketsStrict = [];
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberPaymentBuckets = [];
|
||||
private readonly Dictionary<int, Dictionary<int, Dictionary<string, UnderDelivery>>> _memberUnderDelivery = [];
|
||||
|
||||
public AppDbContext() {
|
||||
if (App.Config.DatabaseLog != null) {
|
||||
@ -217,7 +219,7 @@ namespace Elwig.Helpers {
|
||||
while (await reader.ReadAsync()) {
|
||||
var mgnr = reader.GetInt32(0);
|
||||
var vtrgid = reader.GetString(1);
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = new();
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = [];
|
||||
buckets[mgnr][vtrgid] = new(reader.GetInt32(2), reader.GetInt32(3), reader.GetInt32(4));
|
||||
}
|
||||
}
|
||||
@ -235,7 +237,7 @@ namespace Elwig.Helpers {
|
||||
while (await reader.ReadAsync()) {
|
||||
var mgnr = reader.GetInt32(0);
|
||||
var bucket = reader.GetString(1);
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = new();
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = [];
|
||||
buckets[mgnr][bucket] = reader.GetInt32(2);
|
||||
}
|
||||
}
|
||||
@ -253,7 +255,7 @@ namespace Elwig.Helpers {
|
||||
while (await reader.ReadAsync()) {
|
||||
var mgnr = reader.GetInt32(0);
|
||||
var bucket = reader.GetString(1);
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = new();
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = [];
|
||||
buckets[mgnr][bucket] = reader.GetInt32(2);
|
||||
}
|
||||
}
|
||||
@ -271,7 +273,7 @@ namespace Elwig.Helpers {
|
||||
while (await reader.ReadAsync()) {
|
||||
var mgnr = reader.GetInt32(0);
|
||||
var bucket = reader.GetString(1);
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = new();
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = [];
|
||||
buckets[mgnr][bucket] = reader.GetInt32(2);
|
||||
}
|
||||
}
|
||||
@ -279,28 +281,52 @@ namespace Elwig.Helpers {
|
||||
_memberPaymentBuckets[year] = buckets;
|
||||
}
|
||||
|
||||
private async Task FetchMemberUnderDelivery(int year, SqliteConnection? cnx = null) {
|
||||
var ownCnx = cnx == null;
|
||||
cnx ??= await ConnectAsync();
|
||||
var buckets = new Dictionary<int, Dictionary<string, UnderDelivery>>();
|
||||
using (var cmd = cnx.CreateCommand()) {
|
||||
cmd.CommandText = $"SELECT mgnr, bucket, weight, diff FROM v_under_delivery WHERE year = {year}";
|
||||
using var reader = await cmd.ExecuteReaderAsync();
|
||||
while (await reader.ReadAsync()) {
|
||||
var mgnr = reader.GetInt32(0);
|
||||
var bucket = reader.GetString(1);
|
||||
if (!buckets.ContainsKey(mgnr)) buckets[mgnr] = [];
|
||||
buckets[mgnr][bucket] = new(reader.GetInt32(2), reader.GetInt32(3));
|
||||
}
|
||||
}
|
||||
if (ownCnx) await cnx.DisposeAsync();
|
||||
_memberUnderDelivery[year] = buckets;
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, AreaComBucket>> GetMemberAreaCommitmentBuckets(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
if (!_memberAreaCommitmentBuckets.ContainsKey(year))
|
||||
await FetchMemberAreaCommitmentBuckets(year, cnx);
|
||||
return _memberAreaCommitmentBuckets[year].GetValueOrDefault(mgnr, new());
|
||||
return _memberAreaCommitmentBuckets[year].GetValueOrDefault(mgnr, []);
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, int>> GetMemberDeliveryBuckets(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
if (!_memberDeliveryBuckets.ContainsKey(year))
|
||||
await FetchMemberDeliveryBuckets(year, cnx);
|
||||
return _memberDeliveryBuckets[year].GetValueOrDefault(mgnr, new());
|
||||
return _memberDeliveryBuckets[year].GetValueOrDefault(mgnr, []);
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, int>> GetMemberDeliveryBucketsStrict(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
if (!_memberDeliveryBucketsStrict.ContainsKey(year))
|
||||
await FetchMemberDeliveryBucketsStrict(year, cnx);
|
||||
return _memberDeliveryBucketsStrict[year].GetValueOrDefault(mgnr, new());
|
||||
return _memberDeliveryBucketsStrict[year].GetValueOrDefault(mgnr, []);
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, int>> GetMemberPaymentBuckets(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
if (!_memberPaymentBuckets.ContainsKey(year))
|
||||
await FetchMemberPaymentBuckets(year, cnx);
|
||||
return _memberPaymentBuckets[year].GetValueOrDefault(mgnr, new());
|
||||
return _memberPaymentBuckets[year].GetValueOrDefault(mgnr, []);
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, UnderDelivery>> GetMemberUnderDelivery(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
if (!_memberUnderDelivery.ContainsKey(year))
|
||||
await FetchMemberUnderDelivery(year, cnx);
|
||||
return _memberUnderDelivery[year].GetValueOrDefault(mgnr, []);
|
||||
}
|
||||
|
||||
public async Task<Dictionary<string, MemberBucket>> GetMemberBuckets(int year, int mgnr, SqliteConnection? cnx = null) {
|
||||
|
Reference in New Issue
Block a user