public IActionResult TakeoutOrderForm(AddOrderedMealViewModel model)
        {
            if (model.OrderedMeals == null)
            {
                model.OrderedMeals = new List <OrderedMeal>();
            }

            var meal = new OrderedMeal
            {
                MenuEntryId = (int)model.CurrentOrderedMealId,
                Quantity    = (int)model.Quantity,
                Comment     = model.Comments,
                Price       = _context.MenuEntries.Find(model.CurrentOrderedMealId).Price
            };

            model.OrderedMeals.Add(meal);

            CreateTakeoutPriorityOrderQueue(model);


            var menuEntries = _context.MenuEntries.Include(m => m.Menu).ToList();
            var selectList  = new List <SelectListItem>();

            foreach (var entry in menuEntries)
            {
                selectList.Add(new SelectListItem()
                {
                    Value = entry.MenuEntryId.ToString(),
                    Text  = entry.MenuEntryName,
                });;
            }
            ViewData["Menu"] = new SelectList(selectList, "Value", "Text");
            return(Redirect("/User/TakeoutOrdersPage"));
        }
Beispiel #2
0
        public IActionResult AddOrderedMeal(int?id, AddOrderedMealViewModel model)
        {
            if (model.OrderedMeals == null)
            {
                model.OrderedMeals = new List <OrderedMeal>();
            }

            var meal = new OrderedMeal
            {
                InOrderOrderId = (int)model.OrderId,
                MenuEntryId    = (int)model.CurrentOrderedMealId,
                Quantity       = (int)model.Quantity,
                Comment        = model.Comments,
                Price          = _context.MenuEntries.Find(model.CurrentOrderedMealId).Price
            };

            model.OrderedMeals.Add(meal);

            foreach (var m in model.OrderedMeals)
            {
                var om = new OrderedMeal
                {
                    InOrderOrderId = (int)model.OrderId,
                    MenuEntryId    = m.MenuEntryId,
                    Quantity       = m.Quantity,
                    Comment        = m.Comment,
                    Price          = m.Price
                };
                _context.Add(om);
            }
            _context.SaveChanges();


            var menuEntries = _context.MenuEntries.Include(m => m.Menu).ToList();
            var selectList  = new List <SelectListItem>();

            foreach (var entry in menuEntries)
            {
                selectList.Add(new SelectListItem()
                {
                    Value = entry.MenuEntryId.ToString(),
                    Text  = entry.MenuEntryName,
                });;
            }
            ViewData["Menu"] = new SelectList(selectList, "Value", "Text");
            return(Redirect("/Waiter/OrderPage/" + model.OrderId.ToString()));
        }
        // AddOrderedMeals for order GET
        public IActionResult TakeoutOrderForm()
        {
            var model = new AddOrderedMealViewModel();

            model.OrderedMeals   = new List <OrderedMeal>();
            model.OrderedForDate = DateTime.Now;
            var menuEntries = _context.MenuEntries.Include(m => m.Menu).ToList();
            var selectList  = new List <SelectListItem>();

            foreach (var entry in menuEntries)
            {
                selectList.Add(new SelectListItem()
                {
                    Value = entry.MenuEntryId.ToString(),
                    Text  = entry.MenuEntryName,
                });;
            }

            ViewData["Menu"] = new SelectList(selectList, "Value", "Text");
            return(View(model));
        }
