private bool CanExecuteRule(AppRule appRule, object dataObject)
 {
     if (string.IsNullOrEmpty(appRule.CustomConstraint)) return true;
     var expression = _settingService.ReplaceSettingValues(appRule.CustomConstraint);
     expression = ReplaceParameterValues(expression, dataObject);
     return _expressionService.Eval("result = " + expression, dataObject, true);
 }
Example #2
0
        public override void Up()
        {
            var dc = ApplicationContext as DbContext;

            if (dc != null)
            {
                var updateTicketStatusAction = dc.Set<AppAction>().SingleOrDefault(x => x.Name == Resources.UpdateTicketStatus);
                var updateMergedTicket = dc.Set<AppRule>().SingleOrDefault(x => x.Name == Resources.UpdateMergedTicketsState);
                if (updateTicketStatusAction != null)
                {
                    if (updateMergedTicket != null)
                    {
                        updateMergedTicket.Actions.Add(new ActionContainer(updateTicketStatusAction) { ParameterValues = string.Format("Status={0}", Resources.NewOrders) });
                    }

                    var ticketMovedRule = new AppRule { Name = Resources.TicketMovedRule, EventName = "TicketMoved" };
                    ticketMovedRule.Actions.Add(new ActionContainer(updateTicketStatusAction) { ParameterValues = string.Format("Status={0}", Resources.NewOrders) });
                    ticketMovedRule.AddRuleMap();
                    dc.Set<AppRule>().Add(ticketMovedRule);
                }
                dc.SaveChanges();
            }

            Create.Column("UsePlainSum").OnTable("Calculations").AsBoolean().WithDefaultValue(false);
            Create.Column("UsePlainSum").OnTable("CalculationTypes").AsBoolean().WithDefaultValue(false);
        }
Example #3
0
        public bool Satisfies(AppRule appRule, object dataParameter)
        {
            _dataObject = dataParameter.ToDynamic();

            if (!SatisfiesCustomConstraints(appRule, _dataObject)) return false;

            if (!string.IsNullOrEmpty(appRule.EventConstraints) && GetConditions(appRule).Any(DoesNotSatisfy))
            {
                return false;
            }

            return SatisfiesCustomConstraint(appRule.CustomConstraint, dataParameter);
        }
Example #4
0
 private bool SatisfiesCustomConstraints(AppRule appRule, object dataObject)
 {
     var cv = appRule.RuleConstraints;
     if (string.IsNullOrEmpty(cv)) return true;
     cv = _preprocessor.Process(cv, dataObject);
     var cvs = JsonHelper.Deserialize<List<RuleConstraintValue>>(cv);
     if (!cvs.Any()) return true;
     switch ((RuleConstraintMatch)appRule.ConstraintMatch)
     {
         case RuleConstraintMatch.MatchesAny: return cvs.Any(x => x.Satisfies(dataObject));
         case RuleConstraintMatch.MatchesAll: return cvs.All(x => x.Satisfies(dataObject));
         case RuleConstraintMatch.NotMatchesAny: return cvs.Any(x => !x.Satisfies(dataObject));
         case RuleConstraintMatch.NotMatchesAll: return cvs.All(x => !x.Satisfies(dataObject));
         default: return cvs.GroupBy(x => x.Left).All(x => x.Any(y => y.Satisfies(dataObject)));
     }
 }
Example #5
0
        public override void Up()
        {
            var dc = ApplicationContext as DbContext;

            var closeTicketAutomation = new AutomationCommand { Name = Resources.CloseTicket, ButtonHeader = Resources.Close, SortOrder = -1, Color = "#FFFF0000",FontSize = 40};
            closeTicketAutomation.AutomationCommandMaps.Add(new AutomationCommandMap { EnabledStates = string.Format("{0},{1},{2},{3},IsClosed", Resources.New, Resources.NewOrders, Resources.Unpaid, Resources.Locked), VisibleStates = "*", DisplayUnderTicket = true });
            dc.Set<AutomationCommand>().Add(closeTicketAutomation);

            var settleAutomation = new AutomationCommand { Name = Resources.Settle, ButtonHeader = Resources.Settle, SortOrder = -2 ,FontSize = 40};
            settleAutomation.AutomationCommandMaps.Add(new AutomationCommandMap { EnabledStates = "*", VisibleStates = "*", DisplayUnderTicket = true });
            dc.Set<AutomationCommand>().Add(settleAutomation);

            dc.SaveChanges();

            var displayPaymentScreenAction = new AppAction { ActionType = ActionNames.DisplayPaymentScreen, Name = Resources.DisplayPaymentScreen, Parameter = "", SortOrder = -1 };
            dc.Set<AppAction>().Add(displayPaymentScreenAction);

            var closeTicketAction = dc.Set<AppAction>().FirstOrDefault(x => x.ActionType == ActionNames.CloseActiveTicket);

            if (closeTicketAction == null)
            {
                closeTicketAction = new AppAction { ActionType = ActionNames.CloseActiveTicket, Name = Resources.CloseTicket, Parameter = "", SortOrder = -1 };
                dc.Set<AppAction>().Add(closeTicketAction);
            }
            dc.SaveChanges();

            var closeTicketRule = new AppRule { Name = string.Format(Resources.Rule_f, Resources.CloseTicket), EventName = "AutomationCommandExecuted", EventConstraints = "AutomationCommandName;=;" + Resources.CloseTicket, SortOrder = -1 };
            closeTicketRule.Actions.Add(new ActionContainer(closeTicketAction));
            closeTicketRule.AddRuleMap();
            dc.Set<AppRule>().Add(closeTicketRule);

            var settleTicketRule = new AppRule { Name = string.Format(Resources.Rule_f, Resources.Settle), EventName = "AutomationCommandExecuted", EventConstraints = "AutomationCommandName;=;" + Resources.Settle, SortOrder = -1 };
            settleTicketRule.Actions.Add(new ActionContainer(displayPaymentScreenAction));
            settleTicketRule.AddRuleMap();
            dc.Set<AppRule>().Add(settleTicketRule);

            dc.SaveChanges();
        }
        private bool SatisfiesConditions(AppRule appRule, object dataObject)
        {
            var conditions = appRule.EventConstraints.Split('#').Select(x => new RuleConstraint(x));

            var parameterNames = dataObject.GetType().GetProperties().Select(x => x.Name).ToList();

            foreach (var condition in conditions)
            {
                var parameterName = parameterNames.FirstOrDefault(condition.Name.Equals);

                if (!string.IsNullOrEmpty(parameterName))
                {
                    var property = dataObject.GetType().GetProperty(parameterName);
                    var parameterValue = property.GetValue(dataObject, null) ?? "";
                    if (!condition.ValueEquals(parameterValue)) return false;
                }
            }

            return true;
        }
        private bool SatisfiesConditions(AppRule appRule, object dataObject)
        {
            var conditions = appRule.EventConstraints.Split('#').Select(x => new RuleConstraint(x));

            var parameterNames = ((IDictionary<string, object>)dataObject).Keys;

            foreach (var condition in conditions)
            {
                var parameterName = parameterNames.FirstOrDefault(condition.Name.Equals);

                if (!string.IsNullOrEmpty(parameterName))
                {
                    var parameterValue = ((IDictionary<string, object>)dataObject)[parameterName];
                    if (condition.IsValueDifferent(parameterValue)) return false;
                }
            }

            return true;
        }
Example #8
0
 private static IEnumerable<RuleConstraint> GetConditions(AppRule appRule)
 {
     return appRule.EventConstraints.Split('#').Select(x => new RuleConstraint(x));
 }