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); } }
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); } }
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(); }
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 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 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); }
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; }
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 Delete(BudgetCalculatorEquation equation) { Delete(equation, false); }
public void Edit(BudgetCalculatorEquation equation) { EquationToEdit = equation; ShowWizard(); }
private BudgetEquationWizardVM() { _currentPageIndex = 0; _equation = new BudgetCalculatorEquation(); InnerEquationList = new List <BudgetCalculatorItem>(); }
public void AttachEvaluator(BudgetCalculatorEquation equation) { equation.Evaluator = () => Calculate(equation); equation.Items.ForEach(x => AttachEvaluator(x)); }
public void Refresh(BudgetCalculatorEquation equation) { AttachEvaluator(equation); UpdateForeignDescriptions(equation); }