[#34] Third step of not using Bio as Attribute

This commit is contained in:
2024-02-20 21:16:06 +01:00
parent f8ee478a9e
commit 56fdf62c5c
7 changed files with 215 additions and 77 deletions

View File

@ -284,26 +284,27 @@ namespace Elwig.Helpers.Billing {
} }
} }
} }
var attributes = data var attributes = data
.Select(e => e.Key) .Select(e => e.Key)
.Where(k => k.Length > 3 && k.Contains('/')) .Where(k => !k.StartsWith('/') && k.Contains('/'))
.Select(k => k.Split('/')[1]) .Select(k => k.Split('/')[1])
.Distinct() .Distinct()
.ToList(); .ToList();
foreach (var idx in attributes) { foreach (var idx in attributes) {
var len = vaributes.Count(e => e.AttrId == idx); var len = vaributes.Count(e => e.AttrId == idx);
foreach (var (v, ks) in rev1) { foreach (var (v, ks) in rev1) {
var myKs = ks.Where(k => k.EndsWith(idx)).ToList(); var myKs = ks.Where(k => k.EndsWith($"/{idx}")).ToList();
if (myKs.Count > 1 && ((myKs.Count >= len * 0.5 && useDefault) || myKs.Count == len)) { if (myKs.Count > 1 && ((myKs.Count >= len * 0.5 && useDefault) || myKs.Count == len)) {
foreach (var k in myKs) data.Remove(k); foreach (var k in myKs) data.Remove(k);
data[$"/{idx}"] = v; data[(idx.StartsWith('-') ? "" : "/") + idx] = v;
} }
} }
foreach (var (v, ks) in rev2) { foreach (var (v, ks) in rev2) {
var myKs = ks.Where(k => k.EndsWith(idx)).ToList(); var myKs = ks.Where(k => k.EndsWith($"/{idx}")).ToList();
if (myKs.Count > 1 && ((myKs.Count >= len * 0.5 && useDefault) || myKs.Count == len)) { if (myKs.Count > 1 && ((myKs.Count >= len * 0.5 && useDefault) || myKs.Count == len)) {
foreach (var k in myKs) data.Remove(k); foreach (var k in myKs) data.Remove(k);
data[$"/{idx}"] = v; data[(idx.StartsWith('-') ? "" : "/") + idx] = v;
} }
} }
} }
@ -333,10 +334,12 @@ namespace Elwig.Helpers.Billing {
continue; continue;
} }
foreach (var c in entry.Vaributes) { foreach (var c in entry.Vaributes) {
var v = new RawVaribute(c.Variety!.SortId, c.Attribute?.AttrId ?? "", c.Cultivation?.CultId);
if (v.CultId == "") v.CultId = null;
if (entry.Abgewertet) {; if (entry.Abgewertet) {;
qualityWei[c.ToString()] = node.DeepClone(); qualityWei[v.ToString()] = node.DeepClone();
} else { } else {
payment[c.ToString()] = node.DeepClone(); payment[v.ToString()] = node.DeepClone();
} }
} }
} }

View File

