public async Task <IActionResult> CreateDeliver(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            var order = await _context.Orders.Include(o => o.Customer).FirstOrDefaultAsync(o => o.Id == id);

            if (order == null || order.OrderStatusId != 9)
            {
                return(NotFound());
            }
            var orderDetails = _context.OrderDetails.Where(o => o.OrderId == order.Id).Include(o => o.Product);
            IList <OrderDetails> orderDetailsList = await orderDetails.ToListAsync();

            IList <CreateDeliverViewModel> deliver = new List <CreateDeliverViewModel>();

            for (int i = 0; i < orderDetailsList.Count; i++)
            {
                CreateDeliverViewModel temp = new CreateDeliverViewModel();
                temp.productId   = orderDetailsList[i].ProductId;
                temp.productName = orderDetailsList[i].Product.Name;
                temp.OrderId     = orderDetailsList[i].OrderId;
                deliver.Add(temp);
            }
            ViewBag.Cars     = new SelectList(_context.Cars, "Id", "RegistrationPlate");
            ViewBag.Order    = order.Id;
            ViewBag.customer = order.Customer.Company;
            return(View(deliver));
        }
        public async Task <IActionResult> CreateDeliver(int?id, IEnumerable <CreateDeliverViewModel> deliverRecived)
        {
            if (id == null)
            {
                return(NotFound());
            }
            var order = await _context.Orders.Include(o => o.Customer).FirstOrDefaultAsync(o => o.Id == id);

            if (order == null || order.OrderStatusId != 9)
            {
                return(NotFound());
            }
            var      orderDetails = _context.OrderDetails.Where(o => o.OrderId == order.Id).Include(o => o.Product);
            DateTime currentDate  = DateTime.Now.Date;
            bool     errorFound   = false;
            int      carid        = 0;
            DateTime?shippingDate = null;

            foreach (var item in deliverRecived)
            {
                if (item.ExpDate < currentDate)
                {
                    errorFound    = true;
                    ViewBag.error = "Date must be from future";
                }
                if (item.CarId != null)
                {
                    carid = (int)item.CarId;
                }
                if (item.ShippingDate != null)
                {
                    shippingDate = item.ShippingDate;
                }
                OrderDetails ord = await _context.OrderDetails.FirstOrDefaultAsync(o => o.OrderId == order.Id && o.ProductId == item.productId);

                ord.ExpDate = item.ExpDate;
                try
                {
                    _context.Update(ord);
                    await _context.SaveChangesAsync();
                }
                catch
                {
                    return(NotFound());
                }
            }
            if (carid == 0)
            {
                errorFound       = true;
                ViewBag.carError = "Select a car";
            }
            if (shippingDate == null || shippingDate <= currentDate)
            {
                errorFound            = true;
                ViewBag.shippingEroor = "Shipping date must be from future";
            }

            if (errorFound)
            {
                IList <OrderDetails> orderDetailsList = await orderDetails.ToListAsync();

                IList <CreateDeliverViewModel> deliver = new List <CreateDeliverViewModel>();
                for (int i = 0; i < orderDetailsList.Count; i++)
                {
                    CreateDeliverViewModel temp = new CreateDeliverViewModel();
                    temp.productId   = orderDetailsList[i].ProductId;
                    temp.productName = orderDetailsList[i].Product.Name;
                    temp.OrderId     = orderDetailsList[i].OrderId;
                    deliver.Add(temp);
                }
                ViewBag.Cars     = new SelectList(_context.Cars, "Id", "RegistrationPlate");
                ViewBag.Order    = order.Id;
                ViewBag.customer = order.Customer.Company;

                return(View(deliver));
            }
            Delivers newDeliver = new Delivers();

            newDeliver.OrderId = order.Id;
            var employee = await GetEmployeeByUserIdAsync();

            newDeliver.EmployeeId      = employee.Id;
            newDeliver.CustomerId      = (int)order.CustomerId;
            newDeliver.CarId           = carid;
            newDeliver.StatusDeliverId = 1;
            _context.Add(newDeliver);
            await _context.SaveChangesAsync();

            foreach (var item in orderDetails)
            {
                DeliverDetails temp = new DeliverDetails();
                temp.ProductId = item.ProductId;
                temp.Quantity  = item.Quantity;
                temp.DeliverId = newDeliver.Id;
                _context.Add(temp);
            }
            order.ShippingDate  = shippingDate;
            order.OrderStatusId = 14;
            try
            {
                _context.Update(order);
                await _context.SaveChangesAsync();
            }
            catch
            {
                return(NotFound());
            }

            return(RedirectToAction("index", "Delivers"));
        }