This commit is contained in:
Michał Zieliski
2024-08-13 23:50:59 +02:00
parent 88f7ea8686
commit 98f2473faa
3 changed files with 245 additions and 3 deletions

View File

@@ -25,6 +25,7 @@ public class BaseCalc
{
return false;
}
if (!ResultCode.Substring(1, ResultCode.Length - 2).All(char.IsDigit))
{
return false;
@@ -57,12 +58,15 @@ public class BaseCalc
{
throw new Exception($"Record for code {code} not found.");
}
ingredients.Add(ingredient);
}
for (var i = 1; i <= 32; i++)
{
var formula = ingredients.Aggregate(Formula, (current, ingredient) => current.Replace($"[{ingredient.Code}]", ProcessHelper.GetValue(ingredient, i)?.ToString(CultureInfo.InvariantCulture)));
var formula = ingredients.Aggregate(Formula,
(current, ingredient) => current.Replace($"[{ingredient.Code}]",
ProcessHelper.GetValue(ingredient, i)?.ToString(CultureInfo.InvariantCulture)));
if (formula.Contains('['))
{
throw new Exception($"Not all placeholders were replaced. Value{i} [{formula}]");
@@ -71,6 +75,47 @@ public class BaseCalc
Entity expr = formula;
ProcessHelper.SetValue(result, i, (double)expr.EvalNumerical());
}
return result;
}
}
public Record CalculateT1(List<Record> records)
{
var resultCode = ResultCode;
{
var result = new Record
{
Id = Guid.NewGuid(),
Code = resultCode,
CreatedAt = DateTime.UtcNow,
ModifiedAt = DateTime.UtcNow
};
var codes = GetCodes();
var ingredients = new List<Record>();
foreach (var code in codes)
{
var ingredient = records.FirstOrDefault(r => r.Code == code);
if (ingredient == null)
{
throw new Exception($"Record for code {code} not found.");
}
ingredients.Add(ingredient);
}
var formula = ingredients.Aggregate(Formula,
(current, ingredient) => current.Replace($"[{ingredient.Code}]",
ProcessHelper.GetValue(ingredient, 32)?.ToString(CultureInfo.InvariantCulture)));
if (formula.Contains('['))
{
throw new Exception($"Not all placeholders were replaced. Value{1} [{formula}]");
}
Entity expr = formula;
ProcessHelper.SetValue(result, 32, (double)expr.EvalNumerical());
return result;
}
}
@@ -93,6 +138,7 @@ public class BaseCalc
var valueCode = Formula.Substring(startIndex + 1, endIndex - startIndex - 1);
codes.Add(valueCode);
}
return codes;
}
}