@ -123,10 +123,10 @@ namespace Elwig.Helpers.Billing {
} }
protected async Task CalculatePrices(SqliteConnection cnx) { protected async Task CalculatePrices(SqliteConnection cnx) {
var parts = new List<(int Year, int DId, int DPNr, int BktNr, string SortId, string? AttrId, string Discr, int Value, double Oe, double Kmw, string QualId)>(); var parts = new List<(int Year, int DId, int DPNr, int BktNr, string SortId, string? AttrId, string? CultId, string Discr, int Value, double Oe, double Kmw, string QualId)>();
using (var cmd = cnx.CreateCommand()) { using (var cmd = cnx.CreateCommand()) {
cmd.CommandText = $""" cmd.CommandText = $"""
SELECT d.year, d.did, d.dpnr, b.bktnr, d.sortid, d.attrid, b.discr, b.value, d.oe, d.kmw, d.qualid SELECT d.year, d.did, d.dpnr, b.bktnr, d.sortid, d.attrid, d.cultid, b.discr, b.value, d.oe, d.kmw, d.qualid
FROM delivery_part_bucket b FROM delivery_part_bucket b
JOIN v_delivery d ON (d.year, d.did, d.dpnr) = (b.year, b.did, b.dpnr) JOIN v_delivery d ON (d.year, d.did, d.dpnr) = (b.year, b.did, b.dpnr)
WHERE b.year = {Year} WHERE b.year = {Year}
@ -135,8 +135,9 @@ namespace Elwig.Helpers.Billing {
while (await reader.ReadAsync()) { while (await reader.ReadAsync()) {
parts.Add(( parts.Add((
reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt32(3), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt32(3),
reader.GetString(4), reader.IsDBNull(5) ? null : reader.GetString(5), reader.GetString(6), reader.GetString(4), reader.IsDBNull(5) ? null : reader.GetString(5),
reader.GetInt32(7), reader.GetDouble(8), reader.GetDouble(9), reader.GetString(10) reader.IsDBNull(6) ? null : reader.GetString(6), reader.GetString(7),
reader.GetInt32(8), reader.GetDouble(9), reader.GetDouble(10), reader.GetString(11)
)); ));
} }
} }
@ -145,9 +146,9 @@ namespace Elwig.Helpers.Billing {
foreach (var part in parts) { foreach (var part in parts) {
var ungeb = part.Discr == "_"; var ungeb = part.Discr == "_";
var payAttrId = (part.Discr is "" or "_") ? null : part.Discr; var payAttrId = (part.Discr is "" or "_") ? null : part.Discr;
var attrId = part.AttrId == "B" ? "B" : payAttrId; // FIXME var attrId = payAttrId; // FIXME
var geb = !ungeb; // FIXME && payAttrId == part.AttrId; var geb = !ungeb; // FIXME && payAttrId == part.AttrId;
var price = Data.CalculatePrice(part.SortId, attrId, part.QualId, geb, part.Oe, part.Kmw); var price = Data.CalculatePrice(part.SortId, attrId, part.CultId, part.QualId, geb, part.Oe, part.Kmw);
var priceL = PaymentVariant.Season.DecToDb(price); var priceL = PaymentVariant.Season.DecToDb(price);
inserts.Add((part.Year, part.DId, part.DPNr, part.BktNr, priceL, priceL * part.Value)); inserts.Add((part.Year, part.DId, part.DPNr, part.BktNr, priceL, priceL * part.Value));
} }

View File

@ -45,8 +45,8 @@ namespace Elwig.Helpers.Billing {
return dict; return dict;
} }
public decimal CalculatePrice(string sortid, string? attrid, string qualid, bool gebunden, double oe, double kmw) { public decimal CalculatePrice(string sortid, string? attrid, string? cultid, string qualid, bool gebunden, double oe, double kmw) {
var curve = GetQualityCurve(qualid, sortid, attrid) ?? GetCurve(sortid, attrid); var curve = GetQualityCurve(qualid, sortid, attrid, cultid) ?? GetCurve(sortid, attrid, cultid);
return GetCurveValueAt((gebunden ? curve.Gebunden : null) ?? curve.Normal, curve.Mode == CurveMode.Oe ? oe : kmw); return GetCurveValueAt((gebunden ? curve.Gebunden : null) ?? curve.Normal, curve.Mode == CurveMode.Oe ? oe : kmw);
} }
@ -60,12 +60,12 @@ namespace Elwig.Helpers.Billing {
throw new InvalidOperationException(); throw new InvalidOperationException();
} }
protected Curve GetCurve(string sortid, string? attrid) { protected Curve GetCurve(string sortid, string? attrid, string? cultid) {
return PaymentData[new(sortid, attrid ?? "", null)]; return PaymentData[new(sortid, attrid ?? "", cultid ?? "")];
} }
protected Curve? GetQualityCurve(string qualid, string sortid, string? attrid) { protected Curve? GetQualityCurve(string qualid, string sortid, string? attrid, string? cultid) {
return QualityData.TryGetValue(new(qualid, sortid, attrid ?? "", null), out var curve) ? curve : null; return QualityData.TryGetValue(new(qualid, sortid, attrid ?? "", cultid ?? ""), out var curve) ? curve : null;
} }
} }
} }

View File

