123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- using ProRestaurant.Classes;
- using ProRestaurant.Containers;
- using ProRestaurant.DBContexts;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
-
- namespace ProRestaurant.Repository.Restaurants
- {
- public interface IMenuRepository
- {
- RestaurantMenuContainer GetMenu(int restaurantId);
- MenuContainer GetOptions(int MenuID);
- }
-
- public class MenuRepository : IMenuRepository
- {
- private readonly DBContext dBContext;
-
- public MenuRepository(DBContext db)
- {
- dBContext = db;
- }
-
- public RestaurantMenuContainer GetMenu(int restaurantId)
- {
- var restaurant = dBContext.Restaurants.Where(r => r.Id == restaurantId).FirstOrDefault();
-
- var menu = new RestaurantMenuContainer
- {
- Id = restaurant.Id,
- Name = restaurant.Name,
- Categories = restaurant.Categories,
- DeliveryTime = restaurant.DeliveryTime,
- DeliveryFee = string.Format("R {0:N}", restaurant.DeliveryFee),
- Suburb = restaurant.Suburb,
- City = restaurant.City,
- Province = restaurant.Province,
- PostalCode = restaurant.PostalCode,
- Latitude = restaurant.Latitude,
- Longitude = restaurant.Longitude,
- Logo = restaurant.Logo.StartsWith("data:image") ? restaurant.Logo : ImageFormatter.ImageToBase64(restaurant.Logo),
- CategoryList = new List<string>(),
- TradingHours = new List<TradingHourContainer>(),
- MenuList = new List<MenuCategoryContainer>()
- };
-
- var categories = dBContext.MenuCategories.Where(c => c.RestaurantId == restaurantId).ToList();
- foreach (var cat in categories)
- {
- menu.CategoryList.Add(cat.Description);
-
- MenuCategoryContainer menuItem = new MenuCategoryContainer
- {
- Category = cat.Description,
- Items = new List<MenuItemContainer>()
- };
-
- var MenuItems = dBContext.MenuItems.Where(mi => mi.CategoryId == cat.Id).ToList();
- foreach (var item in MenuItems)
- {
- menuItem.Items.Add(new MenuItemContainer
- {
- MenuId = item.Id,
- CategoryId = item.CategoryId,
- Name = item.Name,
- Description = item.Description,
- Price = string.Format("{0:C}", item.Price),
- Image = !string.IsNullOrEmpty(item.Image) ? item.Image.StartsWith("data:image") ? item.Image : ImageFormatter.ImageToBase64(item.Image) : ""
- });
- }
-
- if (menuItem.Items.Count > 0)
- menu.MenuList.Add(menuItem);
- }
-
- var tradingHours = dBContext.TradingHours.Where(t => t.RestaurantId == restaurantId).ToList();
- foreach (var tHours in tradingHours)
- {
- var hour = new TradingHourContainer()
- {
- Description = tHours.Description
- };
-
- if (tHours.Closed)
- hour.Time = "Closed";
- else if (tHours.Opened24H)
- hour.Time = "Open 24 Hours";
- else
- hour.Time = string.Format("{0:hh:mm} - {1:hh:mm}", tHours.OpeningTime, tHours.ClosingTime);
-
- menu.TradingHours.Add(hour);
- }
-
- return menu;
- }
-
- public MenuContainer GetOptions(int MenuID)
- {
- var mItem = dBContext.MenuItems.Where(m => m.Id == MenuID).FirstOrDefault();
-
- MenuContainer menu = new MenuContainer
- {
- Id = MenuID,
- Name = mItem.Name,
- Description = mItem.Description,
- Price = mItem.Price,
- DisplayPrice = string.Format("{0:C}", mItem.Price),
- Image = "",
- Options = new List<OptionContainer>()
- };
-
- if (!string.IsNullOrEmpty(mItem.Image))
- {
- menu.Image = mItem.Image.StartsWith("data:image") ? mItem.Image : ImageFormatter.ImageToBase64(mItem.Image);
- }
-
- //Menu's options
- var menuOptions = dBContext.MenuOptions.Where(mo => mo.MenuItemId == mItem.Id).OrderBy(mo => mo.Rank).ToList();
-
- foreach (var option in menuOptions)
- {
- OptionContainer opt = new OptionContainer
- {
- Description = option.Description,
- OptionType = option.OptionType.ToString(),
- Limit = option.OptionLimit,
- IsBasePrice = option.IsBasePrice,
- SpecialInstructions = "",
- Options = new List<OptionItemContainer>()
- };
-
- switch (option.OptionType)
- {
- case OptionType.SingleRequired:
- opt.SubTitle = "Required";
- break;
- case OptionType.MultipleLimit:
- opt.SubTitle = string.Format("Choose {0}", opt.Limit);
- break;
- default:
- opt.SubTitle = "";
- break;
- }
-
- var menuItems = dBContext.MenuOptionItems.Where(i => i.MenuOption == option).OrderBy(i => i.Rank).ToList();
- foreach (var item in menuItems)
- {
- opt.Options.Add(new OptionItemContainer()
- {
- Id = item.Id,
- Description = item.Description,
- Price = item.Price
- });
- }
- menu.Options.Add(opt);
- }
-
- if (!mItem.OverrideOptions)
- {
- //Category's Options
- menuOptions = dBContext.MenuOptions.Where(mo => mo.CategoryId == mItem.CategoryId).OrderBy(mo => mo.Rank).ToList();
-
- foreach (var option in menuOptions)
- {
- OptionContainer opt = new OptionContainer
- {
- Description = option.Description,
- OptionType = option.OptionType.ToString(),
- Limit = option.OptionLimit,
- IsBasePrice = option.IsBasePrice,
- SpecialInstructions = "",
- Options = new List<OptionItemContainer>()
- };
-
- switch (option.OptionType)
- {
- case OptionType.SingleRequired:
- opt.SubTitle = "Required";
- break;
- case OptionType.MultipleLimit:
- opt.SubTitle = string.Format("Choose {0}", opt.Limit);
- break;
- default:
- opt.SubTitle = "";
- break;
- }
-
- var menuItems = dBContext.MenuOptionItems.Where(i => i.MenuOption == option).OrderBy(i => i.Rank).ToList();
- foreach (var item in menuItems)
- {
- opt.Options.Add(new OptionItemContainer()
- {
- Id = item.Id,
- Description = item.Description,
- Price = item.Price
- });
- }
- menu.Options.Add(opt);
- }
- }
-
- //All Cat Options
- menuOptions = dBContext.MenuOptions.Where(mo => mo.CategoryId == 0 && mo.RestaurantId == mItem.RestaurantId).OrderBy(mo => mo.Rank).ToList();
-
- foreach (var option in menuOptions)
- {
- OptionContainer opt = new OptionContainer
- {
- Description = option.Description,
- OptionType = option.OptionType.ToString(),
- Limit = option.OptionLimit,
- IsBasePrice = option.IsBasePrice,
- SpecialInstructions = "",
- Options = new List<OptionItemContainer>()
- };
-
- switch (option.OptionType)
- {
- case OptionType.SingleRequired:
- opt.SubTitle = "Required";
- break;
- case OptionType.MultipleLimit:
- opt.SubTitle = string.Format("Choose {0}", opt.Limit);
- break;
- default:
- opt.SubTitle = "";
- break;
- }
-
- var menuItems = dBContext.MenuOptionItems.Where(i => i.MenuOption == option).OrderBy(i => i.Rank).ToList();
- foreach (var item in menuItems)
- {
- opt.Options.Add(new OptionItemContainer()
- {
- Id = item.Id,
- Description = item.Description,
- Price = item.Price
- });
- }
- menu.Options.Add(opt);
- }
-
-
- return menu;
- }
- }
- }
|