added sum and round filters

This commit is contained in:
BroodjeAap 2022-09-29 18:01:47 +00:00
parent 9945cba323
commit a75cdaf916
3 changed files with 158 additions and 9 deletions

View file

@ -75,6 +75,10 @@ func getFilterResult(filter *Filter) {
case filter.Type == "math":
{
switch {
case filter.Var1 == "sum":
{
getFilterResultSum(filter)
}
case filter.Var1 == "min":
{
getFilterResultMin(filter)
@ -91,6 +95,10 @@ func getFilterResult(filter *Filter) {
{
getFilterResultCount(filter)
}
case filter.Var1 == "round":
{
getFilterResultRound(filter)
}
}
}
@ -277,6 +285,18 @@ func getFilterResultSubstring(filter *Filter) {
}
}
func getFilterResultSum(filter *Filter) {
var sum float64 = 0.0
for _, parent := range filter.Parents {
for _, result := range parent.Results {
if number, err := strconv.ParseFloat(result, 64); err == nil {
sum += number
}
}
}
filter.Results = append(filter.Results, fmt.Sprintf("%f", sum))
}
func getFilterResultMin(filter *Filter) {
var min = math.MaxFloat64
var setMin = false
@ -334,6 +354,35 @@ func getFilterResultCount(filter *Filter) {
for _, parent := range filter.Parents {
count += len(parent.Children)
}
log.Println(fmt.Sprintf("%d", count))
filter.Results = append(filter.Results, fmt.Sprintf("%d", count))
}
// https://gosamples.dev/round-float/
func roundFloat(val float64, precision uint) float64 {
if precision == 0 {
math.Round(val)
}
ratio := math.Pow(10, float64(precision))
return math.Round(val*ratio) / ratio
}
func getFilterResultRound(filter *Filter) {
var decimals int64 = 0
if filter.Var2 != nil {
d, err := strconv.ParseInt(*filter.Var2, 10, 32)
if err != nil {
decimals = 0
} else {
decimals = d
}
}
for _, parent := range filter.Parents {
for _, result := range parent.Results {
if number, err := strconv.ParseFloat(result, 64); err == nil {
rounded := roundFloat(number, uint(decimals))
filter.Results = append(filter.Results, fmt.Sprintf("%.f", rounded))
}
}
}
}

View file

@ -282,6 +282,10 @@ function onTypeChange(node) {
mathSelect.name = "var1";
mathSelect.id = "var1Input";
mathSelect.classList.add("form-control");
var mathOptionSum = document.createElement("option");
mathOptionSum.value = "sum";
mathOptionSum.innerHTML = "Sum";
mathSelect.appendChild(mathOptionSum);
var mathOptionMin = document.createElement("option");
mathOptionMin.value = "min";
mathOptionMin.innerHTML = "Min";
@ -298,17 +302,33 @@ function onTypeChange(node) {
mathOptionCount.value = "count";
mathOptionCount.innerHTML = "Count";
mathSelect.appendChild(mathOptionCount);
var mathOptionRound = document.createElement("option");
mathOptionRound.value = "round";
mathOptionRound.innerHTML = "Round";
mathSelect.appendChild(mathOptionRound);
var1Label.innerHTML = "Function";
var1Div.appendChild(mathSelect);
mathSelect.value = var1Value;
if (var1Value == "") {
mathSelect.value = "min";
}
else {
mathSelect.value = var1Value;
}
mathSelect.onchange = function () { onMathChange(node); };
var var2Input = document.createElement("input");
var2Input.name = "var2";
var2Input.id = "var2Input";
var2Input.value = var2Value;
var2Input.classList.add("form-control");
var2Input.disabled = true;
var2Input.placeholder = "";
var2Label.innerHTML = "-";
if (mathSelect.value == "round") {
var2Input.disabled = false;
var2Label.innerHTML = "Decimals";
}
else {
var2Input.placeholder = "";
var2Input.disabled = true;
var2Label.innerHTML = "-";
}
var2Div.appendChild(var2Input);
var var3Input = document.createElement("input");
var3Input.name = "var3";
@ -323,7 +343,37 @@ function onTypeChange(node) {
}
}
}
function onMathChange(node) {
if (node === void 0) { node = null; }
var var1Input = document.getElementById("var1Input");
var var1Label = document.getElementById("var1Label");
var var2Input = document.getElementById("var2Input");
var var2Label = document.getElementById("var2Label");
var var3Input = document.getElementById("var3Input");
var var3Label = document.getElementById("var3Label");
var var2Value = "";
var var3Value = "";
if (node != null) {
// @ts-ignore
var2Value = node.meta.var2;
// @ts-ignore
var3Value = node.meta.var3;
}
if (var1Input.value == "round") {
var2Input.disabled = false;
var2Input.type = "number";
var2Input.value = var2Value;
var2Label.innerHTML = "Decimals";
}
else {
var2Input.disabled = true;
var2Input.type = "text";
var2Input.value = "";
var2Label.innerHTML = "-";
}
}
function onSubmitNewFilter() {
console.log("TEST");
var nameInput = document.getElementById("nameInput");
var name = nameInput.value;
var selectType = document.getElementById("typeInput");

View file

@ -271,6 +271,10 @@ function onTypeChange(node: DiagramNode | null = null){
mathSelect.name = "var1";
mathSelect.id = "var1Input";
mathSelect.classList.add("form-control");
let mathOptionSum = document.createElement("option");
mathOptionSum.value = "sum"
mathOptionSum.innerHTML = "Sum";
mathSelect.appendChild(mathOptionSum);
let mathOptionMin = document.createElement("option");
mathOptionMin.value = "min"
mathOptionMin.innerHTML = "Min";
@ -287,18 +291,32 @@ function onTypeChange(node: DiagramNode | null = null){
mathOptionCount.value = "count";
mathOptionCount.innerHTML = "Count";
mathSelect.appendChild(mathOptionCount);
let mathOptionRound = document.createElement("option")
mathOptionRound.value = "round";
mathOptionRound.innerHTML = "Round";
mathSelect.appendChild(mathOptionRound);
var1Label.innerHTML = "Function";
var1Div.appendChild(mathSelect);
mathSelect.value = var1Value;
if (var1Value == ""){
mathSelect.value = "min";
} else {
mathSelect.value = var1Value;
}
mathSelect.onchange = function() {onMathChange(node)}
let var2Input = document.createElement("input");
var2Input.name = "var2";
var2Input.id = "var2Input";
var2Input.value = var2Value;
var2Input.classList.add("form-control")
var2Input.disabled = true;
var2Input.placeholder = ""
var2Label.innerHTML = "-";
if (mathSelect.value == "round"){
var2Input.disabled = false;
var2Label.innerHTML = "Decimals";
} else {
var2Input.placeholder = ""
var2Input.disabled = true;
var2Label.innerHTML = "-";
}
var2Div.appendChild(var2Input);
let var3Input = document.createElement("input");
@ -315,7 +333,39 @@ function onTypeChange(node: DiagramNode | null = null){
}
}
function onMathChange(node: DiagramNode | null = null){
let var1Input = document.getElementById("var1Input") as HTMLSelectElement;
let var1Label = document.getElementById("var1Label") as HTMLLabelElement;
let var2Input = document.getElementById("var2Input") as HTMLInputElement;
let var2Label = document.getElementById("var2Label") as HTMLLabelElement;
let var3Input = document.getElementById("var3Input") as HTMLInputElement;
let var3Label = document.getElementById("var3Label") as HTMLLabelElement;
let var2Value = "";
let var3Value = "";
if (node != null){
// @ts-ignore
var2Value = node.meta.var2;
// @ts-ignore
var3Value = node.meta.var3;
}
if (var1Input.value == "round"){
var2Input.disabled = false;
var2Input.type = "number";
var2Input.value = var2Value;
var2Label.innerHTML = "Decimals";
} else {
var2Input.disabled = true;
var2Input.type = "text";
var2Input.value = "";
var2Label.innerHTML = "-";
}
}
function onSubmitNewFilter(){
console.log("TEST")
let nameInput = document.getElementById("nameInput") as HTMLInputElement;
let name = nameInput.value;
let selectType = document.getElementById("typeInput") as HTMLSelectElement;