Ejemplo n.º 1
0
        public async Task <IActionResult> AddToBasket(int productId, string username)
        {
            if (!_signInManager.IsSignedIn(User))
            {
                return(RedirectToAction("Login", "Account"));
            }

            //Get user's basket by username
            Basket basket = await _basketManager.FindBasketByUserLazy(username);

            // If basket for user doesn't exist yet, create one
            if (basket == null)
            {
                basket = new Basket()
                {
                    ID          = 0,
                    UserName    = username,
                    Subtotal    = 0,
                    BasketItems = new List <BasketItem>()
                };

                await _basketManager.CreateBasket(basket);

                // Gets the new basket with assigned ID from DB
                basket = await _basketManager.FindBasketByUserLazy(username);
            }

            // Check basketitems basket ID and product ID
            BasketItem basketItem = await _basketItemManager.FindBasketItem(basket.ID, productId);

            // If item doesn't already exist, create it; otherwise update it
            if (basketItem == null)
            {
                basketItem = new BasketItem()
                {
                    ID        = 0,
                    BasketID  = basket.ID,
                    ProductID = productId,
                    Quantity  = 1
                };

                await _basketItemManager.CreateBasketItem(basketItem);
            }
            else
            {
                basketItem.Quantity++;
                await _basketItemManager.UpdateBasketItem(basketItem);
            }
            // Redirect to Shop action on Shop page
            return(RedirectToAction("Shop", "Shop"));
        }
Ejemplo n.º 2
0
        public JsonResult AddToCart(string partNo, int quantity)
        {
            var currentBasket = GetCurrentBasket();

            if (string.IsNullOrEmpty(currentBasket.ExternalId))
            {
                currentBasket = (BasketDto)_basketManager.CreateBasket(_sessionModel.CurrentUser);
                _sessionModel.CurrentBasketId = currentBasket.ExternalId;
            }

            currentBasket = (BasketDto)_basketManager.AddItem(_sessionModel.CurrentUser, currentBasket.ExternalId, partNo, quantity);

            return(Json(currentBasket));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Register(RegistrationViewModel model)
        {
            if (ModelState.IsValid)
            {
                ApplicationUser user = new ApplicationUser
                {
                    UserName  = model.EmailAddress,
                    Email     = model.EmailAddress,
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    Computer  = model.Computer
                };

                var result = await _userManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    // Add custom Claims based on user input
                    Claim nameClaim     = new Claim("FullName", $"{user.FirstName} {user.LastName}");
                    Claim emailClaim    = new Claim(ClaimTypes.Email, user.Email, ClaimValueTypes.Email);
                    Claim computerClaim = new Claim("Computer", user.Computer.ToString());

                    List <Claim> claims = new List <Claim> {
                        nameClaim, emailClaim, computerClaim
                    };

                    await _userManager.AddClaimsAsync(user, claims);

                    // Add Roles to specific users
                    if (user.Email.ToLower().Contains("@codefellows.com") || user.Email.ToLower() == "*****@*****.**" || user.Email.ToLower() == "*****@*****.**" || user.Email.ToLower() == "*****@*****.**")
                    {
                        await _userManager.AddToRoleAsync(user, ApplicationRoles.Admin);
                    }

                    await _userManager.AddToRoleAsync(user, ApplicationRoles.Member);

                    // Send user a confirmation email
                    string        subject = "Welcome to 8-Bit Twist!";
                    StringBuilder sb      = new StringBuilder();

                    sb.AppendLine("<h1>Welcome to 8-Bit Twist!</h1>");
                    sb.AppendLine($"<p>Dear {user.FirstName}</p>");
                    sb.AppendLine($"<p>Thank you for joining <a href=\"https://8-bit-twist.azurewebsites.net/\">8-Bit Twist</a>!</p>");

                    await _emailSender.SendEmailAsync(user.Email, subject, sb.ToString());

                    // Sign user in
                    await _signInManager.SignInAsync(user, false);

                    // Create a new basket for the user
                    Basket basket = await _bsktManager.CreateBasket(user.Id);

                    user.BasketID = basket.ID;
                    await _userManager.UpdateAsync(user);

                    // If user is Admin, redirect to Admin dashboard
                    if (await _userManager.IsInRoleAsync(user, ApplicationRoles.Admin))
                    {
                        return(RedirectToPage("/Admin/Index"));
                    }

                    // Redirect to home page
                    return(RedirectToAction("Index", "Home"));
                }
            }
            return(View(model));
        }
        public async Task <IActionResult> Register(RegisterViewModel rvm)
        {
            if (ModelState.IsValid)
            {
                ApplicationUser user = new ApplicationUser
                {
                    Email       = rvm.Email,
                    UserName    = rvm.Email,
                    FirstName   = rvm.FirstName,
                    LastName    = rvm.LastName,
                    Birthday    = rvm.Birthday,
                    LoveAnimals = rvm.LoveAnimals
                };
                var result = await _userManager.CreateAsync(user, rvm.Password);

                if (!result.Succeeded)
                {
                    ModelState.AddModelError(string.Empty, "I'm sorry, something went wrong. Please try again.");
                }


                ///Sets claims

                if (result.Succeeded)
                {
                    Claim nameClaim = new Claim("FullName", $"{user.FirstName} { user.LastName} ");

                    Claim emailClaim = new Claim(ClaimTypes.Email, user.Email, ClaimValueTypes.Email);

                    Claim dateOfBirthClaim = new Claim(ClaimTypes.DateOfBirth, new DateTime(user.Birthday.Year, user.Birthday.Month, user.Birthday.Day).ToString("u"), ClaimValueTypes.DateTime);

                    Claim loveAnimalsClaim = new Claim("LovesAnimals", user.LoveAnimals);

                    List <Claim> claims = new List <Claim> {
                        nameClaim, emailClaim, dateOfBirthClaim, loveAnimalsClaim
                    };

                    await _userManager.AddClaimsAsync(user, claims);

                    //give the user a role.
                    if (rvm.Email.ToLower() == "*****@*****.**")
                    {
                        await _userManager.AddToRoleAsync(user, ApplicationRoles.Admin);
                    }
                    if (rvm.Email.ToLower() == "*****@*****.**")
                    {
                        await _userManager.AddToRoleAsync(user, ApplicationRoles.Admin);
                    }
                    if (rvm.Email.ToLower() == "*****@*****.**")
                    {
                        await _userManager.AddToRoleAsync(user, ApplicationRoles.Admin);
                    }
                    if (rvm.Email.ToLower() == "*****@*****.**")
                    {
                        await _userManager.AddToRoleAsync(user, ApplicationRoles.Admin);
                    }

                    await _userManager.AddToRoleAsync(user, ApplicationRoles.Member);



                    ///Sends emails on registration
                    await _emailSender.SendEmailAsync(rvm.Email, "Thank you for registering", "<p> Hello Welcome </p>");

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    Basket basket = new Basket()
                    {
                        TotalItems = 0,
                        TotalPrice = 0,
                        UserName   = user.UserName,
                        BasketList = null
                    };
                    await _context.CreateBasket(basket);

                    return(RedirectToAction("Index", "Home"));
                }
            }
            return(View(rvm));
        }