Beispiel #1
0
        public void AddOrUpdate(BudgetTransaction transaction)
        {
            try
            {
                BudgetTransaction tranindb;

                var transRepo = new TransactionRepository(_db);
                var tranindbs = transRepo.Get()
                                .Where(
                    t =>
                    t.PaymentID == transaction.PaymentID &&
                    t.BudgetID == transaction.BudgetID
                    ).ToList();

                tranindb = tranindbs.FirstOrDefault();

                if (tranindb == null)
                {
                    // if not found, then add new transaction
                    Add(transaction);
                }
                else
                {
                    // if exiting in db, then update
                    tranindb.Amount = transaction.Amount;
                    Update(tranindb);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #2
0
        public void Update(BudgetTransaction transaction)
        {
            var tranRepo = new TransactionRepository(_db);

            transaction.PrepareToUpdate();
            tranRepo.Update(transaction);
            tranRepo.Save();
        }
Beispiel #3
0
        public void Add(BudgetTransaction transaction)
        {
            var tranRepo = new TransactionRepository(_db);

            transaction.PrepareToCrate();
            tranRepo.Add(transaction);
            tranRepo.Save();
        }
Beispiel #4
0
 private bool isLastTransaction(BudgetTransaction transaction)
 {
     // disable last transaction
     return(false);
     //using (var transRepo = new TransactionRepository())
     //{
     //    return !(transRepo.Get().Any(t => t.BudgetID == transaction.BudgetID && t.CreatedAt > transaction.CreatedAt));
     //}
 }
Beispiel #5
0
 public IBudgetTransactionItemViewModel Create(
     ObservableCollection <IAccountLinkViewModel> accountLinks,
     BudgetTransaction budgetTransaction,
     BudgetTransactionType type)
 {
     return(new BudgetTransactionItemViewModel(
                m_loggerFactory,
                accountLinks,
                budgetTransaction,
                type));
 }
Beispiel #6
0
        public BudgetTransaction ToBudgetTransaction()
        {
            var budgetTransaction = new BudgetTransaction
            {
                BudgetTransactionId = BudgetTransactionId,
                CreditAccount       = SelectedCreditAccount.ToAccountLink(),
                DebitAccount        = SelectedDebitAccount.ToAccountLink(),
                Amount = m_amount
            };

            return(budgetTransaction);
        }
Beispiel #7
0
        private void CreateExecute(object obj)
        {
            IBudgetTransactionItemViewModel initialTransactionViewModel =
                Transactions
                .Single(t => t.Type == BudgetTransactionType.Initial);
            IAccountLinkViewModel suggestedCreditAccount =
                initialTransactionViewModel.SelectedDebitAccount;

            // For the debit account, we want the next unused asset account.
            // Failing that, we want an asset account.
            // Failing that, we'll take anything!
            IEnumerable <IAccountLinkViewModel> assetAccountLinks = m_accountLinks
                                                                    .Where(alvm => alvm.Type == AccountType.Asset &&
                                                                           alvm != suggestedCreditAccount);
            IEnumerable <IAccountLinkViewModel> usedAssetAccountLinks =
                Transactions
                .Select(t => t.SelectedDebitAccount)
                .Where(al => al.Type == AccountType.Asset);
            IEnumerable <IAccountLinkViewModel> unusedAssetAccountLinks =
                assetAccountLinks
                .Except(usedAssetAccountLinks);

            IAccountLinkViewModel suggestedDebitAccount = null;

            if (unusedAssetAccountLinks.Any())
            {
                suggestedDebitAccount = unusedAssetAccountLinks.First();
            }
            else if (usedAssetAccountLinks.Any())
            {
                suggestedDebitAccount = usedAssetAccountLinks.First();
            }
            else if (m_accountLinks.Any())
            {
                suggestedDebitAccount = m_accountLinks.First();
            }

            var newTransaction = new BudgetTransaction
            {
                CreditAccount = suggestedCreditAccount.ToAccountLink(),
                DebitAccount  = suggestedDebitAccount.ToAccountLink(),
                Amount        = 0m
            };

            Transactions.Insert(
                Transactions.Count - 1,// we maintain that the surplus transaction is last, so - 1
                CreateItemViewModel(newTransaction, BudgetTransactionType.Regular)
                );
        }
Beispiel #8
0
        public BudgetTransactionItemViewModel(
            ILoggerFactory loggerFactory,
            ObservableCollection <IAccountLinkViewModel> accountLinks,
            BudgetTransaction budgetTransaction,
            BudgetTransactionType type)
        {
            m_logger = loggerFactory.CreateLogger <BudgetTransactionItemViewModel>();

            AccountLinks          = accountLinks;
            m_amount              = budgetTransaction.Amount;
            BudgetTransactionId   = budgetTransaction.BudgetTransactionId;
            SelectedCreditAccount = AccountLinks.Single(al => al.AccountId == budgetTransaction.CreditAccount.AccountId);
            SelectedDebitAccount  = AccountLinks.Single(al => al.AccountId == budgetTransaction.DebitAccount.AccountId);
            Type = type;
        }
Beispiel #9
0
        private IBudgetTransactionItemViewModel CreateItemViewModel(
            BudgetTransaction budgetTransaction,
            BudgetTransactionType type)
        {
            IBudgetTransactionItemViewModel transactionViewModel =
                m_budgetTransactionItemViewModelFactory.Create(
                    m_accountLinks,
                    budgetTransaction,
                    type
                    );

            if (type != BudgetTransactionType.Surplus)
            {
                ((BaseViewModel)transactionViewModel).PropertyChanged += OnItemPropertyChanged;
            }

            return(transactionViewModel);
        }
Beispiel #10
0
 public void Delete(BudgetTransaction transaction)
 {
     //var tranRepo = new TransactionRepository(_db);
     transaction.Status = Models.Base.RecordStatus.Remove;
     Update(transaction);
 }
Beispiel #11
0
        public BudgetTransactionListViewModel(
            ILoggerFactory loggerFactory,
            IAccountService accountService,
            IBudgetService budgetService,
            IAccountLinkViewModelFactory accountLinkViewModelFactory,
            IBudgetTransactionItemViewModelFactory budgetTransactionItemViewModelFactory,
            IDeleteConfirmationViewService deleteConfirmationViewService,
            int budgetId)
        {
            m_logger         = loggerFactory.CreateLogger <BudgetTransactionListViewModel>();
            m_accountService = accountService;
            m_budgetService  = budgetService;
            m_accountLinkViewModelFactory           = accountLinkViewModelFactory;
            m_budgetTransactionItemViewModelFactory = budgetTransactionItemViewModelFactory;
            m_deleteConfirmationViewService         = deleteConfirmationViewService;

            m_accountLinks = new ObservableCollection <IAccountLinkViewModel>(
                m_accountService
                .GetAllAsLinks()
                .OrderBy(al => al.Name)
                .Select(al => m_accountLinkViewModelFactory.Create(al)));

            m_budgetId = budgetId;

            if (m_budgetId == 0)
            {
                int firstIncomeAccountId = 0;
                int firstAssetAccountId  = 0;
                int secondAssetAccountId = 0;

                IAccountLinkViewModel firstIncomeAccount =
                    m_accountLinks.FirstOrDefault(al => al.Type == AccountType.Income);
                IAccountLinkViewModel firstAssetAccount =
                    m_accountLinks.FirstOrDefault(al => al.Type == AccountType.Asset);
                IAccountLinkViewModel secondAssetAccount =
                    m_accountLinks.Where(al => al.Type == AccountType.Asset)
                    .ElementAtOrDefault(1);

                if (firstIncomeAccount != null)
                {
                    firstIncomeAccountId = firstIncomeAccount.AccountId;
                }
                if (firstAssetAccount != null)
                {
                    firstAssetAccountId = secondAssetAccount.AccountId;
                }
                if (secondAssetAccount != null)
                {
                    secondAssetAccountId = secondAssetAccount.AccountId;
                }

                var transactions = new List <IBudgetTransactionItemViewModel>();
                BudgetTransaction initialTransaction = new BudgetTransaction
                {
                    CreditAccount = new AccountLink {
                        AccountId = firstIncomeAccountId
                    },
                    DebitAccount = new AccountLink {
                        AccountId = firstAssetAccountId
                    },
                    Amount = 0
                };
                BudgetTransaction surplusTransaction = new BudgetTransaction
                {
                    CreditAccount = new AccountLink {
                        AccountId = firstAssetAccountId
                    },
                    DebitAccount = new AccountLink {
                        AccountId = secondAssetAccountId
                    },
                    Amount = 0
                };
                transactions.Add(CreateItemViewModel(initialTransaction, BudgetTransactionType.Initial));
                transactions.Add(CreateItemViewModel(surplusTransaction, BudgetTransactionType.Surplus));

                Transactions = new ObservableCollection <IBudgetTransactionItemViewModel>(transactions);
            }
            else
            {
                Budget budget = m_budgetService.Get(m_budgetId);

                var transactions = new List <IBudgetTransactionItemViewModel>();
                transactions.Add(CreateItemViewModel(budget.InitialTransaction, BudgetTransactionType.Initial));
                transactions.AddRange(
                    budget.Transactions.Select(t => CreateItemViewModel(t, BudgetTransactionType.Regular))
                    );
                transactions.Add(CreateItemViewModel(budget.SurplusTransaction, BudgetTransactionType.Surplus));

                Transactions = new ObservableCollection <IBudgetTransactionItemViewModel>(transactions);
            }

            CalculateSurplusAmount();
        }
Beispiel #12
0
        public Budget GetWithTransaction(string id)
        {
            Budget budget;

            using (SqlConnection conn = new SqlConnection(conn_string))
            {
                conn.Open();

                using (SqlCommand cmd = new SqlCommand(cmd_budget_info, conn))
                {
                    cmd.Parameters.AddWithValue("BudgetID", id);
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            budget           = new Budget();
                            budget.BudgetID  = Guid.Parse(id);
                            budget.AccountID = reader["AccountID"].ToString();
                            budget.Account   = new Account()
                            {
                                AccountID   = budget.AccountID,
                                AccountName = reader["AccountName"].ToString()
                            };
                            budget.CostCenterID = reader["CostCenterID"].ToString();
                            budget.CostCenter   = new CostCenter()
                            {
                                CostCenterID   = budget.CostCenterID,
                                CostCenterName = reader["CostCenterName"].ToString()
                            };
                            budget.Year         = reader["Year"].ToString();
                            budget.BudgetAmount = decimal.Parse(reader["BudgetAmount"].ToString());
                            budget.Status       = (BudgetStatus)int.Parse(reader["Status"].ToString());
                        }
                        else
                        {
                            return(null);
                        }
                    }
                }

                using (SqlCommand cmd = new SqlCommand(cmd_budget_transaction, conn))
                {
                    cmd.Parameters.AddWithValue("BudgetID", id);
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        budget.BudgetTransactions = new List <BudgetTransaction>();
                        budget.WithdrawAmount     = 0;
                        while (reader.Read())
                        {
                            BudgetTransaction bt = new BudgetTransaction();
                            bt.BudgetTransactionID = Guid.Parse(reader["BudgetTransactionID"].ToString());
                            bt.Description         = reader["Description"].ToString();
                            bt.Amount         = decimal.Parse(reader["Amount"].ToString());
                            bt.PreviousAmount = decimal.Parse(reader["PreviousAmount"].ToString());
                            bt.CreatedAt      = DateTime.Parse(reader["CreatedAt"].ToString());
                            bt.CreatedBy      = reader["CreatedBy"].ToString();
                            bt.ModifiedAt     = DateTime.Parse(reader["ModifiedAt"].ToString());
                            bt.ModifiedBy     = reader["ModifiedBy"].ToString();
                            bt.PaymentID      = Guid.Parse(reader["PaymentID"].ToString());
                            bt.Payment        = new Payment()
                            {
                                PaymentNo    = reader["PaymentNo"].ToString(),
                                Type         = (PaymentType)int.Parse(reader["Type"].ToString()),
                                RequestBy    = reader["RequestBy"].ToString(),
                                Description  = reader["Description"].ToString(),
                                ContractorID = reader.IsDBNull(reader.GetOrdinal("ContractorID")) ? (Guid?)null : Guid.Parse(reader["ContractorID"].ToString())
                            };
                            bt.RemainAmount = budget.BudgetAmount - bt.Amount - bt.PreviousAmount;
                            budget.BudgetTransactions.Add(bt);
                            budget.WithdrawAmount += bt.Amount;
                        }
                    }
                }
                conn.Close();
            }

            budget.RemainAmount = budget.BudgetAmount - budget.WithdrawAmount;

            return(budget);
        }