@ -364,7 +364,7 @@ namespace Elwig.Helpers {
var varieties = ctx.WineVarieties.Select(v => new RawVaribute(v.SortId, "", null)).ToList(); var varieties = ctx.WineVarieties.Select(v => new RawVaribute(v.SortId, "", null)).ToList();
var delivered = ctx.DeliveryParts var delivered = ctx.DeliveryParts
.Where(d => d.Year == year) .Where(d => d.Year == year)
.Select(d => new RawVaribute(d.SortId, d.AttrId ?? "", d.CultId)) .Select(d => new RawVaribute(d.SortId, d.AttrId ?? "", d.CultId ?? ""))
.Distinct() .Distinct()
.ToList(); .ToList();
return [.. (onlyDelivered ? delivered : delivered.Union(varieties)).Order()]; return [.. (onlyDelivered ? delivered : delivered.Union(varieties)).Order()];

View File

@ -9,11 +9,13 @@ namespace Tests.HelperTests {
private static readonly JsonSerializerOptions JsonOpts = new() { WriteIndented = true }; private static readonly JsonSerializerOptions JsonOpts = new() { WriteIndented = true };
private static readonly RawVaribute[] Vaributes = [ private static readonly RawVaribute[] Vaributes = [
new("GV/"), new("GV/D"), new("GV/K"), new("GV/S"), new("GV/Z"), new("GV/-"), new("GV/D-"), new("GV/K-"), new("GV/S-"), new("GV/Z-"),
new("WR/"), new("WR/S"), new("ZW/"), new("ZW/S"), new("ZW/Z")]; new("WR/-"), new("WR/S-"), new("ZW/-"), new("ZW/S-"), new("ZW/Z-"),
new("GV/-B"), new("WR/-B"), new("ZW/-B"), new("ZW/S-B"), new("GV/S-B"), new("GV/K-B")];
private static (string, string?) GetSortIdAttrId(string bucket) { private static (string, string?, string?) GetSortIdAttrId(string bucket) {
return (bucket[..2], bucket.Length > 2 ? bucket[2..] : null); var v = bucket.Split('-');
return (v[0][..2], v[0].Length > 2 ? v[0][2..] : null, v.Length > 1 ? v[1] : null);
} }
private static string GetQualId(double kmw) { private static string GetQualId(double kmw) {
@ -27,16 +29,16 @@ namespace Tests.HelperTests {
} }
private static void TestCalcOe(PaymentBillingData data, string bucket, double oe, decimal expected, string? qualid = null, bool geb = false) { private static void TestCalcOe(PaymentBillingData data, string bucket, double oe, decimal expected, string? qualid = null, bool geb = false) {
var (sortid, attrid) = GetSortIdAttrId(bucket); var (sortid, attrid, cultid) = GetSortIdAttrId(bucket);
var kmw = Utils.OeToKmw(oe); var kmw = Utils.OeToKmw(oe);
var v = data.CalculatePrice(sortid, attrid, qualid ?? GetQualId(kmw), geb, oe, kmw); var v = data.CalculatePrice(sortid, attrid, cultid, qualid ?? GetQualId(kmw), geb, oe, kmw);
Assert.That(Math.Round(v, 6), Is.EqualTo(expected)); Assert.That(Math.Round(v, 6), Is.EqualTo(expected));
} }
private static void TestCalcKmw(PaymentBillingData data, string bucket, double kmw, decimal expected, string? qualid = null, bool geb = false) { private static void TestCalcKmw(PaymentBillingData data, string bucket, double kmw, decimal expected, string? qualid = null, bool geb = false) {
var (sortid, attrid) = GetSortIdAttrId(bucket); var (sortid, attrid, cultid) = GetSortIdAttrId(bucket);
var oe = Utils.KmwToOe(kmw); var oe = Utils.KmwToOe(kmw);
var v = data.CalculatePrice(sortid, attrid, qualid ?? GetQualId(kmw), geb, oe, kmw); var v = data.CalculatePrice(sortid, attrid, cultid, qualid ?? GetQualId(kmw), geb, oe, kmw);
Assert.That(Math.Round(v, 6), Is.EqualTo(expected)); Assert.That(Math.Round(v, 6), Is.EqualTo(expected));
} }
@ -161,7 +163,40 @@ namespace Tests.HelperTests {
} }
[Test] [Test]
public void TestRead_05_QualityLevel() { public void TestRead_05_Cultivations() {
var data = PaymentBillingData.FromJson("""
{
"mode": "elwig",
"version": 1,
"payment": {
"default": 0.10,
"-B": 0.20,
"/S": 0.30
},
"curves": []
}
""", Vaributes);
Assert.Multiple(() => {
TestCalcOe(data, "WR", 73, 0.10m);
TestCalcOe(data, "WR-B", 73, 0.20m);
TestCalcOe(data, "WRS", 73, 0.30m);
TestCalcOe(data, "GV", 73, 0.10m);
TestCalcOe(data, "GV-B", 73, 0.20m);
TestCalcOe(data, "GVD", 73, 0.10m);
TestCalcOe(data, "GVK", 73, 0.10m);
TestCalcOe(data, "GVK-B", 73, 0.20m);
TestCalcOe(data, "GVS", 73, 0.30m);
TestCalcOe(data, "GVS-B", 73, 0.30m);
TestCalcOe(data, "GVZ", 73, 0.10m);
TestCalcOe(data, "ZW", 73, 0.10m);
TestCalcOe(data, "ZW-B", 73, 0.20m);
TestCalcOe(data, "ZWS", 73, 0.30m);
TestCalcOe(data, "ZWZ", 73, 0.10m);
});
}
[Test]
public void TestRead_06_QualityLevel() {
var data = PaymentBillingData.FromJson(""" var data = PaymentBillingData.FromJson("""
{ {
"mode": "elwig", "mode": "elwig",
@ -192,7 +227,7 @@ namespace Tests.HelperTests {
} }
[Test] [Test]
public void TestRead_06_ModeOeAndKmw() { public void TestRead_07_ModeOeAndKmw() {
var data = PaymentBillingData.FromJson(""" var data = PaymentBillingData.FromJson("""
{ {
"mode": "elwig", "mode": "elwig",
@ -234,7 +269,7 @@ namespace Tests.HelperTests {
} }
[Test] [Test]
public void TestRead_07_MultipleCurves() { public void TestRead_08_MultipleCurves() {
var data = PaymentBillingData.FromJson(""" var data = PaymentBillingData.FromJson("""
{ {
"mode": "elwig", "mode": "elwig",
@ -303,7 +338,7 @@ namespace Tests.HelperTests {
} }
[Test] [Test]
public void TestRead_08_WgMaster() { public void TestRead_09_WgMaster() {
var data = PaymentBillingData.FromJson(""" var data = PaymentBillingData.FromJson("""
{ {
"mode": "wgmaster", "mode": "wgmaster",
@ -346,6 +381,30 @@ namespace Tests.HelperTests {
}); });
} }
[Test]
public void TestRead_10_AttrubteAndCultivation() {
var data = PaymentBillingData.FromJson("""
{
"mode": "elwig",
"version": 1,
"payment": {
"default": 0.10,
"/S": 0.20,
"-B": 0.30,
"GV/S-B": 0.40
},
"curves": []
}
""", Vaributes);
Assert.Multiple(() => {
TestCalcOe(data, "GV", 73, 0.10m);
TestCalcOe(data, "GVS", 73, 0.20m);
TestCalcOe(data, "GV-B", 73, 0.30m);
TestCalcOe(data, "GVS-B", 73, 0.40m);
TestCalcOe(data, "ZWS-B", 73, 0.20m);
});
}
private static List<Varibute> GetSelection(IEnumerable<string> attVars) { private static List<Varibute> GetSelection(IEnumerable<string> attVars) {
return attVars.Select(s => new Varibute(new RawVaribute(s))).ToList(); return attVars.Select(s => new Varibute(new RawVaribute(s))).ToList();
} }
@ -373,7 +432,7 @@ namespace Tests.HelperTests {
List<GraphEntry> entries = [ List<GraphEntry> entries = [
new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.5m [73] = 0.5m
}, null), GetSelection(["GV/"])) }, null), GetSelection(["GV/-"]))
]; ];
var data = BillingData.FromGraphEntries(entries); var data = BillingData.FromGraphEntries(entries);
Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo(""" Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo("""
@ -392,7 +451,7 @@ namespace Tests.HelperTests {
new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.5m, [73] = 0.5m,
[83] = 1.0m [83] = 1.0m
}, null), GetSelection(["GV/"])) }, null), GetSelection(["GV/-"]))
]; ];
var data = BillingData.FromGraphEntries(entries); var data = BillingData.FromGraphEntries(entries);
Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo(""" Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo("""
@ -420,10 +479,10 @@ namespace Tests.HelperTests {
new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.5m, [73] = 0.5m,
[84] = 1.0m [84] = 1.0m
}, null), GetSelection(["GV/", "ZW/"])), }, null), GetSelection(["GV/-", "ZW/-"])),
new GraphEntry(10, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(10, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.75m, [73] = 0.75m,
}, null), GetSelection(["WR/"])) }, null), GetSelection(["WR/-"]))
]; ];
var data = BillingData.FromGraphEntries(entries); var data = BillingData.FromGraphEntries(entries);
Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo(""" Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo("""
@ -454,14 +513,14 @@ namespace Tests.HelperTests {
new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.5m, [73] = 0.5m,
[84] = 1.0m [84] = 1.0m
}, null), GetSelection(["GV/B", "ZW/B"])), }, null), GetSelection(["GV/K-", "ZW/K-"])),
new GraphEntry(2, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(2, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.75m, [73] = 0.75m,
}, null), GetSelection(["WR/", "BL/", "RR/", "FV/"])), }, null), GetSelection(["WR/-", "BL/-", "RR/-", "FV/-"])),
new GraphEntry(4, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { new GraphEntry(4, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.65m, [73] = 0.65m,
[84] = 1.2m [84] = 1.2m
}, null), GetSelection(["BP/", "SA/"])) }, null), GetSelection(["BP/-", "SA/-"]))
]; ];
var data = BillingData.FromGraphEntries(entries); var data = BillingData.FromGraphEntries(entries);
Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo(""" Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo("""
@ -472,7 +531,7 @@ namespace Tests.HelperTests {
"BP/": "curve:2", "BP/": "curve:2",
"SA/": "curve:2", "SA/": "curve:2",
"default": 0.75, "default": 0.75,
"/B": "curve:1" "/K": "curve:1"
}, },
"curves": [ "curves": [
{ {
@ -495,5 +554,85 @@ namespace Tests.HelperTests {
} }
""")); """));
} }
[Test]
public void TestWrite_06_Cultivation() {
List<GraphEntry> entries = [
new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.5m,
[84] = 1.0m
}, null), GetSelection(["GV/-B", "ZW/-B"])),
new GraphEntry(2, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.75m,
}, null), GetSelection(["WR/-", "BL/-", "RR/-", "FV/-"])),
new GraphEntry(4, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.65m,
[84] = 1.2m
}, null), GetSelection(["BP/-", "SA/-"]))
];
var data = BillingData.FromGraphEntries(entries);
Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo("""
{
"mode": "elwig",
"version": 1,
"payment": {
"BP/": "curve:2",
"SA/": "curve:2",
"default": 0.75,
"-B": "curve:1"
},
"curves": [
{
"id": 1,
"mode": "oe",
"data": {
"73oe": 0.5,
"84oe": 1
}
},
{
"id": 2,
"mode": "oe",
"data": {
"73oe": 0.65,
"84oe": 1.2
}
}
]
}
"""));
}
[Test]
public void TestWrite_07_AttributeAndCultivation() {
List<GraphEntry> entries = [
new GraphEntry(0, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.75m,
}, null), GetSelection(["GV/-", "ZW/-", "WR/-", "RR/-", "BL/-", "BP/-", "FV/-"])),
new GraphEntry(2, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.3m,
}, null), GetSelection(["GV/S-", "ZW/S-"])),
new GraphEntry(4, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.2m,
}, null), GetSelection(["GV/-B", "ZW/-B"])),
new GraphEntry(4, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
[73] = 0.4m,
}, null), GetSelection(["GV/S-B", "ZW/S-B"]))
];
var data = BillingData.FromGraphEntries(entries);
Assert.That(data.ToJsonString(JsonOpts), Is.EqualTo("""
{
"mode": "elwig",
"version": 1,
"payment": {
"default": 0.75,
"/S": 0.3,
"-B": 0.2,
"/S-B": 0.4
},
"curves": []
}
"""));
}
} }
} }

