public void TestBudgetCreateViewModelCancel() { ILoggerFactory loggerFactory = new LoggerFactory(); using (var sqliteMemoryWrapper = new SqliteMemoryWrapper()) { var currencyFactory = new CurrencyFactory(); var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true); currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity); var budgetService = new BudgetService( loggerFactory, sqliteMemoryWrapper.DbContext); var viewModel = new BudgetCreateViewModel( loggerFactory, budgetService, new Mock <IBudgetTransactionListViewModelFactory>().Object ); viewModel.Name = "My First Budget"; viewModel.CancelCommand.Execute(this); List <Budget> budgets = budgetService.GetAll().ToList(); Assert.AreEqual(0, budgets.Count); } }
public async Task <IActionResult> Create([FromBody] BudgetCreateViewModel input) { var user = User.GetDetails(); var data = _mapper.Map <BudgetCreateViewModel, Budget>(input); var budget = new Budget(input.Name, input.Description, input.BudgetHeadId, input.BudgetCategoryId, input.DepartmentId, input.CurrencyId, user.Id); string referenceId = await _unitOfWork.NumberingSequences.GenerateReferenceId(NumberingSequenceTypeEnum.Budget); if (referenceId == null) { return(BadRequest("ReferenceId not generated")); } budget.SetBudgetData(input.BudgetType, referenceId, input.DivisionId, input.SubDivisionId, input.PersonInChargeId, input.Justification); budget.SetBudgetAmountData(input.StartDate, input.EndDate, input.TransactionDate, input.BasicAmount, input.TaxAmount); budget.CalculateTotalAmount(); budget.AddSpendLimits(data.BudgetSpendLimits.ToList(), user.Id); budget.AddCostCodes(data.BudgetCostCodes.ToList(), user.Id); budget.SetBaseId(null); budget.SetRevisionNumber(0); budget.SetActive(); if (await _unitOfWork.Budgets.AnyAsync(budget)) { return(BadRequest("Budget Already Exists")); } _unitOfWork.Budgets.Add(budget); await _unitOfWork.CompleteAsync(user.Id); return(Ok(budget)); }
public ActionResult Create([Bind(Include = "InitialAmount,Category")] BudgetCreateViewModel model) { BudgetCategory category = new BudgetCategory(); Household household = db.Households.Find(Convert.ToInt32(User.Identity.GetHouseholdId())); if (ModelState.IsValid && !household.BudgetCategories.Select(bc => bc.Name).Contains(model.Category)) { category.Name = model.Category; category.HouseholdId = Convert.ToInt32(User.Identity.GetHouseholdId()); db.BudgetCategories.Add(category); db.SaveChanges(); Budget budget = new Budget(); budget.Amount = model.InitialAmount; budget.HouseholdId = Convert.ToInt32(User.Identity.GetHouseholdId()); budget.BudgetCategoryId = category.Id; db.Budgets.Add(budget); db.SaveChanges(); return(RedirectToAction("Details", new { id = budget.Id })); } ViewBag.HouseholdName = household.Name; return(View(model)); }
public void TestBudgetCreateViewModelOK() { ILoggerFactory loggerFactory = new LoggerFactory(); using (var sqliteMemoryWrapper = new SqliteMemoryWrapper()) { var currencyFactory = new CurrencyFactory(); var 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 groceriesPrepaymentAccountEntity = accountFactory.Create(AccountPrefab.GroceriesPrepayment, usdCurrencyEntity); accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity); accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity); accountFactory.Add(sqliteMemoryWrapper.DbContext, groceriesPrepaymentAccountEntity); var accountService = new AccountService( loggerFactory, sqliteMemoryWrapper.DbContext); var budgetService = new BudgetService( loggerFactory, sqliteMemoryWrapper.DbContext); var mockAccountLinkViewModelFactory = new Mock <IAccountLinkViewModelFactory>(); mockAccountLinkViewModelFactory .Setup(f => f.Create(It.IsAny <AccountLink>())) .Returns((AccountLink accountLink) => { return(new AccountLinkViewModel( loggerFactory, accountLink)); }); var mockBudgetTransactionItemViewModelFactory = new Mock <IBudgetTransactionItemViewModelFactory>(); mockBudgetTransactionItemViewModelFactory .Setup(f => f.Create( It.IsAny <ObservableCollection <IAccountLinkViewModel> >(), It.IsAny <BudgetTransaction>(), It.IsAny <BudgetTransactionType>())) .Returns( (ObservableCollection <IAccountLinkViewModel> accountLinks, BudgetTransaction budgetTransaction, BudgetTransactionType type) => { return(new BudgetTransactionItemViewModel( loggerFactory, accountLinks, budgetTransaction, type)); }); var mockTransactionListViewModelFactory = new Mock <IBudgetTransactionListViewModelFactory>(); mockTransactionListViewModelFactory .Setup(f => f.Create(It.IsAny <int>())) .Returns((int budgetId) => { return(new BudgetTransactionListViewModel( loggerFactory, accountService, budgetService, mockAccountLinkViewModelFactory.Object, mockBudgetTransactionItemViewModelFactory.Object, new Mock <IDeleteConfirmationViewService>().Object, budgetId )); }); var viewModel = new BudgetCreateViewModel( loggerFactory, budgetService, mockTransactionListViewModelFactory.Object ); viewModel.Name = "My First Budget"; viewModel.SelectedPeriod = BudgetPeriod.Monthly; viewModel.OKCommand.Execute(this); List <Budget> budgets = budgetService.GetAll().ToList(); Assert.AreEqual(1, budgets.Count); Assert.AreEqual(viewModel.Name, budgets[0].Name); Assert.AreEqual(viewModel.SelectedPeriod, budgets[0].Period); Assert.AreEqual(AccountType.Income, budgets[0].InitialTransaction.CreditAccount.Type); Assert.AreEqual(AccountType.Asset, budgets[0].InitialTransaction.DebitAccount.Type); Assert.AreEqual(AccountType.Asset, budgets[0].SurplusTransaction.CreditAccount.Type); Assert.AreEqual(AccountType.Asset, budgets[0].SurplusTransaction.DebitAccount.Type); Assert.AreEqual(0, budgets[0].Transactions.Count()); } }