Пример #1
0
        public BudgetCalculatorEquation CreateCopy()
        {
            var copy = new BudgetCalculatorEquation
            {
                Id        = this.Id,
                Name      = this.Name,
                IsVisible = this.IsVisible,
                Position  = this.Position,
            };

            Items.ForEach(x => copy.Items.Add(x.CreateCopy()));

            return(copy);
        }
 private BudgetEquationWizardVM()
 {
     _currentPageIndex = 0;
     _equation = new BudgetCalculatorEquation();
     InnerEquationList = new List<BudgetCalculatorItem>();
 }
        public void Clear(BudgetCalculatorEquation equation = null)
        {
            _currentPageIndex = 0;
            InnerEquationList.Clear();
            if (equation == null)
            {
                _equation = new BudgetCalculatorEquation();
            }
            else
            {
                _equation = equation;
                InnerEquationList.AddRange(equation.Items);
            }

            RefreshCalculations();
            CurrentItem = Items.FirstOrDefault();
            Refresh();
        }
 public void AttachEvaluator(BudgetCalculatorEquation equation)
 {
     equation.Evaluator = () => Calculate(equation);
     equation.Items.ForEach(x => AttachEvaluator(x));
 }
 public void UpdateForeignDescriptions(BudgetCalculatorEquation equation)
 {
     foreach (var item in equation.Items)
     {
         switch (item.ValueType)
         {
             case CalculatorValueType.CalculatorEquationValue:
                 var eq = CachedService.GetAllEquations().FirstOrDefault(x => x.Id == item.ForeignId);
                 if (eq != null)
                 {
                     item.ForeignDescription = eq.Name;
                 }
                 break;
             case CalculatorValueType.BudgetExpensesValueOfType:
                 var cf = CachedService.GetAllCashFlows().FirstOrDefault(x => x.Id == item.ForeignId);
                 if (cf != null)
                 {
                     item.ForeignDescription = cf.Name;
                 }
                 break;
         }
     }
 }
 public void Refresh(BudgetCalculatorEquation equation)
 {
     AttachEvaluator(equation);
     UpdateForeignDescriptions(equation);
 }
        public decimal? Calculate(BudgetCalculatorEquation equation)
        {
            StringBuilder expressionBuilder = new StringBuilder();

            foreach (var item in equation.Items)
            {
                switch (item.ValueType)
                {
                    case CalculatorValueType.UserValue:
                        expressionBuilder.Append(item.Value.GetValueOrDefault(0));
                        break;
                    case CalculatorValueType.Operator:
                        expressionBuilder.AppendFormat(" {0} ", item.OperatorType.ToMath());
                        break;
                    default:
                        if (item.Evaluator == null)
                        {
                            AttachEvaluator(item);
                        }
                        var value = item.CalculateValue();
                        if (value.HasValue)
                        {
                            expressionBuilder.Append(value.Value);
                        }
                        break;
                }
            }

            var expression = expressionBuilder.ToString().Replace(",", ".");
            try
            {
                var result = _calculator.Evaluate(expression);
                return result;
            }
            catch (SyntaxException)
            {
                return null;
            }
        }
        public BudgetCalculatorEquation CreateCopy()
        {
            var copy = new BudgetCalculatorEquation
            {
                Id = this.Id,
                Name = this.Name,
                IsVisible = this.IsVisible,
                Position = this.Position,
            };

            Items.ForEach(x => copy.Items.Add(x.CreateCopy()));

            return copy;
        }