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))); }
public async Task <CatalogViewModel> GetCatalog(int companyId, int catalogId) { var catalog = await _companyCatalogService.GetCompanyCatalog(companyId, catalogId); var catalogViewModel = catalog.ToResellerViewModel(); var myCompaniesAssignedToCatalog = await _companyCatalogService.GetCompaniesAssignedToCatalog(companyId, catalogId); catalogViewModel.CompaniesAssignedToCatalog = myCompaniesAssignedToCatalog.Select(c => c.ToCatalogCompanyViewModel()); return(catalogViewModel); }