public IActionResult Payment()
        {
            try
            {
                var userId       = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
                var orderSummery = _context.Cart.Where(p => p.CustomerId == userId).ToList();

                OrderPlaceViewModel orderPlace = new OrderPlaceViewModel();

                orderPlace.OrderDetail    = orderSummery;
                orderPlace.ShippingDetail = GetShippingCharges(orderSummery);

                return(View("Payment", orderPlace));
            }
            catch (Exception e)
            {
                throw;
            }
        }
        public IActionResult Index(string Id)
        {
            var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            OrderPlaceViewModel orderPlace = new OrderPlaceViewModel();

            orderPlace.Account = _context.Account.Find(userId);

            var addresses = _context.Address.Where(p => p.UserId == userId);

            foreach (var address in addresses)
            {
                orderPlace.Address = address;
            }

            var detail = _context.Cart.Where(p => p.CustomerId == userId).ToList();

            orderPlace.OrderDetail = detail;
            orderPlace.VendorId    = Id;

            return(View(orderPlace));
        }
        public async Task <IActionResult> Payment(OrderPlaceViewModel orderPlace)
        {
            var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

            var    carts    = _context.Cart.Where(p => p.CustomerId == userId).ToList();
            string vendorId = "";

            foreach (var cart in carts)
            {
                vendorId = cart.VendorId;
            }

            Order order = new Order();

            order.CustomerId    = userId;
            order.DateCreation  = DateTime.Now.Date;
            order.VendorId      = vendorId;
            order.OrderStatusId = 1;
            order.PaymentId     = 1;

            _context.Order.Add(order);
            await _context.SaveChangesAsync();

            var orderId = order.Id;

            foreach (var cart in carts)
            {
                TopSelling topmodel = new TopSelling();

                var topseller = _context.TopSelling.FirstOrDefault(p => p.ProductId == cart.ProductId);

                if (topseller != null)
                {
                    topmodel       = topseller;
                    topmodel.Count = topseller.Count + 1;

                    _context.TopSelling.Update(topseller);
                    await _context.SaveChangesAsync();
                }
                else
                {
                    topmodel = new TopSelling {
                        ProductId = cart.ProductId, Count = 1
                    };

                    _context.TopSelling.Add(topmodel);
                    await _context.SaveChangesAsync();
                }
                OrderDetail model = new OrderDetail();

                model.OrderId        = orderId;
                model.ProductId      = cart.ProductId;
                model.ProductName    = cart.ProductName;
                model.Color          = cart.Color;
                model.Size           = cart.Size;
                model.OriginalTotal  = cart.OriginalPrice * cart.Quantity;
                model.ShippingCharge = orderPlace.ShippingCharges;
                if (carts.Count() > 1 || cart.Quantity > 1)
                {
                    if (carts.Count > 1)
                    {
                        model.TotalPrice = cart.ComboPrice * cart.Quantity;
                    }
                    else
                    {
                        model.TotalPrice = cart.DiscountPrice * cart.Quantity;
                    }
                }
                else
                {
                    model.TotalPrice = cart.OriginalPrice;
                }
                model.Quantity = cart.Quantity;

                _context.OrdersDetail.Add(model);
                await _context.SaveChangesAsync();
            }

            foreach (var cart in carts)
            {
                int Id      = cart.ProductId;
                var product = _context.Products.Find(Id);

                int q = product.Quantity - cart.Quantity;

                Product model = new Product();

                model          = product;
                model.Quantity = q;

                _context.Products.Update(model);
                await _context.SaveChangesAsync();
            }

            RemoveCarts(carts);

            return(RedirectToAction("Success", "Order", new { @Id = orderId }));
        }