execute static method
List<ProgramRuleAction>
execute({
- required Map<
String, DataValueObject> dataValueEntities, - required List<
ProgramRule> programRules, - required List<
ProgramRuleVariable> programRuleVariables,
Implementation
static List<ProgramRuleAction> execute(
{required Map<String, DataValueObject> dataValueEntities,
required List<ProgramRule> programRules,
required List<ProgramRuleVariable> programRuleVariables}) {
List<ProgramRuleAction> programRulesActions = [];
Map<String, dynamic> evaluationContext =
ProgramRuleEngine._getEvaluationContext(
dataValueEntities: dataValueEntities,
programRuleVariables: programRuleVariables);
programRules.forEach((programRule) {
String ruleConditionForEvaluation = programRule.condition;
// .replaceAll("#{", "")
// .replaceAll("A{", "")
// .replaceAll("}", "");
evaluationContext.keys.forEach((key) {
final value = evaluationContext[key];
ruleConditionForEvaluation = ruleConditionForEvaluation.replaceAll(
"#{" + key + "}", ProgramRuleEngine._parseRuleValue(value));
ruleConditionForEvaluation = ruleConditionForEvaluation.replaceAll(
"A{" + key + "}", ProgramRuleEngine._parseRuleValue(value));
});
// d2 functions
if (ruleConditionForEvaluation.contains('d2:')) {
ruleConditionForEvaluation =
dhisD2Functions(ruleConditionForEvaluation, {});
}
try {
Expression expression = Expression.parse(ruleConditionForEvaluation);
final evaluator = const ExpressionEvaluator();
var evaluationResult = evaluator.eval(expression, evaluationContext);
final newProgramRuleActions =
programRule.programRuleActions?.map((ruleAction) {
return ProgramRuleAction.fromJson({
...ruleAction.toJson(),
'programRuleActionType':
evaluationResult == true ? ruleAction.programRuleActionType : ""
});
}).toList();
programRulesActions = List.from([
...programRulesActions,
...(newProgramRuleActions as List<ProgramRuleAction>)
]);
} catch (e) {
final newProgramRuleActions =
programRule.programRuleActions?.map((ruleAction) {
return ProgramRuleAction.fromJson(
{...ruleAction.toJson(), 'programRuleActionType': ''});
}).toList();
programRulesActions = List.from([
...programRulesActions,
...(newProgramRuleActions as List<ProgramRuleAction>)
]);
}
});
return programRulesActions;
}