public ActionResult ComponentDelivery_Delete(ComponentDelivery componentDelivery)
        {
            ComponentDelivery componentDeliveryToRemove = _context.Set <ComponentDelivery>()
                                                          .Include(item => item.ComponentDelivered).Where(x => x.Id == componentDelivery.Id).FirstOrDefault();

            componentDeliveryToRemove.Active = false;
            _componentDeliveryRepository.Update(componentDeliveryToRemove);
            return(RedirectToAction("ComponentDelivery_List"));
        }
        public ActionResult ComponentDelivery_Delete(int id)
        {
            ComponentDelivery componentDelivery = _context.Set <ComponentDelivery>()
                                                  .Include(item => item.ComponentDelivered).Include(item => item.ItemDelivered).Where(x => x.Id == id).FirstOrDefault();

            if (componentDelivery.Amount == componentDelivery.LeftOver)
            {
                return(View(componentDelivery));
            }
            else
            {
                return(RedirectToAction("ComponentDelivery_List"));
            }
        }
        public ActionResult ComponentDelivery_Create(ComponentDelivery componentDelivery)
        {
            if (componentDelivery.ComponentDelivered != null)
            {
                componentDelivery.ComponentDelivered =
                    _componentRepository.GetByID(componentDelivery.ComponentDelivered.Id);
            }

            if (componentDelivery.ItemDelivered != null)
            {
                componentDelivery.ItemDelivered = _itemRepository.GetByID(componentDelivery.ItemDelivered.Id);
            }

            componentDelivery.CoffeShop    = _coffeShopRepository.GetByID(componentDelivery.CoffeShop.Id);
            componentDelivery.DeliveryTime = DateTime.Now;
            componentDelivery.Active       = true;
            componentDelivery.LeftOver     = componentDelivery.Amount;
            _componentDeliveryRepository.Add(componentDelivery);
            return(RedirectToAction("ComponentDelivery_List"));
        }
        public ActionResult Order_Accept(List <int> items)
        {
            if (HttpContext.Session.GetString("userRole") == null)
            {
                return(RedirectToAction("Login", "Account"));
            }

            List <Item> orderedItems  = (from item in items select _itemRepository.GetByID(item)).ToList();
            User        employee      = _userRepository.GetByID((int)HttpContext.Session.GetInt32("userId"));
            OrderVM     acceptedOrder = new OrderVM(orderedItems, employee);
            double      FinalPrice    = 0.0;

            foreach (var orderedItem in orderedItems)
            {
                FinalPrice += orderedItem.Price;
            }

            acceptedOrder.FinalPrice = FinalPrice;
            Order order = new Order
            {
                CreatorUser = employee
            };

            // order.OrderItems =
            order.FinalPrice    = FinalPrice;
            order.OrderDateTime = DateTime.Now;
            order.Active        = true;

            List <OrderItem> OrderItems = new List <OrderItem>();

            foreach (var orderedItem in orderedItems)
            {
                OrderItems.Add(new OrderItem()
                {
                    Item = orderedItem, ItemId = orderedItem.Id
                });
            }
            //Przeniesc do servisu

            foreach (var orderItem in OrderItems)
            {
                List <ItemComponent> ItemComponents = _context.Set <Item>().Include(y => y.ItemComponents)
                                                      .Where(x => x.Id == orderItem.Item.Id).FirstOrDefault().ItemComponents;

                ItemComponents = (from ItemComponent in ItemComponents
                                  select _context.Set <ItemComponent>().Include(y => y.CurrentComponent).Where(y => y.Id == ItemComponent.Id)
                                  .FirstOrDefault()).ToList();


                if (ItemComponents.Count == 0)
                {
                    List <ComponentDelivery> deliveries = _context.Set <ComponentDelivery>().Include(y => y.ItemDelivered)
                                                          .Where(y => y.AlreadyUsed == false && y.ItemDelivered.Id == orderItem.Item.Id).OrderByDescending(x => x.DeliveryTime).ToList();
                    ComponentDelivery currentDelivery = deliveries.FirstOrDefault();
                    if (currentDelivery != null)
                    {
                        orderItem.ItemCost        = currentDelivery.DeliveryPrice / currentDelivery.Amount;
                        currentDelivery.LeftOver -= 1;


                        if (currentDelivery.LeftOver == 0)
                        {
                            currentDelivery.AlreadyUsed = true;
                        }
                    }
                }
                else
                {
                    foreach (var itemComponent in ItemComponents)
                    {
                        List <ComponentDelivery> deliveries = _context.Set <ComponentDelivery>().Include(x => x.ComponentDelivered).
                                                              Where(y => y.AlreadyUsed == false && y.ComponentDelivered.Id == itemComponent.CurrentComponent.Id).OrderByDescending(x => x.DeliveryTime).ToList();

                        ComponentDelivery currentDelivery = deliveries.FirstOrDefault();
                        if (currentDelivery != null)
                        {
                            orderItem.ItemCost += itemComponent.Amount / currentDelivery.Amount *
                                                  currentDelivery.DeliveryPrice;
                            if (currentDelivery.LeftOver >= itemComponent.Amount)
                            {
                                currentDelivery.LeftOver -= itemComponent.Amount;
                            }
                            else
                            {
                                double toRemove = itemComponent.Amount - currentDelivery.LeftOver;
                                currentDelivery.LeftOver    = 0;
                                currentDelivery.AlreadyUsed = true;
                                deliveries[1].LeftOver     -= toRemove;
                            }
                        }
                    }
                }
                orderItem.ItemPrice = orderItem.Item.Price;
                // _context.Set<OrderItem>().Add(orderItem);
            }



            order.OrderItems = OrderItems;
            foreach (var orderItem in OrderItems)
            {
                order.OrderCost += orderItem.ItemCost;
            }

            _context.Set <Order>().Add(order);
            _context.SaveChanges();



            return(View(acceptedOrder));
        }