Billing: Fixes

This commit is contained in:
2024-01-23 01:16:53 +01:00
parent 1a492e4eff
commit 3931a4084c
6 changed files with 51 additions and 47 deletions

View File

@ -258,7 +258,7 @@ namespace Elwig.Helpers.Billing {
return curve;
}
protected static void CollapsePaymentData(JsonObject data) {
protected static void CollapsePaymentData(JsonObject data, IEnumerable<string> attributeVariants) {
Dictionary<string, List<string>> rev1 = [];
Dictionary<decimal, List<string>> rev2 = [];
foreach (var (k, v) in data) {
@ -274,18 +274,18 @@ namespace Elwig.Helpers.Billing {
}
if (!data.ContainsKey("default")) {
foreach (var (v, ks) in rev1) {
if (ks.Count >= data.Count / 2.0) {
if (ks.Count >= attributeVariants.Count() / 2.0) {
foreach (var k in ks) data.Remove(k);
data["default"] = v;
CollapsePaymentData(data);
CollapsePaymentData(data, attributeVariants);
return;
}
}
foreach (var (v, ks) in rev2) {
if (ks.Count >= data.Count / 2.0) {
if (ks.Count >= attributeVariants.Count() / 2.0) {
foreach (var k in ks) data.Remove(k);
data["default"] = v;
CollapsePaymentData(data);
CollapsePaymentData(data, attributeVariants);
return;
}
}
@ -297,7 +297,7 @@ namespace Elwig.Helpers.Billing {
.Distinct()
.ToList();
foreach (var idx in attributes) {
var len = data.Count(e => e.Key.EndsWith(idx));
var len = attributeVariants.Count(e => e.EndsWith(idx));
foreach (var (v, ks) in rev1) {
var myKs = ks.Where(k => k.EndsWith(idx)).ToList();
if (myKs.Count > 1 && myKs.Count >= len / 2.0) {
@ -315,7 +315,7 @@ namespace Elwig.Helpers.Billing {
}
}
public static JsonObject FromGraphEntries(IEnumerable<GraphEntry> graphEntries, BillingData? origData = null) {
public static JsonObject FromGraphEntries(IEnumerable<GraphEntry> graphEntries, BillingData? origData = null, IEnumerable<string>? attributeVariants = null) {
var payment = new JsonObject();
var qualityWei = new JsonObject();
var curves = new JsonArray();
@ -341,8 +341,8 @@ namespace Elwig.Helpers.Billing {
}
}
CollapsePaymentData(payment);
CollapsePaymentData(qualityWei);
CollapsePaymentData(payment, attributeVariants ?? payment.Select(e => e.Key).ToList());
CollapsePaymentData(qualityWei, attributeVariants ?? qualityWei.Select(e => e.Key).ToList());
var data = new JsonObject {
["mode"] = "elwig",