public IActionResult OrderSave(OrdersOrderSaveInputModel model)
        {
            Product saveFromDb = this.productsService.GetProductById(model.Id);

            BankUser userFromDb = this.usersService.GetCurrentUser();

            if (userFromDb.Id == saveFromDb.Account.BankUserId)
            {
                return(this.Redirect("/"));
            }

            if (!userFromDb.Accounts.Any())
            {
                return(this.Redirect("/Accounts/Activate"));
            }

            this.ViewData["Accounts"] = this.accountsService.GetUserAccounts();

            OrderSave order = this.mapper.Map <OrderSave>(model);

            if (!ModelState.IsValid ||
                saveFromDb.InterestRate != model.InterestRate ||
                saveFromDb.Period != model.Period)
            {
                return(this.View(model));
            }

            this.ordersService.AddOrderSave(order, saveFromDb);

            return(this.Redirect("/Users/OrderedSaves"));
        }
        public void ApproveSaveRequest(OrderSave orderedSave)
        {
            Account depositorAccount = orderedSave.Account;
            Account sellerAccount    = orderedSave.Save.Account;

            double depositAmount = (double)orderedSave.Amount;
            double monthlyIncome = (double)orderedSave.MonthlyFee;

            if (depositorAccount.Currency.IsoCode != sellerAccount.Currency.IsoCode)
            {
                ExchangeRate rateFromTo = Fixer
                                          .Rate(sellerAccount.Currency.IsoCode, depositorAccount.Currency.IsoCode);

                depositAmount = rateFromTo.Convert(depositAmount);
                monthlyIncome = rateFromTo.Convert(monthlyIncome);
            }

            depositorAccount.Balance       -= (decimal)depositAmount;
            depositorAccount.MonthlyIncome += (decimal)monthlyIncome;
            //TODO every mounts task transfer
            sellerAccount.Balance        += orderedSave.Amount;
            sellerAccount.MonthlyOutcome += orderedSave.MonthlyFee;

            orderedSave.CompletedOn = DateTime.UtcNow;
            orderedSave.Status      = OrderStatus.Approved;

            this.context.SaveChanges();
        }
Exemple #3
0
        public void AddOrderSaveShouldAddOrderSave()
        {
            var options = new DbContextOptionsBuilder <BankCloudDbContext>()
                          .UseInMemoryDatabase(databaseName: "Add_OrderSave_Database")
                          .Options;

            var dbContext = new BankCloudDbContext(options);

            var ordersService = new OrdersService(dbContext, null);

            var product = new Save
            {
                Name         = "ABCD",
                Amount       = 1000m,
                Commission   = 0,
                InterestRate = 10m,
                Period       = 12
            };
            var order = new OrderSave
            {
                Name = product.Name,
            };

            order.MonthlyFee = BankCloudCalculator.CalculateDepositMonthlyIncome(order, product);
            ordersService.AddOrderSave(order, product);
            dbContext.SaveChanges();

            var orders = dbContext.OrdersSaves.ToList();

            Assert.Single(orders);
            Assert.Equal(order.Name, orders.First().Name);
        }
        public IActionResult OrderedSaveDetails(string id)
        {
            OrderSave userOrderedSaveFromDB = this.ordersService.GetOrderSaveById(id);

            var detailOrderSave = this.mapper
                                  .Map <OrderedSavesDetailViewModel>(userOrderedSaveFromDB);

            return(View(detailOrderSave));
        }
