Billing: differentiate between flag FillLowerBins

This commit is contained in:
2023-10-15 01:09:55 +02:00
parent 5657a8f90a
commit 62bf425313
2 changed files with 7 additions and 5 deletions

View File

@ -43,6 +43,7 @@ namespace Elwig.Helpers.Billing {
} }
public async Task CalculateBins() { public async Task CalculateBins() {
var forcedAttr = Context.WineAttributes.Where(a => !a.FillLowerBins).Select(a => a.AttrId).ToArray();
using var cnx = await AppDbContext.ConnectAsync(); using var cnx = await AppDbContext.ConnectAsync();
var memberOblRig = await GetMemberRightsObligations(cnx, Year); var memberOblRig = await GetMemberRightsObligations(cnx, Year);
var inserts = new List<(int, int, int, int, int, int, int)>(); var inserts = new List<(int, int, int, int, int, int, int)>();
@ -84,7 +85,7 @@ namespace Elwig.Helpers.Billing {
int w = weight; int w = weight;
int[] b = new int[4]; int[] b = new int[4];
foreach (var p in Utils.Permutate(attributes)) { foreach (var p in Utils.Permutate(attributes, attributes.Intersect(forcedAttr))) {
var c = p.Count(); var c = p.Count();
var key = sortid + string.Join("", p); var key = sortid + string.Join("", p);
if (rights.ContainsKey(key)) { if (rights.ContainsKey(key)) {

View File

@ -327,13 +327,14 @@ namespace Elwig.Helpers {
} }
} }
public static IEnumerable<IEnumerable<T>> Permutate<T>(IEnumerable<T> input) { public static IEnumerable<IEnumerable<T>> Permutate<T>(IEnumerable<T> input, IEnumerable<T>? forced = null) {
List<IEnumerable<T>> output = new(); HashSet<IEnumerable<T>> output = new();
for (int i = 0; i < Math.Pow(2, input.Count()); i++) { for (int i = 0; i < Math.Pow(2, input.Count()); i++) {
List<T> t = new(); List<T> t = new();
for (int j = 0; j < 30; j++) { for (int j = 0; j < 30; j++) {
if ((i & (1 << j)) != 0) { var e = input.ElementAtOrDefault(j);
t.Add(input.ElementAt(j)); if (e != null && ((forced?.Contains(e) ?? false) || (i & (1 << j)) != 0)) {
t.Add(e);
} }
} }
output.Add(t); output.Add(t);