using Microsoft.EntityFrameworkCore; using ProRestaurant.Classes; using ProRestaurant.Containers; using ProRestaurant.DBContexts; using ProRestaurant.Models.Restaurants; using System; using System.Collections.Generic; using System.Linq; namespace ProRestaurant.Repository.Restaurants { public class MenuOptionRepository : IMenuOptionRepository { private readonly DBContext dBContext; public MenuOptionRepository(DBContext _dBContext) { dBContext = _dBContext; } public void Delete(MenuOption Option) { if (Option.Options != null) { foreach (var item in Option.Options) { DeleteItem(item); } } dBContext.MenuOptions.Remove(Option); Save(); } public void DeleteItem(int id) { var item = dBContext.MenuOptionItems.Where(i => i.Id == id).FirstOrDefault(); dBContext.MenuOptionItems.Remove(item); Save(); } public void DeleteItem(MenuOptionItem item) { dBContext.MenuOptionItems.Remove(item); Save(); } public MenuOption GetMenuOption(int id) { var option = dBContext.MenuOptions.Where(m => m.Id == id).FirstOrDefault(); if (option == null) { option = new MenuOption() { OptionType = OptionType.Single, IsBasePrice = false, Options = new List(), CategoryDescription = "All" }; } else { option.Options = dBContext.MenuOptionItems.Where(m => m.MenuOption == option).ToList(); if (option.CategoryId > 0) option.CategoryDescription = dBContext.MenuCategories.Where(m => m.Id == option.CategoryId).FirstOrDefault().Description; else option.CategoryDescription = "All"; } return option; } public List GetOptionTypes() { //TODO: hard coded for now, will need to find solution. var options = new List { new OptionTypeContainer() { Id = 0, Description = "Single" }, new OptionTypeContainer() { Id = 1, Description = "Single Required" }, new OptionTypeContainer() { Id = 2, Description = "Multiple" }, new OptionTypeContainer() { Id = 3, Description = "Multiple Limit" } }; return options; } public List GetRestaurantMenuOptions(int restaurantId) { var options = (from o in dBContext.MenuOptions where o.RestaurantId == restaurantId orderby o.Rank select o).ToList(); foreach (var option in options) { switch (option.OptionType) { case OptionType.MultipleLimit: option.OptionTypeDescription = "Multiple Limit"; break; case OptionType.SingleRequired: option.OptionTypeDescription = "Single Required"; break; default: option.OptionTypeDescription = option.OptionType.ToString(); break; } if (option.CategoryId > 0) option.CategoryDescription = dBContext.MenuCategories.Where(m => m.Id == option.CategoryId).FirstOrDefault().Description; else option.CategoryDescription = "All"; } return options; } public void Insert(MenuOption Option) { dBContext.Add(Option); Save(); } public void Save() { dBContext.SaveChanges(); } public void Update(MenuOption Option) { dBContext.Entry(Option).State = EntityState.Modified; foreach (var opt in Option.Options) { if (opt.Id > 0) { dBContext.Entry(opt).State = EntityState.Modified; } else { dBContext.Add(opt); } } Save(); } } }