From 90a92b8184fa49b1f5ca46d147af6c6e74218ec0 Mon Sep 17 00:00:00 2001 From: Abdelkouddous LHACHIMI Date: Tue, 5 May 2026 18:26:21 +0100 Subject: [PATCH] Strategy change new rule (Part2 - Fix) --- config/Endobest_Dashboard_Config.xlsx | Bin 85827 -> 85818 bytes eb_dashboard.py | 43 +++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/config/Endobest_Dashboard_Config.xlsx b/config/Endobest_Dashboard_Config.xlsx index d146a8fea522b312fb53f55133de41a53b57f76f..bfcc72da75b8bcc542e83b3734d6266585fd30b2 100644 GIT binary patch delta 17806 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� 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 diff --git a/eb_dashboard.py b/eb_dashboard.py index 92a1e4b..74d488e 100644 --- a/eb_dashboard.py +++ b/eb_dashboard.py @@ -766,7 +766,7 @@ def _execute_custom_function(function_name, args, output_inclusion): elif function_name == "if_then_else": # Unified conditional function # Syntax: ["operator", arg1, arg2_optional, result_if_true, result_if_false] - # Operators: "is_true", "is_false", "all_true", "any_true", "is_defined", "is_undefined", "all_defined", "==", "!=" + # Operators: "is_true", "is_false", "all_true", "any_true", "is_defined", "is_undefined", "all_defined", "==", "!=", ">", ">=", "<", "<=" # Sentinel propagation: "undefined" (inconnu) > "N/A" (non applicable) > vraie valeur. if not args or len(args) < 4: @@ -935,6 +935,47 @@ def _execute_custom_function(function_name, args, output_inclusion): result_if_true = resolve_value(args[3]) result_if_false = resolve_value(args[4]) + elif operator in (">", ">=", "<", "<="): + if len(args) != 5: + return f"$$$$ Argument Error: {operator} requires 5 arguments" + value1 = resolve_value(args[1]) + value2 = resolve_value(args[2]) + + v1_undef = value1 is None or value1 == "undefined" + v2_undef = value2 is None or value2 == "undefined" + status = dominant_no_value(v1_undef or v2_undef, + value1 == "N/A" or value2 == "N/A") + if status: + return status + + # Si l'un est numérique, tenter de convertir l'autre ; sinon comparer en string + cmp1, cmp2 = value1, value2 + if isinstance(value1, (int, float)) and not isinstance(value2, (int, float)): + try: + cmp2 = float(value2) + except (ValueError, TypeError): + cmp1 = str(value1) + elif isinstance(value2, (int, float)) and not isinstance(value1, (int, float)): + try: + cmp1 = float(value1) + except (ValueError, TypeError): + cmp2 = str(value2) + + try: + if operator == ">": + condition = (cmp1 > cmp2) + elif operator == ">=": + condition = (cmp1 >= cmp2) + elif operator == "<": + condition = (cmp1 < cmp2) + else: + condition = (cmp1 <= cmp2) + except TypeError: + return f"$$$$ Comparison Error: cannot compare {type(cmp1).__name__} and {type(cmp2).__name__}" + + result_if_true = resolve_value(args[3]) + result_if_false = resolve_value(args[4]) + else: return f"$$$$ Unknown Operator: {operator}"