Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        public IActionResult OrderedLoanDetails(string id)
        {
            OrderLoan userOrderedLoanFromDB = this.ordersService.GetOrderLoanById(id);

            var detailOrderLoan = this.mapper
                                  .Map <OrderedLoansDetailViewModel>(userOrderedLoanFromDB);

            return(View(detailOrderLoan));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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"));
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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"));
        }