// 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()); }