private async Task <BuyMovieViewModel> GetPaymentModel(Guid id)
        {
            MovieServiceModel movieModel = await this.movieService.FindMovie(id);

            User user = await userManager.GetUserAsync(HttpContext.User);

            IList <string> roles = await userManager.GetRolesAsync(user);

            string role = roles.SingleOrDefault();

            movieModel.Price = movieModel.Prices.SingleOrDefault(x => x.Role.Name == role).MoviePrice;

            UserBalanceServiceModel userBalanceModel = new UserBalanceServiceModel();

            userBalanceModel = this.userBalanceService.GetUserBalance(user.Id);

            BuyMovieViewModel buyMovieViewModel = new BuyMovieViewModel();

            buyMovieViewModel.Balance   = userBalanceModel.Balance;
            buyMovieViewModel.MovieId   = id;
            buyMovieViewModel.Price     = movieModel.Price;
            buyMovieViewModel.MovieName = movieModel.Name;

            return(buyMovieViewModel);
        }
Example #2
0
        public async Task <IActionResult> Balance()
        {
            User user = await userManager.GetUserAsync(HttpContext.User);

            UserBalanceServiceModel userBalanceModel = new UserBalanceServiceModel();

            userBalanceModel = this.userBalanceService.GetUserBalance(user.Id);

            return(View(userBalanceModel));
        }
Example #3
0
        public async Task <IActionResult> Balance(UserBalanceServiceModel userBalanceModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(userBalanceModel));
            }

            User user = await userManager.GetUserAsync(HttpContext.User);

            await this.userBalanceService.AddAmount(userBalanceModel, user.Id);

            TempData.AddSuccessMessage($"Successfully added {userBalanceModel.Balance} BGN to your account");

            return(RedirectToAction(nameof(Balance)));
        }
Example #4
0
        public UserBalanceServiceModel GetUserBalance(string userId)
        {
            UserMoneyBalance userBalance = this.Db.UserMoneyBalance
                                           .SingleOrDefault(x => x.UserId == userId);

            UserBalanceServiceModel userModel = new UserBalanceServiceModel();

            if (userBalance != null)
            {
                userModel.Balance = userBalance.Balance;
                userModel.Id      = userBalance.Id;
            }
            else
            {
                userModel.Balance = Decimal.Zero;

                return(userModel);
            }

            return(userModel);
        }
Example #5
0
        public async Task AddAmount(UserBalanceServiceModel userModel, string userId)
        {
            if (this.Db.UserMoneyBalance.Any(u => u.UserId == userId))
            {
                UserMoneyBalance userMoneyBalance = await this.Db.UserMoneyBalance.FindAsync(userModel.Id);

                UserBalanceServiceModel userBalanceServiceModel = GetUserBalance(userId);

                userMoneyBalance.Balance = userModel.Balance + userBalanceServiceModel.Balance;

                this.Db.UserMoneyBalance.Update(userMoneyBalance);
            }
            else
            {
                this.Db.UserMoneyBalance.Add(
                    new UserMoneyBalance
                {
                    Balance = userModel.Balance,
                    UserId  = userId
                });
            }

            await this.Db.SaveChangesAsync();
        }
        public async Task <IActionResult> PayFromBalance(BuyMovieViewModel buyMovieViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(buyMovieViewModel));
            }

            User user = await userManager.GetUserAsync(HttpContext.User);

            UserBalanceServiceModel userBalance = this.userBalanceService.GetUserBalance(user.Id);

            if (userBalance.Balance < buyMovieViewModel.Price || userBalance.Balance == 0)
            {
                TempData.AddErrorMessage("You don't have enough money in your account !");

                return(RedirectToAction(nameof(PayFromBalance), new { id = buyMovieViewModel.MovieId }));
            }

            await this.movieService.BuyMovie(user.Id, buyMovieViewModel.MovieId, buyMovieViewModel.Price);

            TempData.AddSuccessMessage($"Your purchase was successful!");

            return(RedirectToAction(nameof(MovieDetails), new { id = buyMovieViewModel.MovieId }));
        }