You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IMenuRepository.cs 9.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. using ProRestaurant.Classes;
  2. using ProRestaurant.Containers;
  3. using ProRestaurant.DBContexts;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. namespace ProRestaurant.Repository.Restaurants
  9. {
  10. public interface IMenuRepository
  11. {
  12. RestaurantMenuContainer GetMenu(int restaurantId);
  13. MenuContainer GetOptions(int MenuID);
  14. }
  15. public class MenuRepository : IMenuRepository
  16. {
  17. private readonly DBContext dBContext;
  18. public MenuRepository(DBContext db)
  19. {
  20. dBContext = db;
  21. }
  22. public RestaurantMenuContainer GetMenu(int restaurantId)
  23. {
  24. var restaurant = dBContext.Restaurants.Where(r => r.Id == restaurantId).FirstOrDefault();
  25. var menu = new RestaurantMenuContainer
  26. {
  27. Id = restaurant.Id,
  28. Name = restaurant.Name,
  29. Categories = restaurant.Categories,
  30. DeliveryTime = restaurant.DeliveryTime,
  31. DeliveryFee = string.Format("R {0:N}", restaurant.DeliveryFee),
  32. Suburb = restaurant.Suburb,
  33. City = restaurant.City,
  34. Province = restaurant.Province,
  35. PostalCode = restaurant.PostalCode,
  36. Latitude = restaurant.Latitude,
  37. Longitude = restaurant.Longitude,
  38. Logo = restaurant.Logo.StartsWith("data:image") ? restaurant.Logo : ImageFormatter.ImageToBase64(restaurant.Logo),
  39. CategoryList = new List<string>(),
  40. TradingHours = new List<TradingHourContainer>(),
  41. MenuList = new List<MenuCategoryContainer>()
  42. };
  43. var categories = dBContext.MenuCategories.Where(c => c.RestaurantId == restaurantId).ToList();
  44. foreach (var cat in categories)
  45. {
  46. menu.CategoryList.Add(cat.Description);
  47. MenuCategoryContainer menuItem = new MenuCategoryContainer
  48. {
  49. Category = cat.Description,
  50. Items = new List<MenuItemContainer>()
  51. };
  52. var MenuItems = dBContext.MenuItems.Where(mi => mi.CategoryId == cat.Id).ToList();
  53. foreach (var item in MenuItems)
  54. {
  55. menuItem.Items.Add(new MenuItemContainer
  56. {
  57. MenuId = item.Id,
  58. CategoryId = item.CategoryId,
  59. Name = item.Name,
  60. Description = item.Description,
  61. Price = string.Format("{0:C}", item.Price),
  62. Image = !string.IsNullOrEmpty(item.Image) ? item.Image.StartsWith("data:image") ? item.Image : ImageFormatter.ImageToBase64(item.Image) : ""
  63. });
  64. }
  65. if (menuItem.Items.Count > 0)
  66. menu.MenuList.Add(menuItem);
  67. }
  68. var tradingHours = dBContext.TradingHours.Where(t => t.RestaurantId == restaurantId).ToList();
  69. foreach (var tHours in tradingHours)
  70. {
  71. var hour = new TradingHourContainer()
  72. {
  73. Description = tHours.Description
  74. };
  75. if (tHours.Closed)
  76. hour.Time = "Closed";
  77. else if (tHours.Opened24H)
  78. hour.Time = "Open 24 Hours";
  79. else
  80. hour.Time = string.Format("{0:hh:mm} - {1:hh:mm}", tHours.OpeningTime, tHours.ClosingTime);
  81. menu.TradingHours.Add(hour);
  82. }
  83. return menu;
  84. }
  85. public MenuContainer GetOptions(int MenuID)
  86. {
  87. var mItem = dBContext.MenuItems.Where(m => m.Id == MenuID).FirstOrDefault();
  88. MenuContainer menu = new MenuContainer
  89. {
  90. Id = MenuID,
  91. Name = mItem.Name,
  92. Description = mItem.Description,
  93. Price = mItem.Price,
  94. DisplayPrice = string.Format("{0:C}", mItem.Price),
  95. Image = "",
  96. Options = new List<OptionContainer>()
  97. };
  98. if (!string.IsNullOrEmpty(mItem.Image))
  99. {
  100. menu.Image = mItem.Image.StartsWith("data:image") ? mItem.Image : ImageFormatter.ImageToBase64(mItem.Image);
  101. }
  102. //Menu's options
  103. var menuOptions = dBContext.MenuOptions.Where(mo => mo.MenuItemId == mItem.Id).OrderBy(mo => mo.Rank).ToList();
  104. foreach (var option in menuOptions)
  105. {
  106. OptionContainer opt = new OptionContainer
  107. {
  108. Description = option.Description,
  109. OptionType = option.OptionType.ToString(),
  110. Limit = option.OptionLimit,
  111. IsBasePrice = option.IsBasePrice,
  112. SpecialInstructions = "",
  113. Options = new List<OptionItemContainer>()
  114. };
  115. switch (option.OptionType)
  116. {
  117. case OptionType.SingleRequired:
  118. opt.SubTitle = "Required";
  119. break;
  120. case OptionType.MultipleLimit:
  121. opt.SubTitle = string.Format("Choose {0}", opt.Limit);
  122. break;
  123. default:
  124. opt.SubTitle = "";
  125. break;
  126. }
  127. var menuItems = dBContext.MenuOptionItems.Where(i => i.MenuOption == option).OrderBy(i => i.Rank).ToList();
  128. foreach (var item in menuItems)
  129. {
  130. opt.Options.Add(new OptionItemContainer()
  131. {
  132. Id = item.Id,
  133. Description = item.Description,
  134. Price = item.Price
  135. });
  136. }
  137. menu.Options.Add(opt);
  138. }
  139. if (!mItem.OverrideOptions)
  140. {
  141. //Category's Options
  142. menuOptions = dBContext.MenuOptions.Where(mo => mo.CategoryId == mItem.CategoryId).OrderBy(mo => mo.Rank).ToList();
  143. foreach (var option in menuOptions)
  144. {
  145. OptionContainer opt = new OptionContainer
  146. {
  147. Description = option.Description,
  148. OptionType = option.OptionType.ToString(),
  149. Limit = option.OptionLimit,
  150. IsBasePrice = option.IsBasePrice,
  151. SpecialInstructions = "",
  152. Options = new List<OptionItemContainer>()
  153. };
  154. switch (option.OptionType)
  155. {
  156. case OptionType.SingleRequired:
  157. opt.SubTitle = "Required";
  158. break;
  159. case OptionType.MultipleLimit:
  160. opt.SubTitle = string.Format("Choose {0}", opt.Limit);
  161. break;
  162. default:
  163. opt.SubTitle = "";
  164. break;
  165. }
  166. var menuItems = dBContext.MenuOptionItems.Where(i => i.MenuOption == option).OrderBy(i => i.Rank).ToList();
  167. foreach (var item in menuItems)
  168. {
  169. opt.Options.Add(new OptionItemContainer()
  170. {
  171. Id = item.Id,
  172. Description = item.Description,
  173. Price = item.Price
  174. });
  175. }
  176. menu.Options.Add(opt);
  177. }
  178. }
  179. //All Cat Options
  180. menuOptions = dBContext.MenuOptions.Where(mo => mo.CategoryId == 0 && mo.RestaurantId == mItem.RestaurantId).OrderBy(mo => mo.Rank).ToList();
  181. foreach (var option in menuOptions)
  182. {
  183. OptionContainer opt = new OptionContainer
  184. {
  185. Description = option.Description,
  186. OptionType = option.OptionType.ToString(),
  187. Limit = option.OptionLimit,
  188. IsBasePrice = option.IsBasePrice,
  189. SpecialInstructions = "",
  190. Options = new List<OptionItemContainer>()
  191. };
  192. switch (option.OptionType)
  193. {
  194. case OptionType.SingleRequired:
  195. opt.SubTitle = "Required";
  196. break;
  197. case OptionType.MultipleLimit:
  198. opt.SubTitle = string.Format("Choose {0}", opt.Limit);
  199. break;
  200. default:
  201. opt.SubTitle = "";
  202. break;
  203. }
  204. var menuItems = dBContext.MenuOptionItems.Where(i => i.MenuOption == option).OrderBy(i => i.Rank).ToList();
  205. foreach (var item in menuItems)
  206. {
  207. opt.Options.Add(new OptionItemContainer()
  208. {
  209. Id = item.Id,
  210. Description = item.Description,
  211. Price = item.Price
  212. });
  213. }
  214. menu.Options.Add(opt);
  215. }
  216. return menu;
  217. }
  218. }
  219. }