Exemple #5
0
        public void ApproveSaveRequestSholudSetOrderSaveToApprove()
        {
            var options = new DbContextOptionsBuilder <BankCloudDbContext>()
                          .UseInMemoryDatabase(databaseName: "Approve_OrderSave_Database")
                          .Options;

            var dbContext = new BankCloudDbContext(options);

            var ordersService = new OrdersService(dbContext, null);

            var orderId = "abcd123";
            var product = new Save
            {
                Name         = "ABCD",
                Amount       = 1000m,
                Commission   = 0,
                InterestRate = 10m,
                Period       = 12,
                Account      = new Account {
                    Currency = new Currency {
                        IsoCode = "USD"
                    }
                }
            };
            var order = new OrderSave
            {
                Id      = orderId,
                Name    = product.Name,
                Save    = product,
                Account = new Account {
                    Currency = new Currency {
                        IsoCode = "USD"
                    }
                }
            };

            order.MonthlyFee = BankCloudCalculator.CalculateDepositMonthlyIncome(order, product);
            dbContext.OrdersSaves.Add(order);
            dbContext.SaveChanges();

            var ordered = dbContext.OrdersSaves.Find(orderId);

            ordersService.ApproveSaveRequest(ordered);
            dbContext.SaveChanges();

            var approved = dbContext.OrdersSaves.Find(orderId);

            Assert.Equal(OrderStatus.Approved, approved.Status);
        }
        public void AddOrderSave(OrderSave order, Product save)
        {
            if (order == null || save == null)
            {
                return;
            }

            order.MonthlyFee = BankCloudCalculator.CalculateDepositMonthlyIncome(order, save);
            order.Status     = OrderStatus.Pending;
            order.Name       = save.Name;
            save.Popularity++;

            context.OrdersSaves.Add(order);
            context.SaveChanges();
        }
        public IActionResult ApproveSave(string id)
        {
            OrderSave orderedSaveFromDb = this.ordersService.GetSoldOrderSaveById(id);

            var depositorAccount = orderedSaveFromDb.Account;

            Account sellerAccount = orderedSaveFromDb.Save.Account;

            if (depositorAccount.Balance < orderedSaveFromDb.Amount)
            {
                this.TempData["error"] = GlobalConstants.ERROR_MESSAGE_FOR_DEPOSITOR_DOES_NOT_HAVE_MONEY;
                var view = this.mapper.Map <Order, CreditScoringsOrderedSaveDetailViewModel>(orderedSaveFromDb);
                return(this.View("SaveDetailRequest", view));
            }

            this.ordersService.ApproveSaveRequest(orderedSaveFromDb);

            return(Redirect("/CreditScorings/MySells"));
        }
Exemple #8
0
        public ActionResult CheckOut(string jsonData)
        {
            string message = string.Empty;

            try {
                OrderSave     objsave       = JsonConvert.DeserializeObject <OrderSave>(jsonData);
                MasterService masterService = new MasterService();
                message = masterService.SaveFinalOrder(objsave.UserInfo, objsave.ItemData);
                if (message != "ERROR")
                {
                    SandEmial(objsave.UserInfo.CustomerName, message, objsave.UserInfo.EmailId);
                    //return RedirectToAction("OrderConfomataionPage", new { odernumer = message });
                }
            }
            catch (Exception ex)

            {
                message = "ERROR";
            }
            return(Content(message));
        }
Exemple #9
0
        public void GetOrderSaveByIdShouldReturnCorrectOrderSave()
        {
            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 OrderSave {
                Id = orderId
            };

            dbContext.OrdersSaves.Add(order);
            dbContext.SaveChanges();

            var returnedOrder = ordersService.GetOrderSaveById(orderId);

            Assert.Equal(order, returnedOrder);
        }
Exemple #10
0
        public void RejectRequestShouldSetOrderRajected()
        {
            var options = new DbContextOptionsBuilder <BankCloudDbContext>()
                          .UseInMemoryDatabase(databaseName: "RejectReques_Order_Database")
                          .Options;

            var dbContext = new BankCloudDbContext(options);

            var ordersService = new OrdersService(dbContext, null);

            var orderId = "abcd123";
            var product = new Save
            {
                Name         = "ABCD",
                Amount       = 1000m,
                Commission   = 0,
                InterestRate = 10m,
                Period       = 12
            };
            var order = new OrderSave
            {
                Id   = orderId,
                Name = product.Name,
            };

            ordersService.AddOrderSave(order, product);
            dbContext.SaveChanges();

            var ordered = dbContext.OrdersSaves.Find(orderId);

            ordersService.RejectRequest(ordered);
            dbContext.SaveChanges();
            var rejected = dbContext.OrdersSaves.Find(orderId);

            Assert.Equal(OrderStatus.Rejected, rejected.Status);
        }
Exemple #11
0
 public static decimal CalculateDepositMonthlyIncome(OrderSave order, Product save)
 {
     return((order.Amount / 100) * save.InterestRate);
 }