public async Task <IEnumerable <CatalogViewModel> > GetCatalogs(int companyId) { var catalogs = await _companyCatalogService.GetCompanyCatalogs(companyId); var catalogsViewModels = catalogs.OrderByDescending(c => c.Default).ThenBy(c => c.Name).Select(c => c.ToResellerViewModel()).ToList(); foreach (var catalogViewModel in catalogsViewModels) { var companiesAssignedToCatalog = await _companyCatalogService.GetCompaniesAssignedToCatalog(companyId, catalogViewModel.Id); catalogViewModel.CompaniesAssignedToCatalog = companiesAssignedToCatalog.Select(c => c.ToCatalogCompanyViewModel()); } return(catalogsViewModels); }
public async Task <IHttpActionResult> Update(int catalogId, UpdateCatalogViewModel model) { var catalog = await _companyCatalogService.GetCompanyCatalog(User.CompanyId(), catalogId); var myCompaniesAssignedToCatalog = await _companyCatalogService.GetCompaniesAssignedToCatalog(User.CompanyId(), catalogId); var newlyAssigned = model.CompaniesAssignedToCatalog.Where(o => model.CompaniesAssignedToCatalog.Any() && myCompaniesAssignedToCatalog.All(n => o != n.CompanyId)).Select(c => c); var removed = myCompaniesAssignedToCatalog.Where(n => model.CompaniesAssignedToCatalog.All(o => n.CompanyId != o)).Select(c => c.CompanyId); foreach (var newlyAssignedCompanyId in newlyAssigned) { await _companyCatalogService.AssignCatalogToCompany(User.CompanyId(), newlyAssignedCompanyId, catalogId); } foreach (var removedCompanyId in removed) { await _companyCatalogService.RemoveCompanyFromAssignedCatalog(User.CompanyId(), removedCompanyId); } await _companyCatalogService.UpdateCompanyCatalog(User.CompanyId(), catalogId, new CatalogModel { Name = model.Name, Description = model.Description }); foreach (var newModel in model.ProductItems) { //var currentModel = catalog.Products // .Select(p => p.ProductItems.FirstOrDefault(pi => pi.ProductItemId == newModel.ProductItemId)) // .FirstOrDefault(); var currentModel = catalog.Products.SelectMany(p => p.ProductItems).FirstOrDefault(i => i.ProductItemId == newModel.ProductItemId); if (currentModel == null) { throw new Exception(); } if (currentModel.Available != newModel.Available) { await _catalogProductItemService.ChangeProductAvailability(User.CompanyId(), catalogId, newModel.ProductItemId, newModel.Available); } await _catalogHelper.UpdateFixedRetailPrice(User.UserId(), User.CompanyId(), currentModel, newModel, catalogId); await _catalogHelper.UpdateRetailPrice(User.UserId(), User.CompanyId(), currentModel, newModel, catalogId); await _catalogHelper.UpdateResellerPrice(User.CompanyId(), currentModel, newModel, catalogId); } return(Ok(await _catalogHelper.GetCatalog(User.CompanyId(), catalogId))); }