public void AddOrderLoanShouldAddOrderLoan() { var options = new DbContextOptionsBuilder <BankCloudDbContext>() .UseInMemoryDatabase(databaseName: "Add_OrderLoan_Database") .Options; var dbContext = new BankCloudDbContext(options); var ordersService = new OrdersService(dbContext, null); var product = new Loan { Name = "ABCD", Amount = 1000m, Commission = 0.1m, InterestRate = 10m, Period = 12 }; var order = new OrderLoan { Name = product.Name, Commission = BankCloudCalculator.CalculateCommission(product), MonthlyFee = BankCloudCalculator.CalculateMounthlyFee(product) }; ordersService.AddOrderLoan(order, product); dbContext.SaveChanges(); var orders = dbContext.OrdersLoans.ToList(); Assert.Single(orders); Assert.Equal(order.Name, orders.First().Name); }
public void ApproveLoanRequest(OrderLoan orderLoan) { Account buyerAccount = orderLoan.Account; Account sellerAccount = orderLoan.Loan.Account; double orderCost = (double)orderLoan.Commission; double orderAmount = (double)orderLoan.Amount; double orderFee = (double)orderLoan.MonthlyFee; if (buyerAccount.Currency.IsoCode != sellerAccount.Currency.IsoCode) { ExchangeRate rateFromTo = Fixer .Rate(sellerAccount.Currency.IsoCode, buyerAccount.Currency.IsoCode); orderCost = rateFromTo.Convert(orderCost); orderAmount = rateFromTo.Convert(orderAmount); orderFee = rateFromTo.Convert(orderFee); } buyerAccount.Balance -= (decimal)orderCost; buyerAccount.Balance += (decimal)orderAmount; buyerAccount.MonthlyOutcome += (decimal)orderFee; sellerAccount.Balance += orderLoan.Commission; sellerAccount.Balance -= orderLoan.Amount; sellerAccount.MonthlyIncome += orderLoan.MonthlyFee; //TODO: every mounts task transfer orderLoan.CompletedOn = DateTime.UtcNow; orderLoan.Status = OrderStatus.Approved; this.context.SaveChanges(); }
public IActionResult OrderedLoanDetails(string id) { OrderLoan userOrderedLoanFromDB = this.ordersService.GetOrderLoanById(id); var detailOrderLoan = this.mapper .Map <OrderedLoansDetailViewModel>(userOrderedLoanFromDB); return(View(detailOrderLoan)); }
public void ApproveLoanRequestSholudSetOrderLoanToApprove() { var options = new DbContextOptionsBuilder <BankCloudDbContext>() .UseInMemoryDatabase(databaseName: "Approve_OrderLoan_Database") .Options; var dbContext = new BankCloudDbContext(options); var ordersService = new OrdersService(dbContext, null); var orderId = "abcd123"; var product = new Loan { Name = "ABCD", Amount = 1000m, Commission = 0.1m, InterestRate = 10m, Period = 12, Account = new Account { Currency = new Currency { IsoCode = "USD" } } }; var order = new OrderLoan { Id = orderId, Name = product.Name, Account = new Account { Currency = new Currency { IsoCode = "USD" } }, Commission = BankCloudCalculator.CalculateCommission(product), MonthlyFee = BankCloudCalculator.CalculateMounthlyFee(product), Loan = product }; dbContext.OrdersLoans.Add(order); dbContext.SaveChanges(); var ordered = dbContext.OrdersLoans.Find(orderId); ordersService.ApproveLoanRequest(ordered); dbContext.SaveChanges(); var approved = dbContext.OrdersLoans.Find(orderId); Assert.Equal(OrderStatus.Approved, approved.Status); }
public void AddOrderLoan(OrderLoan order, Product loan) { if (order == null || loan == null) { return; } order.Commission = BankCloudCalculator.CalculateCommission(loan); order.MonthlyFee = BankCloudCalculator.CalculateMounthlyFee(loan); order.Status = OrderStatus.Pending; order.Name = loan.Name; loan.Popularity++; context.OrdersLoans.Add(order); context.SaveChanges(); }
public IActionResult ApproveLoan(string id) { OrderLoan orderedLoanFromDb = this.ordersService.GetSoldOrderLoanById(id); Account sellerAccount = orderedLoanFromDb.Loan.Account; if (sellerAccount.Balance < orderedLoanFromDb.Amount) { this.TempData["error"] = GlobalConstants.ERROR_MESSAGE_FOR_INSUFFICIENT_FUNDS; return(this.Redirect("/Accounts/Index")); } this.ordersService.ApproveLoanRequest(orderedLoanFromDb); return(Redirect("/CreditScorings/MySells")); }
public void GetOrderLoanByIdShouldReturnCorrectOrderLoan() { var options = new DbContextOptionsBuilder <BankCloudDbContext>() .UseInMemoryDatabase(databaseName: "GetOrderLoanById_Database") .Options; var dbContext = new BankCloudDbContext(options); var ordersService = new OrdersService(dbContext, null); var orderId = "123abc"; var order = new OrderLoan { Id = orderId }; dbContext.OrdersLoans.Add(order); dbContext.SaveChanges(); var returnedOrder = ordersService.GetOrderLoanById(orderId); Assert.Equal(order, returnedOrder); }
public IActionResult OrderLoan(OrdersOrderLoanInputModel model) { Product loanFromDb = this.productsService.GetProductById(model.Id); BankUser userFromDb = this.usersService.GetCurrentUser(); this.ViewData["Accounts"] = this.accountsService.GetUserAccounts(); OrderLoan order = this.mapper.Map <OrderLoan>(model); if (userFromDb.Id == loanFromDb.Account.BankUserId) { return(this.Redirect("/")); } if (!userFromDb.Accounts.Any()) { return(this.Redirect("/Accounts/Activate")); } //TODO: add message for invalid parameters if (!ModelState.IsValid || model.Amount > loanFromDb.Amount || model.Period > loanFromDb.Period || model.InterestRate != loanFromDb.InterestRate) { //TODO: refactor this!!! model.Name = loanFromDb.Name; model.CurrencyName = loanFromDb.Account.Currency.Name; model.UserCurrencyTypes = this.accountsService.GetUserAccounts() .Select(x => x.Currency.Name).ToList(); return(this.View(model)); } this.ordersService.AddOrderLoan(order, loanFromDb); return(this.Redirect("/Users/OrderedLoans")); }