Esempio n. 1
0
        public IActionResult Register([FromForm] UserRegDetails user)
        {
            // If there are no existing users with same email address, create new user object and add to database.
            // Returns success page. Otherwise redirect to home.

            User test = db.Users.FirstOrDefault(x => x.Email == user.Email);
            ValidateRegistration test2 = new ValidateRegistration();

            if (test2.ValidateDOB(user.DOB) && test2.ValidateEmail(user.Email) && test2.ValidatePassword(user.Password))
            {
                if (test == null)
                {
                    var  result  = PasswordHasher.CreateHash(user.Password);
                    User newUser = new User();
                    newUser.Id           = ShortGuid.Shorten(Guid.NewGuid());
                    newUser.FirstName    = user.FirstName;
                    newUser.LastName     = user.LastName;
                    newUser.Email        = user.Email;
                    newUser.PasswordHash = result[0];
                    newUser.Salt         = result[1];
                    newUser.DOB          = Convert.ToDateTime(user.DOB);
                    newUser.Address      = user.Address;
                    db.Users.Add(newUser);
                    db.SaveChanges();
                    return(View("Success"));
                }
                else
                {
                    ViewData["Error"] = "Error: Account creation failed because email has already been used.";
                    return(View("Register"));
                }
            }
            else
            {
                ViewData["Error"] = "Error: Incorrect data was given.";
                return(View("Register"));
            }
        }
Esempio n. 2
0
        public async Task <IActionResult> Checkout()
        {
            List <Order>       newOrderList        = new List <Order>();
            List <OrderDetail> newOrderDetailsList = new List <OrderDetail>();
            int i = 0;

            //generate orderId
            //Add order and orderdetal data into database after purchase.
            var newOrderId = ShortGuid.Shorten(Guid.NewGuid());

            List <Cart> userCart = new List <Cart>();
            string      userId   = User.FindFirst("userId").Value;

            userCart = db.Users.FirstOrDefault(u => u.Id == userId).Carts.ToList();

            //While we are adding order and orderdetail data into the database, we will populate the view data as well for the reciept

            List <CheckOutViewModel> recieptList = new List <CheckOutViewModel>();

            Order newOrder = new Order()
            {
                UserId    = userId,
                Id        = newOrderId,
                Timestamp = DateTime.Now
            };

            db.Orders.Add(newOrder);
            db.SaveChanges();

            //Debug.WriteLine(newOrder.Id);
            //Debug.WriteLine(newOrder);

            foreach (var cartItem in userCart)
            {
                while (i < cartItem.Qty)
                {
                    //Populate OrderDetail & add to database
                    OrderDetail newOrderDetail = new OrderDetail()
                    {
                        ActivationCode = Guid.NewGuid().ToString(),
                        OrderId        = newOrderId,
                        ProductId      = cartItem.ProductId
                    };

                    db.OrderDetails.Add(newOrderDetail);
                    db.SaveChanges();

                    //Debug.WriteLine(newOrderDetail);
                    //Debug.WriteLine(newOrderDetail.ActivationCode);

                    //populate the checkoutviewmodel
                    CheckOutViewModel reciept = new CheckOutViewModel()
                    {
                        ImgURL         = cartItem.Product.ImgURL,
                        ProductName    = cartItem.Product.ProductName,
                        ProductDesc    = cartItem.Product.ProductDesc,
                        ActivationCode = newOrderDetail.ActivationCode,
                        Qty            = cartItem.Qty,
                        UnitPrice      = cartItem.Product.UnitPrice,
                        Discount       = cartItem.Product.Discount
                    };

                    recieptList.Add(reciept);
                    i++;
                }
                i = 0;
            }

            var receiptView = recieptList.GroupBy(o => o.ProductName);

            //mapping the orderviewmodel into to the view using viewdata
            ViewData["RecieptView"] = receiptView;

            // create Receipt model and pass it to EmailReceipt.SendReceipt
            var receipt = new Receipt
            {
                OrderId = newOrderId
            };

            foreach (var group in receiptView)
            {
                List <string> activationCodes = group.Select(g => g.ActivationCode).ToList();

                receipt.ReceiptItems.Add(new ReceiptItem
                {
                    ProductName     = group.First().ProductName,
                    ActivationCodes = activationCodes,
                    UnitPrice       = group.First().UnitPrice,
                    Qty             = group.First().Qty,
                    Discount        = group.First().Discount
                });
            }

            var emailStatus = await EmailReceipt.SendReceipt(db.Users.FirstOrDefault(u => u.Id == userId).Email, receipt);

            if (!emailStatus.IsSuccessful)
            {
                //Debug.WriteLine("Email receipt unsuccessful");
            }

            //Clearing the Cart table in database after purchase
            foreach (var cartDelete in userCart)
            {
                db.Carts.Remove(cartDelete);
            }
            db.SaveChanges();

            //Remove cart session data
            HttpContext.Session.Remove("cart");
            HttpContext.Session.Remove("cartCount");

            return(View());
        }