From 3a262d4d50e02143f2ab410c5d01a88d90727ff5 Mon Sep 17 00:00:00 2001 From: Vas <whiterocket@outlook.com> Date: Mon, 18 Jun 2018 20:32:13 +0300 Subject: [PATCH] fix several bugs --- src/js/DefaultRules.tw | 20 +++++++------------- src/js/rulesAssistant.tw | 5 +++-- src/js/rulesAssistantOptions.tw | 4 ++-- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/js/DefaultRules.tw b/src/js/DefaultRules.tw index 0a25efec15f..ad65d5fe555 100644 --- a/src/js/DefaultRules.tw +++ b/src/js/DefaultRules.tw @@ -8,9 +8,9 @@ window.DefaultRules = (function() { function DefaultRules(slave) { console.log("default ruling for", slave); - console.log("the passage is", State.passage); V = State.variables let rule = MergeRules(slave) + console.log("done merging", rule) if (Object.keys(rule).length === 0) return r // no rules apply @@ -57,18 +57,11 @@ window.DefaultRules = (function() { function MergeRules(slave) { // merge all rules applying on a slave into one big rule - let combinedRule = {} - V.defaultRules.forEach(rule => { - rule = Object.assign({}, rule.set) - - // skip inapplicable rules - if (!ruleApplied(slave, rule)) return - ProcessAssignments(rule) - - // merge the current rule (possibly modified by the code above) into the combined rule - combinedRule = mergeRules([combinedRule, rule]) - }) - return combinedRule + const rules = (V.defaultRules + .filter(rule => ruleAppliesP(rule.condition, slave)) + .map(rule => ProcessAssignments(slave, Object.assign({}, rule.set))) + ); + return mergeRules(rules); } function ProcessAssignments(slave, rule) { @@ -239,6 +232,7 @@ window.DefaultRules = (function() { r += `<span class="red">raWidgets missing case for assignment 'V.{rule.setAssignment}'</span>.` break } + return rule } function AssignJobToSlave(slave, rule) { diff --git a/src/js/rulesAssistant.tw b/src/js/rulesAssistant.tw index 986dda62393..b127b99335f 100644 --- a/src/js/rulesAssistant.tw +++ b/src/js/rulesAssistant.tw @@ -42,6 +42,7 @@ window.mergeRules = function mergeRules(rules) { combinedRule[key] = rule[key]; }); }); + return combinedRule; }; // return if a rule is applied on a slave @@ -189,8 +190,8 @@ window.ruleAppliesP = function ruleAppliesP(cond, slave) { // assignment / facility / special slaves / specific slaves check flag = flag && !(cond.excludeSpecialSlaves && isLeaderP(slave)) && - (cond.assignment.length > 0 && cond.assignment.includes(slave.assignment)) && - (cond.selectedSlaves.length > 0 && cond.selectedSlaves.includes(slave.ID)) && + (cond.assignment.length === 0 || cond.assignment.includes(slave.assignment)) && + (cond.selectedSlaves.length === 0 || cond.selectedSlaves.includes(slave.ID)) && !(cond.excludedSlaves.includes(slave.ID)); return flag; }; diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw index 2e74e2d10b4..800a5b35ddf 100644 --- a/src/js/rulesAssistantOptions.tw +++ b/src/js/rulesAssistantOptions.tw @@ -573,12 +573,12 @@ window.rulesAssistantOptions = (function() { } switch(value) { case true: - current_rule.condition.function = false; + current_rule.condition.function = true; current_rule.condition.data = {}; this.hide_custom_editor(); break; case false: - current_rule.condition.function = true; + current_rule.condition.function = false; current_rule.condition.data = {}; this.hide_custom_editor(); break; -- GitLab