Beispiel #13
0
        public void TestCreateBudgetInDbContext()
        {
            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory = new CurrencyFactory();
                Entities.Currency usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity =
                    accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account savingsAccountEntity =
                    accountFactory.Create(AccountPrefab.Savings, usdCurrencyEntity);
                Entities.Account rentPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.RentPrepayment, usdCurrencyEntity);
                Entities.Account rentExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.RentExpense, usdCurrencyEntity);
                Entities.Account groceriesPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.GroceriesPrepayment, usdCurrencyEntity);
                Entities.Account groceriesExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.GroceriesExpense, usdCurrencyEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, savingsAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentPrepaymentAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentExpenseAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, groceriesPrepaymentAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, groceriesExpenseAccountEntity);

                var checkingToRentPrepaymentRelationship = new AccountRelationship
                {
                    SourceAccount      = checkingAccountEntity,
                    DestinationAccount = rentPrepaymentAccountEntity,
                    Type = AccountRelationshipType.PhysicalToLogical
                };
                var checkingToGroceriesPrepaymentRelationship = new AccountRelationship
                {
                    SourceAccount      = checkingAccountEntity,
                    DestinationAccount = groceriesPrepaymentAccountEntity,
                    Type = AccountRelationshipType.PhysicalToLogical
                };
                var rentPrepaymentToExpenseRelationship = new AccountRelationship
                {
                    SourceAccount      = rentPrepaymentAccountEntity,
                    DestinationAccount = rentExpenseAccountEntity,
                    Type = AccountRelationshipType.PrepaymentToExpense
                };
                var groceriesPrepaymentToExpenseRelationship = new AccountRelationship
                {
                    SourceAccount      = groceriesPrepaymentAccountEntity,
                    DestinationAccount = groceriesExpenseAccountEntity,
                    Type = AccountRelationshipType.PrepaymentToExpense
                };

                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToRentPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToGroceriesPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(rentPrepaymentToExpenseRelationship);
                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(groceriesPrepaymentToExpenseRelationship);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var budget = new Budget
                {
                    Name   = "Budget",
                    Period = BudgetPeriod.Fortnightly
                };
                sqliteMemoryWrapper.DbContext.Budgets.Add(budget);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var initialTransaction = new BudgetTransaction
                {
                    CreditAccount = incomeAccountEntity,
                    DebitAccount  = checkingAccountEntity,
                    Amount        = 200m,
                    IsInitial     = true,
                    Budget        = budget
                };
                var rentTransaction = new BudgetTransaction
                {
                    CreditAccount = checkingAccountEntity,
                    DebitAccount  = rentPrepaymentAccountEntity,
                    Amount        = 100m,
                    Budget        = budget
                };
                var groceriesTransaction = new BudgetTransaction
                {
                    CreditAccount = checkingAccountEntity,
                    DebitAccount  = groceriesPrepaymentAccountEntity,
                    Amount        = 50m,
                    Budget        = budget
                };
                var surplusTransaction = new BudgetTransaction
                {
                    CreditAccount = checkingAccountEntity,
                    DebitAccount  = groceriesPrepaymentAccountEntity,
                    IsSurplus     = true,
                    Budget        = budget
                };
                sqliteMemoryWrapper.DbContext.BudgetTransactions.Add(initialTransaction);
                sqliteMemoryWrapper.DbContext.BudgetTransactions.Add(rentTransaction);
                sqliteMemoryWrapper.DbContext.BudgetTransactions.Add(groceriesTransaction);
                sqliteMemoryWrapper.DbContext.BudgetTransactions.Add(surplusTransaction);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                List <Account>             accounts            = sqliteMemoryWrapper.DbContext.Accounts.ToList();
                List <AccountRelationship> accountRelationsips = sqliteMemoryWrapper.DbContext.AccountRelationships.ToList();
                List <Budget>            budgets            = sqliteMemoryWrapper.DbContext.Budgets.ToList();
                List <BudgetTransaction> budgetTransactions = sqliteMemoryWrapper.DbContext.BudgetTransactions.ToList();
                List <Currency>          currencies         = sqliteMemoryWrapper.DbContext.Currencies.ToList();
                List <Transaction>       transactions       = sqliteMemoryWrapper.DbContext.Transactions.ToList();

                Assert.AreEqual(7, accounts.Count);
                Assert.AreEqual(4, accountRelationsips.Count);
                Assert.AreEqual(1, budgets.Count);
                Assert.AreEqual(4, budgetTransactions.Count);
                Assert.AreEqual(1, currencies.Count);
                Assert.AreEqual(0, transactions.Count);

                Assert.AreEqual(budget.Name, budgets[0].Name);
                Assert.AreEqual(budget.Period, budgets[0].Period);
                Assert.AreEqual(budgetTransactions.Count, budgets[0].Transactions.Count);
            }
        }