// GET: Set Menu Item Base price
        public MenuItemVM MapMenuItemBasePrice(RMenuItemVM model)
        {
            List <decimal?> PriceList  = new List <decimal?>();
            MenuItemVM      menuItemVM = new MenuItemVM {
                MenuItemOriginalPrice = model.MenuItem.BasePrice
            };

            if (model.MenuItem.BasePrice == null)
            {
                if (model.MenuItem.ModifierPriceIDs != null && model.MenuItem.ModifierPriceIDs.Count > 0)
                {
                    foreach (var modifierPrice in model.MenuItem.ModifierPriceIDs)
                    {
                        var pricemodel = Shared.APIs.IRestaurant.GetModifierPrice(model.LocationId, model.MenuId, model.MenuItem.ID, modifierPrice);

                        PriceList.Add(pricemodel.Price);
                    }
                    model.MenuItem.BasePrice = PriceList.Where(f => f > 0).Min();
                }
            }

            menuItemVM.MenuItem = model.MenuItem;
            return(menuItemVM);
        }
        public void LoadData()
        {
            this.IsBusy = true;

            Task.Run(() =>
            {
                Utils.IReloadPageCurrent = this;
                try
                {
                    var RMenuItemVM = new RMenuItemVM {
                        LocationId = RestaurantVM.LocationId, MenuId = MenuItemView.RestaurantMenuItem.MenuId, MenuItem = MenuItemVM.MenuItem
                    };
                    MenuItemModifiers = RestaurantFacade.GetMenuItemModifiers(RMenuItemVM);
                    if (MenuGroupModifierItem != null)
                    {
                        var menuItemModifiersList = MenuItemModifiers.SelectMany(t => t.MenuModifiers);
                        foreach (var rMenuGroupModifierVM in MenuGroupModifierItem.ListRMenuGroupModifierVM)
                        {
                            var menuModifiers = rMenuGroupModifierVM.MenuModifiers.ToList();
                            foreach (var menuModifier in menuModifiers)
                            {
                                var menuItemModifier = menuItemModifiersList.FirstOrDefault(t => t.MenuModifier.ID == menuModifier.MenuModifier.ID);
                                if (menuItemModifier != null)
                                {
                                    menuItemModifier.IsSelected = menuModifier.IsSelected;
                                    menuItemModifier.Quantity   = menuModifier.Quantity;
                                    menuItemModifier.MenuModifier.ApplyByDefault = false;
                                    foreach (var subMenuModifier in menuModifier.SubMenuModifiers)
                                    {
                                        var subMenuItemModifier = menuItemModifier.SubMenuModifiers.FirstOrDefault(t => t.MenuModifier.ID == subMenuModifier.MenuModifier.ID);
                                        if (subMenuItemModifier != null)
                                        {
                                            subMenuItemModifier.IsSelected = subMenuModifier.IsSelected;
                                            subMenuItemModifier.Quantity   = subMenuModifier.Quantity;
                                            subMenuItemModifier.MenuModifier.ApplyByDefault = false;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    ModifierItemViews      = new List <ModifierItemViewModel>();
                    ModifierGroupItemViews = new List <ModifierItemViewModel>();
                    foreach (var menuItemModifier in MenuItemModifiers)
                    {
                        var menuItemModifiers = menuItemModifier.MenuModifiers.Select(k => new ModifierItemViewModel(menuItemModifier, k)).ToList();
                        ModifierGroupItemViews.Add(new ModifierItemViewModel(menuItemModifier));
                        ModifierGroupItemViews.AddRange(menuItemModifiers);
                        ModifierItemViews.AddRange(menuItemModifiers);
                    }

                    foreach (var modifierItemView in ModifierItemViews)
                    {
                        modifierItemView.SaveChanged += (sender, e) =>
                        {
                            Device.BeginInvokeOnMainThread(() =>
                            {
                                Price = UpdatePrice(this.MenuItemVM, this.MenuItemModifiers, this.Quantity);
                            });
                        };
                        modifierItemView.PropertyChanged += (sender, e) =>
                        {
                            if (e.PropertyName == nameof(modifierItemView.Quantity))
                            {
                                Device.BeginInvokeOnMainThread(() =>
                                {
                                    Price = UpdatePrice(this.MenuItemVM, this.MenuItemModifiers, this.Quantity);
                                });
                                var menuItemModifier       = modifierItemView.MenuGroupModifierVM;
                                var modifierItemViewsGroup = ModifierItemViews.Where(t => menuItemModifier.MenuModifiers.Contains(t.MenuModifierVM)).ToList();
                                foreach (var modifierItemViewGroup in modifierItemViewsGroup)
                                {
                                    modifierItemViewGroup.Refresh();
                                }
                                Task.Run(() =>
                                {
                                    new System.Threading.ManualResetEvent(false).WaitOne(100);
                                }).ContinueWith((s) =>
                                {
                                    var itemsSelected = modifierItemView.MenuGroupModifierVM.MenuModifiers.Where(t => t.IsSelected).ToList();
                                    var countSelected = itemsSelected.Sum(t => t.Quantity);
                                    var maxApplied    = modifierItemView.MenuGroupModifierVM.MenuModifierGroup.MaxApplied;
                                    if (maxApplied < countSelected && modifierItemView.Quantity != modifierItemView.QuantityPrevious)
                                    {
                                        modifierItemView.Quantity = modifierItemView.QuantityPrevious;
                                    }
                                }, TaskScheduler.FromCurrentSynchronizationContext());
                            }
                            if (!IsModifierItemViewChanging && e.PropertyName == nameof(modifierItemView.IsSelected))
                            {
                                IsModifierItemViewChanging = true;
                                var menuItemModifier       = modifierItemView.MenuGroupModifierVM;
                                var modifierItemViewsGroup = ModifierItemViews.Where(t => menuItemModifier.MenuModifiers.Contains(t.MenuModifierVM)).ToList();
                                var minApplied             = menuItemModifier.MenuModifierGroup.MinApplied;
                                var maxApplied             = menuItemModifier.MenuModifierGroup.MaxApplied;
                                if (minApplied == 1 && modifierItemViewsGroup.Where(t => t.IsSelected).LongCount() == 0)
                                {
                                    modifierItemView.IsSelected = true;
                                }
                                if (modifierItemView.IsSelected)
                                {
                                    if (maxApplied == 1)
                                    {
                                        foreach (var modifierItemViewGroup in modifierItemViewsGroup)
                                        {
                                            modifierItemViewGroup.IsSelected = (modifierItemViewGroup == modifierItemView);
                                        }
                                    }
                                }
                                foreach (var modifierItemViewGroup in modifierItemViewsGroup)
                                {
                                    modifierItemViewGroup.Refresh();
                                }

                                Device.BeginInvokeOnMainThread(() =>
                                {
                                    Price = UpdatePrice(this.MenuItemVM, this.MenuItemModifiers, this.Quantity);
                                });
                                IsModifierItemViewChanging = false;
                            }
                        };
                    }
                }
                catch (Exception ex)
                {
                    if (!this.IsErrorPage && Utils.IReloadPageCurrent == this)
                    {
                        Device.BeginInvokeOnMainThread(async() =>
                        {
                            await Utils.ShowErrorMessage(string.IsNullOrEmpty(ex.Message) ? AppResources.SomethingWentWrong : ex.Message);
                        });
                    }
                }
                if (Utils.IReloadPageCurrent == this)
                {
                    Utils.IReloadPageCurrent = null;
                }
            }).ContinueWith(t =>
            {
                if (ModifierGroupItemViews == null)
                {
                    ModifierGroupItemViews = new List <ModifierItemViewModel>();
                }
                ListViewModifiers.ItemsSource = ModifierGroupItemViews;
                ListViewModifiers.Footer      = this;
                Device.BeginInvokeOnMainThread(() =>
                {
                    Price = UpdatePrice(this.MenuItemVM, this.MenuItemModifiers, this.Quantity);
                });
                this.IsBusy = false;
            }, TaskScheduler.FromCurrentSynchronizationContext());
        }