View File

@ -42,8 +42,8 @@ namespace Tests.HelperTests {
"mode": "elwig", "mode": "elwig",
"version": 1, "version": 1,
"payment": { "payment": {
"GV/": "curve:0", "GV": "curve:0",
"GV/B": "curve:1", "GV-B": "curve:1",
"GV/K": "curve:2" "GV/K": "curve:2"
}, },
"quality": {"WEI": 0.1}, "quality": {"WEI": 0.1},
@ -129,10 +129,9 @@ namespace Tests.HelperTests {
Assert.That(areaCom, Is.Empty); Assert.That(areaCom, Is.Empty);
var delivery = await GetMemberDeliveryBuckets(year, mgnr); var delivery = await GetMemberDeliveryBuckets(year, mgnr);
Assert.Multiple(() => { Assert.Multiple(() => {
Assert.That(delivery, Has.Count.EqualTo(4)); Assert.That(delivery, Has.Count.EqualTo(3));
Assert.That(delivery["GV"], Is.EqualTo(16_000)); Assert.That(delivery["GV"], Is.EqualTo(16_000));
Assert.That(delivery["GV_"], Is.EqualTo( 1_000)); Assert.That(delivery["GV_"], Is.EqualTo( 1_000));
Assert.That(delivery["GVB"], Is.EqualTo( 8_000));
Assert.That(delivery["GVK"], Is.EqualTo( 4_000)); Assert.That(delivery["GVK"], Is.EqualTo( 4_000));
}); });
@ -174,10 +173,9 @@ namespace Tests.HelperTests {
}); });
var delivery = await GetMemberDeliveryBuckets(year, mgnr); var delivery = await GetMemberDeliveryBuckets(year, mgnr);
Assert.Multiple(() => { Assert.Multiple(() => {
Assert.That(delivery, Has.Count.EqualTo(4)); Assert.That(delivery, Has.Count.EqualTo(3));
Assert.That(delivery["GV"], Is.EqualTo(16_000)); Assert.That(delivery["GV"], Is.EqualTo(16_000));
Assert.That(delivery["GV_"], Is.EqualTo( 1_000)); Assert.That(delivery["GV_"], Is.EqualTo( 1_000));
Assert.That(delivery["GVB"], Is.EqualTo( 8_000));
Assert.That(delivery["GVK"], Is.EqualTo( 4_000)); Assert.That(delivery["GVK"], Is.EqualTo( 4_000));
}); });
@ -195,17 +193,17 @@ namespace Tests.HelperTests {
Assert.Multiple(() => { Assert.Multiple(() => {
Assert.That(prices, Has.Count.EqualTo(10)); Assert.That(prices, Has.Count.EqualTo(10));
// Kabinett // Kabinett
Assert.That(prices[("20211001X001/1", "GV_")], Is.EqualTo((2_000, GV_ungeb))); Assert.That(prices[("20211001X001/1", "GV_")], Is.EqualTo(( 0, GV_ungeb)));
Assert.That(prices[("20211001X001/1", "GV")] , Is.EqualTo((2_000, GV_geb))); Assert.That(prices[("20211001X001/1", "GV")] , Is.EqualTo((4_000, GV_geb)));
// ohne Attribut // ohne Attribut
Assert.That(prices[("20211001X001/2", "GV_")], Is.EqualTo((4_000, GV_ungeb))); Assert.That(prices[("20211001X001/2", "GV_")], Is.EqualTo(( 0, GV_ungeb)));
Assert.That(prices[("20211001X001/2", "GV")], Is.EqualTo(( 0, GV_geb))); Assert.That(prices[("20211001X001/2", "GV")], Is.EqualTo((4_000, GV_geb)));
// Bio // Bio
Assert.That(prices[("20211001X002/1", "GV_")], Is.EqualTo(( 0, GVB_ungeb))); Assert.That(prices[("20211001X002/1", "GV_")], Is.EqualTo((4_000, GVB_ungeb)));
Assert.That(prices[("20211001X002/1", "GV")], Is.EqualTo((4_000, GVB_geb))); Assert.That(prices[("20211001X002/1", "GV")], Is.EqualTo(( 0, GVB_geb)));
// Bio // Bio
Assert.That(prices[("20211001X002/2", "GV_")], Is.EqualTo(( 0, GVB_ungeb))); Assert.That(prices[("20211001X002/2", "GV_")], Is.EqualTo((2_000, GVB_ungeb)));
Assert.That(prices[("20211001X002/2", "GV")], Is.EqualTo((4_000, GVB_geb))); Assert.That(prices[("20211001X002/2", "GV")], Is.EqualTo((2_000, GVB_geb)));
// ohne Attribut // ohne Attribut
Assert.That(prices[("20211001X003/1", "GV_")], Is.EqualTo(( 500, WEI))); Assert.That(prices[("20211001X003/1", "GV_")], Is.EqualTo(( 500, WEI)));
// ohne Attribut // ohne Attribut
@ -224,10 +222,9 @@ namespace Tests.HelperTests {
}); });
var delivery = await GetMemberDeliveryBuckets(year, mgnr); var delivery = await GetMemberDeliveryBuckets(year, mgnr);
Assert.Multiple(() => { Assert.Multiple(() => {
Assert.That(delivery, Has.Count.EqualTo(4)); Assert.That(delivery, Has.Count.EqualTo(3));
Assert.That(delivery["GV"], Is.EqualTo(16_000)); Assert.That(delivery["GV"], Is.EqualTo(16_000));
Assert.That(delivery["GV_"], Is.EqualTo( 1_000)); Assert.That(delivery["GV_"], Is.EqualTo( 1_000));
Assert.That(delivery["GVB"], Is.EqualTo( 8_000));
Assert.That(delivery["GVK"], Is.EqualTo( 4_000)); Assert.That(delivery["GVK"], Is.EqualTo( 4_000));
}); });

View File

@ -1,12 +1,10 @@
-- inserts for HelperTests.BillingTest -- inserts for HelperTests.BillingTest
INSERT INTO wine_cultivation (cultid, name, description) VALUES INSERT INTO wine_cultivation (cultid, name, description) VALUES
('N', 'Normal', NULL), ('KIP', 'KIP', 'Kontrollierte Integrierte Produktion'),
('K', 'KIP', 'Kontrollierte Integrierte Produktion'), ('B', 'Bio', 'AT-BIO-302');
('B', 'Org. Biologisch', 'Organisch Biologisch');
INSERT INTO wine_attribute (attrid, name, active, max_kg_per_ha, strict, fill_lower) VALUES INSERT INTO wine_attribute (attrid, name, active, max_kg_per_ha, strict, fill_lower) VALUES
('B', 'Bio', TRUE, NULL, FALSE, 0),
('K', 'Kabinett', TRUE, NULL, FALSE, 0), ('K', 'Kabinett', TRUE, NULL, FALSE, 0),
('D', 'DAC', TRUE, 7500, FALSE, 0), ('D', 'DAC', TRUE, 7500, FALSE, 0),
('S', 'Saft', TRUE, NULL, FALSE, 0), ('S', 'Saft', TRUE, NULL, FALSE, 0),
@ -25,9 +23,9 @@ INSERT INTO area_commitment_type (vtrgid, sortid, attrid, disc, min_kg_per_ha, p
('GVR', 'GV', 'R', NULL, 5000, 1000, 1000000, NULL); ('GVR', 'GV', 'R', NULL, 5000, 1000, 1000000, NULL);
INSERT INTO area_commitment (fbnr, mgnr, vtrgid, cultid, area, kgnr, gstnr, rdnr, year_from, year_to) VALUES INSERT INTO area_commitment (fbnr, mgnr, vtrgid, cultid, area, kgnr, gstnr, rdnr, year_from, year_to) VALUES
( 1, 101, 'GV', 'K', 10000, 06109, '123/4', NULL, 2000, 2019), ( 1, 101, 'GV', 'KIP', 10000, 06109, '123/4', NULL, 2000, 2019),
( 2, 101, 'GV', 'K', 10000, 06109, '123/5', NULL, 2025, 2030), ( 2, 101, 'GV', 'KIP', 10000, 06109, '123/5', NULL, 2025, 2030),
( 3, 101, 'GV', 'K', 10000, 06109, '123/6', NULL, 2021, 2031); ( 3, 101, 'GV', 'KIP', 10000, 06109, '123/6', NULL, 2021, 2031);
INSERT INTO season (year, currency, min_kg_per_bs, max_kg_per_bs, penalty_per_kg, penalty_amount, penalty_none, start_date, end_date) VALUES INSERT INTO season (year, currency, min_kg_per_bs, max_kg_per_bs, penalty_per_kg, penalty_amount, penalty_none, start_date, end_date) VALUES
(2020, 'EUR', 1000, 2000, NULL, NULL, NULL, NULL, NULL), (2020, 'EUR', 1000, 2000, NULL, NULL, NULL, NULL, NULL),
@ -42,13 +40,13 @@ INSERT INTO delivery (mgnr, year, did, date, time, zwstid, lnr) VALUES
(101, 2020, 1, '2020-10-01', NULL, 'X', 1), (101, 2020, 1, '2020-10-01', NULL, 'X', 1),
(101, 2020, 2, '2020-10-01', NULL, 'X', 2), (101, 2020, 2, '2020-10-01', NULL, 'X', 2),
(101, 2020, 3, '2020-10-01', NULL, 'X', 3); (101, 2020, 3, '2020-10-01', NULL, 'X', 3);
INSERT INTO delivery_part (year, did, dpnr, sortid, attrid, weight, kmw, qualid, hkid, kgnr, net_weight, manual_weighing, spl_check, scale_id, weighing_id, weighing_reason) VALUES INSERT INTO delivery_part (year, did, dpnr, sortid, attrid, cultid, weight, kmw, qualid, hkid, kgnr, net_weight, manual_weighing, spl_check, scale_id, weighing_id, weighing_reason) VALUES
(2020, 1, 1, 'GV', 'K', 4000, 17, 'KAB', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2020, 1, 1, 'GV', 'K', NULL, 4000, 17, 'KAB', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2020, 1, 2, 'GV', NULL, 4000, 16, 'QUW', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2020, 1, 2, 'GV', NULL, NULL, 4000, 16, 'QUW', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2020, 2, 1, 'GV', 'B', 4000, 15, 'QUW', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2020, 2, 1, 'GV', NULL, 'B', 4000, 15, 'QUW', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2020, 2, 2, 'GV', 'B', 4000, 16, 'QUW', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2020, 2, 2, 'GV', NULL, 'B', 4000, 16, 'QUW', 'WLNO', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2020, 3, 1, 'GV', NULL, 500, 15, 'WEI', 'OEST', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2020, 3, 1, 'GV', NULL, NULL, 500, 15, 'WEI', 'OEST', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2020, 3, 2, 'GV', NULL, 500, 14, 'LDW', 'WLXX', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL); (2020, 3, 2, 'GV', NULL, NULL, 500, 14, 'LDW', 'WLXX', 06109, TRUE, FALSE, FALSE, NULL, NULL, NULL);
INSERT INTO delivery_part_modifier (year, did, dpnr, modid) VALUES INSERT INTO delivery_part_modifier (year, did, dpnr, modid) VALUES
(2020, 1, 2, 'S'); (2020, 1, 2, 'S');
@ -57,10 +55,10 @@ INSERT INTO delivery (mgnr, year, did, date, time, zwstid, lnr) VALUES
(101, 2021, 1, '2021-10-01', NULL, 'X', 1), (101, 2021, 1, '2021-10-01', NULL, 'X', 1),
(101, 2021, 2, '2021-10-01', NULL, 'X', 2), (101, 2021, 2, '2021-10-01', NULL, 'X', 2),
(101, 2021, 3, '2021-10-01', NULL, 'X', 3); (101, 2021, 3, '2021-10-01', NULL, 'X', 3);
INSERT INTO delivery_part (year, did, dpnr, sortid, attrid, weight, kmw, qualid, hkid, kgnr, gebunden, net_weight, manual_weighing, spl_check, scale_id, weighing_id, weighing_reason) VALUES INSERT INTO delivery_part (year, did, dpnr, sortid, attrid, cultid, weight, kmw, qualid, hkid, kgnr, gebunden, net_weight, manual_weighing, spl_check, scale_id, weighing_id, weighing_reason) VALUES
(2021, 1, 1, 'GV', 'K', 4000, 17, 'KAB', 'WLNO', 06109, TRUE, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2021, 1, 1, 'GV', 'K', NULL, 4000, 17, 'KAB', 'WLNO', 06109, TRUE, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2021, 1, 2, 'GV', NULL, 4000, 16, 'QUW', 'WLNO', 06109, FALSE, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2021, 1, 2, 'GV', NULL, NULL, 4000, 16, 'QUW', 'WLNO', 06109, FALSE, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2021, 2, 1, 'GV', 'B', 4000, 15, 'QUW', 'WLNO', 06109, TRUE, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2021, 2, 1, 'GV', NULL, 'B', 4000, 15, 'QUW', 'WLNO', 06109, TRUE, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2021, 2, 2, 'GV', 'B', 4000, 16, 'QUW', 'WLNO', 06109, FALSE, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2021, 2, 2, 'GV', NULL, 'B', 4000, 16, 'QUW', 'WLNO', 06109, FALSE, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2021, 3, 1, 'GV', NULL, 500, 15, 'WEI', 'OEST', 06109, NULL, TRUE, FALSE, FALSE, NULL, NULL, NULL), (2021, 3, 1, 'GV', NULL, NULL, 500, 15, 'WEI', 'OEST', 06109, NULL, TRUE, FALSE, FALSE, NULL, NULL, NULL),
(2021, 3, 2, 'GV', NULL, 500, 14, 'LDW', 'WLXX', 06109, NULL, TRUE, FALSE, FALSE, NULL, NULL, NULL); (2021, 3, 2, 'GV', NULL, NULL, 500, 14, 'LDW', 'WLXX', 06109, NULL, TRUE, FALSE, FALSE, NULL, NULL, NULL);