Billing: differentiate between flag FillLowerBins
This commit is contained in:
@ -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)) {
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user