コード例 #1
0
        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);
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        public void MoveCashFlowGroupDown(CashFlowGroup cashFlowGroup)
        {
            var nextCashFlowGroup = CashFlowGroups.FirstOrDefault(x => x.Position > cashFlowGroup.Position);

            if (nextCashFlowGroup == null)
            {
                return;
            }

            SwapPositions(cashFlowGroup, nextCashFlowGroup);
        }
コード例 #4
0
        public void MoveCashFlowGroupUp(CashFlowGroup cashFlowGroup)
        {
            var previousCashFlowGroup = CashFlowGroups.LastOrDefault(x => x.Position < cashFlowGroup.Position);

            if (previousCashFlowGroup == null)
            {
                return;
            }

            SwapPositions(cashFlowGroup, previousCashFlowGroup);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
 public void DeleteCashFlowGroup(CashFlowGroup cashFlowGroup)
 {
     DeleteCashFlowGroup(cashFlowGroup, false);
 }
コード例 #9
0
 public bool CanDeleteCashFlowGroup(CashFlowGroup cashFlowGroup)
 {
     return(_cashFlowGroups.Count > 0);
 }
コード例 #10
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;
            }
        }
コード例 #11
0
 private decimal GetSumOfBudgetPlansOfGroup(CashFlowGroup cashFlowGroup)
 {
     return(Budget.BudgetPlanItems.Where(x => x.CashFlow.CashFlowGroupId == cashFlowGroup.Id).Sum(x => x.Value));
 }