Two condition nested If not working
I am trying to color a field when days overdue (delta_days) is the below however with the below code, I get either red or green, never Yellow. The second else/if should be skipped when the number for example is 50 (meaning 50 days until due) however it doesn't work. For debugging if I change the Green If portion to = 10 instead of >10, it skips the code which indicts it is functioning.
red = 0 or less
yellow = 1 - 10
green = 11 and higher
let days_delta := 'Due Date' - today();
let display_color := "yellow";
if days_delta <= 0 then
display_color := "red"
else
if days_delta > 10 then
display_color := "green"
end
end;
styled(text(days_delta), display_color)
7 replies
-
let days_delta := 'Due Date' - today();
let display_color := if days_delta <= 0 then
"red"
else
if days_delta > 10 then "green" else "orange" end
end;
styled(text(days_delta), display_color) -
Thanks and your code had the same result as displayed by the screen capture. What I did do is convert the date into a UTC number format and did the If statements against that and it worked with the code I posted. That tells me the coding is correct, and there perhaps is a bug?
The working date change/code is the following:
let days_delta_actual := 'Due Date' - today();
let t_due_date := number('Due Date');
let t_today := number(today());
let days_delta := t_due_date - t_today;
let display_color := "yellow";
if days_delta >= 864000000 then
display_color := "green"
else
if days_delta <= 0 then
display_color := "red"
end
end;
styled(text(days_delta_actual), display_color)
-
Holly M said:
That tells me the coding is correct, and there perhaps is a bug?Hi Holly
Your code does not allow for the option of "yellow" to ever be the result. You have "yellow" outside your if statements so it will never be a result. Try:
if days_delta >= 864000000 then display_color := "green" else if days_delta <= 0 then display_color := "red" else display_color := "yellow" end end;
-
Thanks Fred and the code I pasted worked exactly as it should, and I tested it by changing the dates. You are correct that "yellow" is never addressed in the IF/ELSE statements so the initial Let statement which sets it to yellow would apply. Same result but I skipped the Else statement since it was already set to yellow.
-
I should have added that while both the coding approached worked to get to a "Yellow" with the 1-10 days, it ONLY worked when the date was converted a number for the logic. Try that logic with the original approach against the math using the Dates only partially worked.
-
I got focused on the wrong element of your code.
Yes subtracting date fields is a bit confusing in Ninox. In the background, Ninox uses milliseconds to keep track of date/time fields, as you accounted for.
You can use the days() function to give you a human understandable number.
let days_delta := days('Due Date',today()); let display_color := "yellow"; if days_delta <= 0 then display_color := "red" else if days_delta > 10 then display_color := "green" end end; styled(text(days_delta), display_color)
-
Thanks for the more understandable approach :-)
Content aside
- Status Answered
-
1
Likes
- 1 yr agoLast active
- 7Replies
- 91Views
-
3
Following