public void AddNewCashFlowGroup() { using (var tx = Database.GetTransaction()) { int maxPosition = 1; if (Database.Count <CashFlowGroup>() > 0) { maxPosition = Database.ExecuteScalar <int>("SELECT MAX(Position) FROM CashFlowGroup"); } var cashFlowGroup = new CashFlowGroup { Name = NewGroupName, Description = NewGroupDescription, Position = maxPosition + 1, }; Database.Save(cashFlowGroup); tx.Complete(); _cashFlowGroups.Add(cashFlowGroup); } CachedService.Clear(); NewGroupName = string.Empty; NewGroupDescription = string.Empty; //LoadData(); IsNewGroupNameFocused = false; IsNewGroupNameFocused = true; NotifyOfPropertyChange(() => CashFlowGroups); }
private void ReorderCashFlowGroup(CashFlowGroup itemToReorder, int placeAtIndex) { var itemsCopy = CashFlowGroups.ToList(); var itemToReorderIndex = itemsCopy.IndexOf(itemToReorder); if (itemToReorderIndex < 0 || itemToReorderIndex == placeAtIndex) { return; } SuppressEvent = true; itemsCopy.Insert(placeAtIndex, itemToReorder); if (placeAtIndex > itemToReorderIndex) { itemsCopy.RemoveAt(itemToReorderIndex); } else { itemsCopy.RemoveAt(itemToReorderIndex + 1); } int position = 1; itemsCopy.ForEach(x => x.Position = position++); using (var tx = Database.GetTransaction()) { Database.SaveAll(itemsCopy); tx.Complete(); } NotifyOfPropertyChange(() => CashFlowGroups); CachedService.Clear(CachedServiceKeys.AllCashFlowGroups); SuppressEvent = false; }
public void MoveCashFlowGroupDown(CashFlowGroup cashFlowGroup) { var nextCashFlowGroup = CashFlowGroups.FirstOrDefault(x => x.Position > cashFlowGroup.Position); if (nextCashFlowGroup == null) { return; } SwapPositions(cashFlowGroup, nextCashFlowGroup); }
public void MoveCashFlowGroupUp(CashFlowGroup cashFlowGroup) { var previousCashFlowGroup = CashFlowGroups.LastOrDefault(x => x.Position < cashFlowGroup.Position); if (previousCashFlowGroup == null) { return; } SwapPositions(cashFlowGroup, previousCashFlowGroup); }
private void SwapPositions(CashFlowGroup first, CashFlowGroup secound) { first.IsNotifying = false; secound.IsNotifying = false; var firstPosition = first.Position; first.Position = secound.Position; secound.Position = firstPosition; first.IsNotifying = true; secound.IsNotifying = true; base.Save(first); base.Save(secound); CachedService.Clear(); NotifyOfPropertyChange(() => CashFlowGroups); }
public void DeleteCashFlowGroup(CashFlowGroup cashFlowGroup, bool omitConfirmation) { if (!omitConfirmation) { var hasCashFlowsDefined = Database.ExecuteScalar <int>(PetaPoco.Sql.Builder .Select("COUNT(*)") .From("CashFlow") .Where("CashFlowGroupId = @0", cashFlowGroup.Id)) > 0; var hasBudgetPlansDefined = Database.ExecuteScalar <int>(PetaPoco.Sql.Builder .Select("COUNT(*)") .From("BudgetPlan") .Where("CashFlowId IN (SELECT [CashFlow].Id FROM [CashFlow] WHERE CashFlowGroupId = @0)", cashFlowGroup.Id)) > 0; var hasExpensesDefined = Database.ExecuteScalar <int>(PetaPoco.Sql.Builder .Select("COUNT(*)") .From("Expense") .Where("CashFlowId IN (SELECT [CashFlow].Id FROM [CashFlow] WHERE CashFlowGroupId = @0)", cashFlowGroup.Id)) > 0; if (hasCashFlowsDefined || hasBudgetPlansDefined || hasExpensesDefined) { Shell.ShowDialog <CashFlowGroupDeleteConfirmationViewModel>(new { CashFlowGroup = cashFlowGroup }, () => DeleteCashFlowGroup(cashFlowGroup, true), null); return; } } using (var tx = Database.GetTransaction()) { Database.Delete(cashFlowGroup); tx.Complete(); _cashFlowGroups.IsNotifying = false; _cashFlowGroups.Remove(cashFlowGroup); _cashFlowGroups.IsNotifying = true; } NewCashFlowGroup = _cashFlowGroups.First(); CachedService.Clear(); _cashFlows.IsNotifying = false; NotifyOfPropertyChange(() => CashFlowGroups); LoadCashFlows(); }
private static void AddOrNothingCashFlowByName(Database db, CashFlowGroup defautGroup, string cashFowName, string cashFlowDescription = null) { var sql = PetaPoco.Sql.Builder.Where("NAME = @0", cashFowName); if (!string.IsNullOrWhiteSpace(cashFlowDescription)) { sql.Append(" AND Description = @0", cashFlowDescription); } var cashFlow = db.FirstOrDefault <CashFlow>(sql); if (cashFlow == null) { cashFlow = new CashFlow { Name = cashFowName, Description = cashFlowDescription, Group = defautGroup, }; db.Save(cashFlow); } }
public void DeleteCashFlowGroup(CashFlowGroup cashFlowGroup) { DeleteCashFlowGroup(cashFlowGroup, false); }
public bool CanDeleteCashFlowGroup(CashFlowGroup cashFlowGroup) { return(_cashFlowGroups.Count > 0); }
public void AttachEvaluator(BudgetCalculatorItem calculatorItem) { CashFlow cashFlow = null; CashFlowGroup cashFlowGroup = null; switch (calculatorItem.ValueType) { case CalculatorValueType.BudgetTotalRevenuesValue: calculatorItem.Evaluator = () => Budget.TotalSumOfRevenues; break; case CalculatorValueType.BudgetIncomesValue: case CalculatorValueType.BudgetIncomesValueOfType: var income = CachedService.GetAllIncomes().FirstOrDefault(x => x.Id == calculatorItem.ForeignId); calculatorItem.Evaluator = () => GetSumOfBudgetIncomes(income); break; case CalculatorValueType.BudgetSavingsValue: case CalculatorValueType.BudgetSavingsValueOfType: var saving = CachedService.GetAllSavings().FirstOrDefault(x => x.Id == calculatorItem.ForeignId); calculatorItem.Evaluator = () => GetSumOfBudgetSavings(saving); break; case CalculatorValueType.BudgetExpensesValueOfType: cashFlow = CachedService.GetAllCashFlows().FirstOrDefault(x => x.Id == calculatorItem.ForeignId); if (cashFlow == null) { throw new NullReferenceException(string.Format("Błąd obliczania równania {0}. Brak kategorii.", calculatorItem.Equation.Name)); } calculatorItem.Evaluator = () => GetSumOfBudgetExpenses(cashFlow); break; case CalculatorValueType.BudgetExpensesWithDescription: calculatorItem.Evaluator = () => GetSumOfBudgetExpensesWithDescription(calculatorItem.Text); break; case CalculatorValueType.CalculatorEquationValue: var calculatorEquation = Equations.FirstOrDefault(x => x.Id == calculatorItem.ForeignId); if (calculatorEquation == null) { throw new NullReferenceException(string.Format("Nie udało się odnaleźć równania powiązanego z równaniem: {0}", calculatorItem.Name)); } calculatorItem.Evaluator = () => Calculate(calculatorEquation); break; case CalculatorValueType.BudgetPlanValue: calculatorItem.Evaluator = () => Budget.TotalBudgetPlanValue; break; case CalculatorValueType.BudgetPlanValueOfCategory: cashFlow = CachedService.GetAllCashFlows().FirstOrDefault(x => x.Id == calculatorItem.ForeignId); if (cashFlow == null) { throw new NullReferenceException(string.Format("Błąd obliczania równania {0}. Brak kategorii.", calculatorItem.Equation.Name)); } calculatorItem.Evaluator = () => GetSumOfBudgetPlansOfCategory(cashFlow); break; case CalculatorValueType.BudgetPlanValueOfGroup: cashFlowGroup = CachedService.GetAllCashFlowGroups().FirstOrDefault(x => x.Id == calculatorItem.ForeignId); if (cashFlowGroup == null) { throw new NullReferenceException(string.Format("Błąd obliczania równania {0}. Brak grupy.", calculatorItem.Equation.Name)); } calculatorItem.Evaluator = () => GetSumOfBudgetPlansOfGroup(cashFlowGroup); break; } }
private decimal GetSumOfBudgetPlansOfGroup(CashFlowGroup cashFlowGroup) { return(Budget.BudgetPlanItems.Where(x => x.CashFlow.CashFlowGroupId == cashFlowGroup.Id).Sum(x => x.Value)); }