示例#1
0
 private void SaveEquation(BudgetCalculatorEquation budgetCalculatorEquation)
 {
     using (var tx = Database.GetTransaction())
     {
         Database.Save(budgetCalculatorEquation);
         var itemsToDelete = EquationToEdit.Items.Where(x => !budgetCalculatorEquation.Items.Any(y => x.Id == y.Id));
         itemsToDelete.ForEach(x => Database.Delete(x));
         Database.SaveAll(budgetCalculatorEquation.Items);
         tx.Complete();
         CachedService.Clear(CachedServiceKeys.AllEquations);
         PublishRefreshRequest(budgetCalculatorEquation);
     }
 }
示例#2
0
 private void DeleteEquation(BudgetCalculatorEquation equation)
 {
     using (var tx = Database.GetTransaction())
     {
         // delete all related equations
         var equationsDeletedCounter = Database.Execute("DELETE FROM BudgetCalculatorEquation WHERE Id IN (SELECT BudgetCalculatorEquationId FROM BudgetCalculatorItem WHERE ForeignId = @0 AND ValueTypeName = 'CalculatorEquationValue')", equation.Id);
         Database.Execute("DELETE FROM BudgetCalculatorItem WHERE ForeignId = @0 AND ValueTypeName = 'CalculatorEquationValue'", equation.Id);
         Database.Execute("DELETE FROM BudgetCalculatorItem WHERE BudgetCalculatorEquationId = @0", equation.Id);
         Database.Delete(equation);
         tx.Complete();
         CachedService.Clear(CachedServiceKeys.AllEquations);
         PublishRefreshRequest(equation);
     }
 }
示例#3
0
        public void Create()
        {
            int maxPosition = 1;

            if (Database.Count <BudgetCalculatorEquation>() > 0)
            {
                maxPosition = Database.ExecuteScalar <int>("SELECT MAX(Position) FROM BudgetCalculatorEquation");
            }

            EquationToEdit = new BudgetCalculatorEquation {
                IsVisible = true, Position = maxPosition
            };
            ShowWizard();
        }
示例#4
0
        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();
        }
示例#5
0
        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);
            }
        }
示例#6
0
        public void Delete(BudgetCalculatorEquation equation, bool omitConfirmation)
        {
            if (!omitConfirmation)
            {
                var isRequiredForOthers = Database.ExecuteScalar <int>(PetaPoco.Sql.Builder
                                                                       .Select("COUNT(*)")
                                                                       .From("BudgetCalculatorItem")
                                                                       .Where("ForeignId = @0 AND ValueTypeName = 'CalculatorEquationValue'", equation.Id)) > 0;
                if (isRequiredForOthers)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendFormat(string.Format("Równanie {0} jest wykorzystywane w innych równaniach.", equation.Name));
                    sb.AppendLine();
                    sb.AppendLine("Usunięcie go spowoduje usunięcie wsztkich równań, które są od niego zależne.");
                    sb.AppendLine();
                    sb.AppendLine("Na pewno chcesz wykonać operację?");

                    Shell.ShowMessage(sb.ToString(), () => Delete(equation, true), null, System.Windows.MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.Question);
                    return;
                }
            }

            DeleteEquation(equation);
            var equationsToDelete = Equations.Where(eq =>
            {
                if (eq.Id == equation.Id)
                {
                    return(true);
                }
                else
                {
                    return(eq.Items.Any(x => x.ForeignId == equation.Id && x.ValueType == CalculatorValueType.CalculatorEquationValue));
                }
            }).ToList();

            Equations.RemoveRange(equationsToDelete);
        }
示例#7
0
        private void ReorderCashFlowGroup(BudgetCalculatorEquation itemToReorder, int placeAtIndex)
        {
            //var itemsCopy = Equations.ToList();
            var itemToReorderIndex = Equations.IndexOf(itemToReorder);

            if (itemToReorderIndex < 0 || itemToReorderIndex == placeAtIndex)
            {
                return;
            }
            Equations.IsNotifying = false;
            SuppressEvent         = true;

            Equations.Insert(placeAtIndex, itemToReorder);
            if (placeAtIndex > itemToReorderIndex)
            {
                Equations.RemoveAt(itemToReorderIndex);
            }
            else
            {
                Equations.RemoveAt(itemToReorderIndex + 1);
            }
            int position = 1;

            Equations.ForEach(x => x.Position = position++);
            using (var tx = Database.GetTransaction())
            {
                Database.SaveAll(Equations);
                tx.Complete();
            }
            Equations.IsNotifying = true;

            Equations.Refresh();
            NotifyOfPropertyChange(() => AvaiableEquations);
            CachedService.Clear(CachedServiceKeys.AllEquations);
            SuppressEvent = false;
        }
示例#8
0
        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;
                }
            }
        }
示例#9
0
 public void Delete(BudgetCalculatorEquation equation)
 {
     Delete(equation, false);
 }
示例#10
0
 public void Edit(BudgetCalculatorEquation equation)
 {
     EquationToEdit = equation;
     ShowWizard();
 }
示例#11
0
 private BudgetEquationWizardVM()
 {
     _currentPageIndex = 0;
     _equation         = new BudgetCalculatorEquation();
     InnerEquationList = new List <BudgetCalculatorItem>();
 }
示例#12
0
 public void AttachEvaluator(BudgetCalculatorEquation equation)
 {
     equation.Evaluator = () => Calculate(equation);
     equation.Items.ForEach(x => AttachEvaluator(x));
 }
示例#13
0
 public void Refresh(BudgetCalculatorEquation equation)
 {
     AttachEvaluator(equation);
     UpdateForeignDescriptions(equation);
 }