Beispiel #4
0
        public IActionResult AddOrderedMealAdd(AddOrderedMealViewModel model)
        {
            if (model.OrderedMeals == null)
            {
                model.OrderedMeals = new List <OrderedMeal>();
            }

            var meal = new OrderedMeal {
                InOrderOrderId = (int)model.OrderId,
                MenuEntryId    = (int)model.CurrentOrderedMealId,
                Quantity       = (int)model.Quantity,
                Comment        = model.Comments,
                Price          = _context.MenuEntries.Find(model.CurrentOrderedMealId).Price
            };

            model.OrderedMeals.Add(meal);
            for (int i = 0; i < model.OrderedMeals.Count; i++)
            {
                model.OrderedMeals[i].MenuEntry = _context.MenuEntries.Find(model.OrderedMeals[i].MenuEntryId);
            }
            model.CurrentOrderedMealId = null;
            model.Quantity             = null;
            model.Comments             = null;


            var menuEntries = _context.MenuEntries.Include(m => m.Menu).ToList();
            var selectList  = new List <SelectListItem>();

            foreach (var entry in menuEntries)
            {
                selectList.Add(new SelectListItem()
                {
                    Value = entry.MenuEntryId.ToString(),
                    Text  = entry.MenuEntryName,
                });;
            }
            ViewData["Menu"] = new SelectList(selectList, "Value", "Text");
            return(View("AddOrderedMeal", model));
        }
        public void CreateTakeoutPriorityOrderQueue(AddOrderedMealViewModel model)
        {
            var usrID = HttpContext.Session.GetInt32("userID");

            var users = _context.Users.Include(t => t.TakeoutOrders).Include(r => r.Reservations).ToList();

            foreach (var user in users)
            {
                user.LoyalityPoints  = user.Reservations.Where(r => r.State != (int)OrderState.Canceled).ToList().Count;
                user.LoyalityPoints -= user.Reservations.Where(r => r.State == (int)OrderState.Canceled).ToList().Count;
                user.LoyalityPoints += user.TakeoutOrders.Where(r => r.State != (int)OrderState.Canceled).ToList().Count;
                user.LoyalityPoints -= user.TakeoutOrders.Where(r => r.State == (int)OrderState.Canceled).ToList().Count;
            }

            var takeout = new TakeoutOrder
            {
                OrderedByUserId   = (int)usrID,
                OrderDate         = DateTime.Now,
                OrderedForDate    = (DateTime)model.OrderedForDate,
                Price             = 0,
                State             = (int)OrderState.Created,
                ManagedByWaiterId = 1
            };

            var  minDate           = takeout.OrderedForDate.AddMinutes(-5);
            var  maxDate           = takeout.OrderedForDate.AddMinutes(5);
            var  beforeTake        = _context.TakeoutOrders.Where(d => DateTime.Compare(minDate, d.OrderedForDate) <= 0);
            var  afterTake         = beforeTake.Where(d => DateTime.Compare(maxDate, d.OrderedForDate) >= 0).Include(u => u.OrderedBy);
            var  overlaped         = afterTake.FirstOrDefault();
            bool overlap           = overlaped != null ? true : false;
            int  currentUserPoints = users.Where(l => l.UserId == (int)usrID).FirstOrDefault().LoyalityPoints;
            int  overlapUserPoints = overlap ? overlaped.OrderedBy.LoyalityPoints : 0;

            if (overlap)
            {
                if (overlapUserPoints >= currentUserPoints)
                {
                    takeout.State = (int)OrderState.Canceled;
                    _context.Add(takeout);
                    _context.SaveChanges();

                    foreach (var m in model.OrderedMeals)
                    {
                        var om = new OrderedMeal
                        {
                            InTakeoutTakeoutOrderId = takeout.TakeoutOrderId,
                            MenuEntryId             = m.MenuEntryId,
                            Quantity = m.Quantity,
                            Comment  = m.Comment,
                            Price    = m.Price
                        };
                        _context.Add(om);
                    }
                }
                else
                {
                    overlaped.State = (int)OrderState.Canceled;
                    _context.Update(overlaped);
                    _context.Add(takeout);
                    _context.SaveChanges();

                    foreach (var m in model.OrderedMeals)
                    {
                        var om = new OrderedMeal
                        {
                            InTakeoutTakeoutOrderId = takeout.TakeoutOrderId,
                            MenuEntryId             = m.MenuEntryId,
                            Quantity = m.Quantity,
                            Comment  = m.Comment,
                            Price    = m.Price
                        };
                        _context.Add(om);
                    }
                }
            }
            else // No overlap detected
            {
                _context.Add(takeout);
                _context.SaveChanges();

                foreach (var m in model.OrderedMeals)
                {
                    var om = new OrderedMeal
                    {
                        InTakeoutTakeoutOrderId = takeout.TakeoutOrderId,
                        MenuEntryId             = m.MenuEntryId,
                        Quantity = m.Quantity,
                        Comment  = m.Comment,
                        Price    = m.Price
                    };
                    _context.Add(om);
                }
            }



            _context.SaveChanges();
        }