public string CreateWithProducts(Catalog cata, bool activemod, bool activecategory, int hotelId = 0) { IList<ModuleCompositeViewModel> modules = new List<ModuleCompositeViewModel>(); foreach (Module m in cata.Modules) { ModuleCompositeViewModel moduleVm = Helper.ConvertModuleToViewModel(m, activemod); modules.Add(moduleVm); moduleVm.ActiveCheckbox = activemod; m.ActiveHotelModule.ForEach(delegate(ActiveHotelModule hotelModule) { if (hotelModule.IdHotel == hotelId && hotelModule.IdModule == m.ModuleId) { moduleVm.IsChecked = true; } }); foreach (Category p in m.Categories) { if (moduleVm.Children == null) moduleVm.Children = new List<CategoryCompositeViewModel>(); CategoryCompositeViewModel category = Helper.ConvertCategoryToViewModel(p); // category.Products = new List<ProductCompositeViewModel>(); category.Children = new List<ICatalogChildren>(); if (activecategory) { p.ActiveHotelCategory.ForEach(delegate(ActiveHotelCategory hotelCategory) { if (hotelCategory.IdHotel == hotelId && hotelCategory.IdCategory == p.CategoryId) { category.IsChecked = true; } }); category.ActiveCheckbox = true; } foreach (CategoryProduct cp in p.CategoryProducts) { Product product = productRepo.GetById(cp.IdProduct); ProductCompositeViewModel productVm = new ProductCompositeViewModel() { ProductId = product.Id, text = product.Name, ActiveCheckbox = true, }; product.ActiveHotelProduct.ForEach(delegate(ActiveHotelProduct activeProduct) { if (activeProduct.IdProduct == product.Id) productVm.IsChecked = true; }); category.Children.Add(productVm); } moduleVm.Children.Add(category); CreateSubCategories(category, true, activecategory, hotelId); } } string json = ""; try { json = JsonConvert.SerializeObject(modules, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, ReferenceLoopHandling = ReferenceLoopHandling.Serialize }); json = json.Replace("Children", "children").Replace("Products", "children"); } catch (Exception ex) { throw ex; } return json; }
private List<CategoryCompositeViewModel> CreateSubCategories(CategoryCompositeViewModel p, bool withproducts, bool activecategory, int hotelId) { CategoryRepository categoryRepo = new CategoryRepository(this.Context); List<Category> categories = categoryRepo.GetByParentId(p.CategoryId); List<CategoryCompositeViewModel> categoriesVm = new List<CategoryCompositeViewModel>(); categoriesVm.Add(p); foreach (Category c in categories) { CategoryCompositeViewModel categoryCompositeViewModel = Helper.ConvertCategoryToViewModel(c); if (p.Children == null) p.Children = new List<ICatalogChildren>(); if (activecategory) { // categoryCompositeViewModel.IsChecked = c.ActiveHotelCategory.Contains(new ActiveHotelCategory() { IdCategory = c.CategoryId, IdHotel = hotelId, Active = true, Category = c}); c.ActiveHotelCategory.ForEach(delegate(ActiveHotelCategory hotelCategory) { if (hotelCategory.IdHotel == hotelId && hotelCategory.Category.IdParentCategory == p.CategoryId) { categoryCompositeViewModel.IsChecked = true; } }); categoryCompositeViewModel.ActiveCheckbox = true; } if (withproducts) { categoryCompositeViewModel.Children = new List<ICatalogChildren>(); foreach (CategoryProduct cp in c.CategoryProducts) { Product product = productRepo.GetById(cp.IdProduct); ProductCompositeViewModel productViewModel = new ProductCompositeViewModel() { ProductId = product.Id, text = product.Name, ActiveCheckbox = true }; categoryCompositeViewModel.Children.Add(productViewModel); product.ActiveHotelProduct.ForEach(delegate(ActiveHotelProduct productHotelAct) { if (productHotelAct.IdHotel == hotelId && cp.IdProduct == productHotelAct.IdProduct ) { productViewModel.IsChecked = true; } }); } } p.Children.Add(categoryCompositeViewModel); if (categories != null) CreateSubCategories(categoryCompositeViewModel, withproducts, activecategory, hotelId); } return categoriesVm; }