public async Task <IActionResult> AddAddressToOrder(int cartId)
        {
            var detailCart = new Models.ViewModels.OrderDetailsCart()

            {
                OrderHeader = new Models.OrderHeader()
            };

            detailCart.OrderHeader.OrderTotal = 0;

            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            //retrieve the user object in application user
            ApplicationUser applicationUser = await _db.ApplicationUser.Where(u => u.Id == claim.Value).FirstOrDefaultAsync();

            var cart = _db.ShoppingCart.Where(u => u.ApplicationUserId == claim.Value);

            if (cart != null)
            {
                detailCart.listCart = cart.ToList();
            }

            foreach (var list in detailCart.listCart)
            {
                list.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == list.MenuItemId);

                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotal + (list.MenuItem.Price * list.Count);
            }

            detailCart.OrderHeader.OrderTotalOriginal   = detailCart.OrderHeader.OrderTotal;
            detailCart.OrderHeader.FirstName            = applicationUser.FirstName;
            detailCart.OrderHeader.LastName             = applicationUser.LastName;
            detailCart.OrderHeader.PhoneNumber          = applicationUser.PhoneNumber;
            detailCart.OrderHeader.DeliveryStreet       = applicationUser.StreetAddress;
            detailCart.OrderHeader.DeliveryStreetNumber = applicationUser.StreetNumber;
            detailCart.OrderHeader.DeliveryCountry      = applicationUser.Country;
            detailCart.OrderHeader.DeliveryCity         = applicationUser.City;
            detailCart.OrderHeader.DeliveryPostalCode   = applicationUser.PostalCode;


            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }

            return(View(detailCart));
        }
        public async Task <IActionResult> Index()
        {
            var detailCart = new Models.ViewModels.OrderDetailsCart()
            {
                OrderHeader = new Models.OrderHeader()
            };

            detailCart.OrderHeader.OrderTotal = 0;

            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            var cart = _db.ShoppingCart.Where(u => u.ApplicationUserId == claim.Value);

            if (cart != null)
            {
                detailCart.listCart = cart.ToList();
            }

            foreach (var list in detailCart.listCart)
            {
                list.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == list.MenuItemId);

                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotal + (list.MenuItem.Price * list.Count);
                list.MenuItem.Description         = SD.ConvertToRawHtml(list.MenuItem.Description);
                if (list.MenuItem.Description.Length > 100)
                {
                    list.MenuItem.Description = list.MenuItem.Description.Substring(0, 99) + "...";
                }
            }

            detailCart.OrderHeader.OrderTotalOriginal = detailCart.OrderHeader.OrderTotal;

            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            return(View(detailCart));
        }
        public async Task <IActionResult> Summary(OrderHeader orderHeader)
        {
            var detailCart = new Models.ViewModels.OrderDetailsCart()

            {
                //OrderHeader = new Models.OrderHeader()
                OrderHeader = orderHeader
            };

            detailCart.OrderHeader.OrderTotal = 0;

            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            //retrieve the user object in application user
            ApplicationUser applicationUser = await _db.ApplicationUser.Where(u => u.Id == claim.Value).FirstOrDefaultAsync();

            //save application user data
            applicationUser.FirstName     = orderHeader.FirstName;
            applicationUser.LastName      = orderHeader.LastName;
            applicationUser.Family        = orderHeader.LastName;
            applicationUser.PhoneNumber   = orderHeader.PhoneNumber;
            applicationUser.StreetAddress = orderHeader.DeliveryStreet;
            applicationUser.StreetNumber  = orderHeader.DeliveryStreetNumber;
            applicationUser.City          = orderHeader.DeliveryCity;
            applicationUser.Country       = orderHeader.DeliveryCountry;
            applicationUser.PostalCode    = orderHeader.DeliveryPostalCode;

            _db.ApplicationUser.Update(applicationUser);
            await _db.SaveChangesAsync();

            var cart = _db.ShoppingCart.Where(u => u.ApplicationUserId == claim.Value);

            if (cart != null)
            {
                detailCart.listCart = cart.ToList();
            }

            foreach (var list in detailCart.listCart)
            {
                list.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == list.MenuItemId);

                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotal + (list.MenuItem.Price * list.Count);
            }

            detailCart.OrderHeader.OrderTotalOriginal = detailCart.OrderHeader.OrderTotal;

            detailCart.OrderHeader.PickupName  = applicationUser.LastName;
            detailCart.OrderHeader.PhoneNumber = applicationUser.PhoneNumber;
            detailCart.OrderHeader.PickUpDate  = DateTime.Now;

            //detailCart.OrderHeader

            // address need to be passed here

            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            return(View(detailCart));
        }