I have found that whether or not I have “Show Rule Debugger” enabled changes the outcome of a particular set of rules I want to use. This is very strange, surely the outcome of the rule processing should be consistent whether or not the rule debugger is in-use?
You can see this by starting with a blank database and adding the following Order Tags, Actions and Rules… (This is the contents of a rule export, just copy it to a text file and you should be able to import it).
You will also need to add mapping to the three OrderTag groups in this import and you will need to add a product to a menu.
{"AccountScreens":null,"AccountTransactionDocumentTypes":null,"AccountTransactionTypes":null,"AccountTypes":null,"Accounts":null,"Actions":[{"ActionType":"TagOrder","Name":"X Tag Order","Parameter":"[{\"Key\":\"OrderTagName\",\"Value\":\"[:Tag Name]\"},{\"Key\":\"OldOrderTagValue\",\"Value\":\"\"},{\"Key\":\"OrderTagValue\",\"Value\":\"[:Tag Value]\"},{\"Key\":\"OrderTagNote\",\"Value\":null},{\"Key\":\"OrderTagPrice\",\"Value\":null},{\"Key\":\"OrderTagRate\",\"Value\":null},{\"Key\":\"RequireSelection\",\"Value\":null}]","SortOrder":0},{"ActionType":"UntagOrder","Name":"X Untag Order","Parameter":"[{\"Key\":\"OrderTagName\",\"Value\":\"[:Tag Name]\"},{\"Key\":\"OrderTagValue\",\"Value\":\"[:Tag Value]\"},{\"Key\":\"RequireSelection\",\"Value\":null}]","SortOrder":0}],"AutoConfigurationTasks":null,"AutomationCommands":null,"CalculationSelectors":null,"CalculationTypes":null,"ChangePaymentTypes":null,"CustomReports":null,"Departments":null,"EntityScreens":null,"EntityTypes":null,"Numerators":null,"OrderTagGroups":[{"AddTagPriceToOrderPrice":false,"ButtonColor":null,"ButtonHeight":65,"ColumnCount":5,"FontSize":14,"FreeTagging":false,"GroupTag":null,"Hidden":false,"MaxSelectedItems":1,"MinSelectedItems":1,"Name":"DiveType","OrderTags":[{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"AM","Price":0.0000,"Rate":0.00,"SortOrder":10},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"MID","Price":0.0000,"Rate":0.00,"SortOrder":20},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"PM","Price":0.0000,"Rate":0.00,"SortOrder":30},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"Pool1","Price":0.0000,"Rate":0.00,"SortOrder":40},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"Pool2","Price":0.0000,"Rate":0.00,"SortOrder":50},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"Other1","Price":0.0000,"Rate":0.00,"SortOrder":60},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"Other2","Price":0.0000,"Rate":0.00,"SortOrder":70},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"Other3","Price":0.0000,"Rate":0.00,"SortOrder":80}],"Prefixes":"[]","SaveFreeTags":false,"SortOrder":10,"TaxFree":false},{"AddTagPriceToOrderPrice":false,"ButtonColor":null,"ButtonHeight":65,"ColumnCount":5,"FontSize":14,"FreeTagging":false,"GroupTag":null,"Hidden":false,"MaxSelectedItems":1,"MinSelectedItems":0,"Name":"Tank1","OrderTags":[{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"1Air","Price":0.0000,"Rate":0.00,"SortOrder":10},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"1Nitrox","Price":0.0000,"Rate":0.00,"SortOrder":20},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"1Low","Price":0.0000,"Rate":0.00,"SortOrder":30},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"1None","Price":0.0000,"Rate":0.00,"SortOrder":40}],"Prefixes":"[]","SaveFreeTags":false,"SortOrder":20,"TaxFree":false},{"AddTagPriceToOrderPrice":false,"ButtonColor":null,"ButtonHeight":65,"ColumnCount":5,"FontSize":14,"FreeTagging":false,"GroupTag":null,"Hidden":false,"MaxSelectedItems":1,"MinSelectedItems":0,"Name":"Tank2","OrderTags":[{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"2Air","Price":0.0000,"Rate":0.00,"SortOrder":10},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"2Nitrox","Price":0.0000,"Rate":0.00,"SortOrder":20},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"2Low","Price":0.0000,"Rate":0.00,"SortOrder":30},{"Color":null,"Description":null,"Filter":null,"Header":null,"MaxQuantity":1,"Name":"2None","Price":0.0000,"Rate":0.00,"SortOrder":40}],"Prefixes":"[]","SaveFreeTags":false,"SortOrder":30,"TaxFree":false}],"PaymentTypes":null,"PrintJobs":null,"PrinterTemplates":null,"Printers":null,"ProgramSettingValues":null,"Rules":[{"Actions":[{"ActionName":null,"CustomConstraint":null,"Name":"X Untag Order","ParameterValues":"Tag Name=Tank1`Tag Value={ORDER TAG:Tank1}","SortOrder":10},{"ActionName":null,"CustomConstraint":null,"Name":"X Untag Order","ParameterValues":"Tag Name=Tank2`Tag Value={ORDER TAG:Tank2}","SortOrder":20}],"AppRuleMaps":[{"DepartmentId":0,"TerminalId":0,"TicketTypeId":0,"UserRoleId":0}],"ConstraintMatch":0,"EventName":"OrderUntagged","Name":"X Reset tags","RuleConstraints":"[]","SortOrder":10,"Tags":null},{"Actions":[{"ActionName":null,"CustomConstraint":null,"Name":"X Tag Order","ParameterValues":"Tag Name=Tank1`Tag Value=1Low","SortOrder":10},{"ActionName":null,"CustomConstraint":null,"Name":"X Tag Order","ParameterValues":"Tag Name=Tank2`Tag Value=2None","SortOrder":20}],"AppRuleMaps":[{"DepartmentId":0,"TerminalId":0,"TicketTypeId":0,"UserRoleId":0}],"ConstraintMatch":0,"EventName":"OrderTagged","Name":"X 1 Tag pool tanks","RuleConstraints":"[{\"L\":\"OrderTagName\",\"N\":\"TSD0lAEHYV\",\"O\":\"Equal\",\"R\":\"DiveType\"},{\"L\":\"OrderTagValue\",\"N\":\"gRE8IuTlGc\",\"O\":\"Starts\",\"R\":\"Pool\"}]","SortOrder":20,"Tags":""},{"Actions":[{"ActionName":null,"CustomConstraint":null,"Name":"X Tag Order","ParameterValues":"Tag Name=Tank1`Tag Value=1Nitrox","SortOrder":10},{"ActionName":null,"CustomConstraint":null,"Name":"X Tag Order","ParameterValues":"Tag Name=Tank2`Tag Value=2Nitrox","SortOrder":20}],"AppRuleMaps":[{"DepartmentId":0,"TerminalId":0,"TicketTypeId":0,"UserRoleId":0}],"ConstraintMatch":0,"EventName":"OrderTagged","Name":"X 2 Tag nitrox tanks","RuleConstraints":"[{\"L\":\"OrderTagName\",\"N\":\"TSD0lAEHYV\",\"O\":\"Equal\",\"R\":\"DiveType\"},{\"L\":\"OrderTagValue\",\"N\":\"gRE8IuTlGc\",\"O\":\"Equal\",\"R\":\"AM\"}]","SortOrder":30,"Tags":""},{"Actions":[{"ActionName":null,"CustomConstraint":null,"Name":"X Tag Order","ParameterValues":"Tag Name=Tank2`Tag Value=2None","SortOrder":10}],"AppRuleMaps":[{"DepartmentId":0,"TerminalId":0,"TicketTypeId":0,"UserRoleId":0}],"ConstraintMatch":0,"EventName":"OrderTagged","Name":"X 3 Tag MID","RuleConstraints":"[{\"L\":\"OrderTagName\",\"N\":\"TSD0lAEHYV\",\"O\":\"Equal\",\"R\":\"DiveType\"},{\"L\":\"OrderTagValue\",\"N\":\"gRE8IuTlGc\",\"O\":\"Equal\",\"R\":\"MID\"}]","SortOrder":40,"Tags":""},{"Actions":[{"ActionName":null,"CustomConstraint":"'{ORDER TAG:Tank1}' == ''","Name":"X Tag Order","ParameterValues":"Tag Name=Tank1`Tag Value=1Air","SortOrder":10},{"ActionName":null,"CustomConstraint":"'{ORDER TAG:Tank2}' == ''","Name":"X Tag Order","ParameterValues":"Tag Name=Tank2`Tag Value=2Air","SortOrder":20}],"AppRuleMaps":[{"DepartmentId":0,"TerminalId":0,"TicketTypeId":0,"UserRoleId":0}],"ConstraintMatch":0,"EventName":"OrderTagged","Name":"X 9 Tag air","RuleConstraints":"[{\"L\":\"OrderTagName\",\"N\":\"TSD0lAEHYV\",\"O\":\"Equal\",\"R\":\"DiveType\"}]","SortOrder":50,"Tags":""}],"Scripts":null,"States":null,"TaskTypes":null,"TicketTagGroups":null,"TicketTypes":null,"Triggers":null}
Take a close look at the Tank1 and Tank2 tags that get selected when choosing either AM, MID or a Pool for the dive type…
Desired behavior (seen when Show Rule Debugger is enabled)
- AM - Tank1 and Tank2 are set to Nitrox
- MID - Tank1 set to Air and Tank2 set to None
- Pool - Tank1 set to Low and Tank2 set to None
- All other types - Tank1 and Tank2 set to Air
When the rules debugger is not enabled all tanks incorrectly get assigned as Air (apart from MID which gets an even more weird result that I don’t understand at all).
Any idea why enabling/disabling the rule debugger is changing the result of these rules?
When investigating, I noticed that if I use a “Show Message” to display the current value you the {ORDER TAG:Tank1} it always displays perfectly BUT it seems that it is evaluated incorrectly when used in a rule constraint (when rule debugging is disabled).
PS: I know there are probably easier ways to do this, but in reality I have many more dive types, tank types and logic to assign the correct tanks and using multiple sequentially firing rules is going to be by far the easiest way for me to maintain this logic, rather than a ton of rules with long string of rule constraints.