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 override void LoadData()
 {
     CashFlowGroups.Clear();
     var cashFlowList = CachedService.GetAllCashFlowGroups().Where(x => x.Id != CashFlowGroupToDelete.Id);
     cashFlowList.ForEach(x => CashFlowGroups.Add(x));
     SelectedCashFlowGroup = CashFlowGroups.FirstOrDefault();
 }
        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);
        }
        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 MoveCashFlowGroupUp(CashFlowGroup cashFlowGroup)
        {
            var previousCashFlowGroup = CashFlowGroups.LastOrDefault(x => x.Position < cashFlowGroup.Position);
            if (previousCashFlowGroup == null)
            {
                return;
            }

            SwapPositions(cashFlowGroup, previousCashFlowGroup);
        }
        public void MoveCashFlowGroupDown(CashFlowGroup cashFlowGroup)
        {
            var nextCashFlowGroup = CashFlowGroups.FirstOrDefault(x => x.Position > cashFlowGroup.Position);
            if (nextCashFlowGroup == null)
            {
                return;
            }

            SwapPositions(cashFlowGroup, nextCashFlowGroup);
        }
        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();
        }
 public void DeleteCashFlowGroup(CashFlowGroup cashFlowGroup)
 {
     DeleteCashFlowGroup(cashFlowGroup, false);
 }
 public bool CanDeleteCashFlowGroup(CashFlowGroup cashFlowGroup)
 {
     return _cashFlowGroups.Count > 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);
        }
 private decimal GetSumOfBudgetPlansOfGroup(CashFlowGroup cashFlowGroup)
 {
     return Budget.BudgetPlanItems.Where(x => x.CashFlow.CashFlowGroupId == cashFlowGroup.Id).Sum(x => x.Value);
 }