private async Task <ProductSetViewmodel> GetProductSetAsync(int id) { var set = await context.ProductSets .Include(x => x.Division) .Include(x => x.Division.Company) .Include(x => x.Products).FirstOrDefaultAsync(x => x.Id == id); var model = new ProductSetViewmodel { Company = new CompanyViewmodel { Id = set.Division.Company.Id, Name = set.Division.Company.Name }, CompanyId = set.Division.Company.Id, Division = new DivisionViewmodel { Id = set.Division.Id, Name = set.Division.Name }, DivisionId = set.Division.Id, Id = set.Id, Name = set.Name, Products = new List <ProductViewmodel>() }; // Loop through the products and add them to the set. foreach (var product in set.Products) { var p = await context.Products.Include(x => x.Division).FirstOrDefaultAsync(x => x.Id == product.Id); model.Products.Add(new ProductViewmodel { Company = new CompanyViewmodel { Id = p.Division.Company.Id, Name = p.Division.Company.Name }, CompanyId = p.Division.Company.Id, Division = new DivisionViewmodel { Id = p.Division.Id, Name = p.Division.Name }, DivisionId = p.Division.Id, Id = p.Id, Name = p.Name, Price = p.Price }); } return(model); }
public async Task OnGetAsync(int?id) { try { if (id != null) { _ = int.TryParse(id.ToString(), out int productSetId); ProductSet = await GetProductSetAsync(productSetId); } } catch (Exception ex) { _logger.LogError(ex, "[Product Set DeleteModel] OnGet failed"); } }
public async Task <IActionResult> Edit(ProductSetViewmodel model, int id) { try { var division = await context.Divisions.FindAsync(model.DivisionId); if (division == null) { return(NotFound(new { message = $"Company division with ID {model.DivisionId} was not found." })); } var set = await context.ProductSets .Include(x => x.Division) .Include(x => x.Products) .FirstOrDefaultAsync(x => x.Id == id); set.Division = division; set.Name = model.Name; // Remove all products from the set. var setProducts = set.Products; foreach (var product in setProducts) { if (set.Products.Any(x => x.Id == product.Id)) { set.Products.Remove(product); } } // Add the new selection of products to the set. var products = new List <Product>(); foreach (var p in model.Products) { var product = await context.Products.FindAsync(p.Id); products.Add(product); } set.Products = products; await context.SaveChangesAsync(); return(Ok(set)); } catch (Exception ex) { _logger.LogError($"Unable to update product set", ex); return(BadRequest(ex.ToString())); } }
public async Task <IActionResult> Create(ProductSetViewmodel model) { try { var division = await context.Divisions.FindAsync(model.DivisionId); if (division == null) { return(NotFound(new { message = $"Company division with ID {model.DivisionId} was not found." })); } var set = new ProductSet { Division = division, Name = model.Name }; var products = new List <Product>(); foreach (var p in model.Products) { var product = await context.Products.FindAsync(p.Id); if (product == null) { return(NotFound(new { message = $"Product with ID {p.Id} ({p.Name}) was not found." })); } products.Add(product); } set.Products = products; await context.ProductSets.AddAsync(set); await context.SaveChangesAsync(); return(Ok(set)); } catch (Exception ex) { _logger.LogError($"Unable to create product set", ex); return(BadRequest(ex.ToString())); } }
private async Task <IEnumerable <ProductSetViewmodel> > GetProductSetsAsync() { var sets = await context.ProductSets .Include(x => x.Division) .Include(x => x.Division.Company) .Include(x => x.Products).ToListAsync(); var model = new List <ProductSetViewmodel>(); // Make sure that the Products list belonging to each set is being built correctly. foreach (var set in sets) { // Create a new set VM for each set in the collection. var productSet = new ProductSetViewmodel { Company = new CompanyViewmodel { Id = set.Division.Company.Id, Name = set.Division.Company.Name }, CompanyId = set.Division.Company.Id, Division = new DivisionViewmodel { Id = set.Division.Id, Name = set.Division.Name }, DivisionId = set.Division.Id, Id = set.Id, Name = set.Name, Products = new List <ProductViewmodel>() }; // Loop through the products and add them to the set. var products = new List <ProductViewmodel>(); foreach (var product in set.Products) { var p = await context.Products .Include(x => x.Division).Include(x => x.Division.Company).FirstOrDefaultAsync(x => x.Id == product.Id); products.Add(new ProductViewmodel { Company = new CompanyViewmodel { Id = p.Division.Company.Id, Name = p.Division.Company.Name }, CompanyId = p.Division.Company.Id, Division = new DivisionViewmodel { Id = p.Division.Id, Name = p.Division.Name }, DivisionId = p.Division.Id, Id = p.Id, Name = p.Name, Price = p.Price }); } productSet.Products = products; // Add the new VM to the model returned by this endpoint. model.Add(productSet); } return(model); }
public async Task <IActionResult> Get() { try { var sets = await context.ProductSets .Include(x => x.Division) .Include(x => x.Division.Company) .Include(x => x.Products).ToListAsync(); var model = new List <ProductSetViewmodel>(); // Make sure that the Products list belonging to each set is being built correctly. foreach (var set in sets) { // Create a new set VM for each set in the collection. var productSet = new ProductSetViewmodel { Company = new CompanyViewmodel { Id = set.Division.Company.Id, Name = set.Division.Company.Name }, CompanyId = set.Division.Company.Id, Division = new DivisionViewmodel { Id = set.Division.Id, Name = set.Division.Name }, DivisionId = set.Division.Id, Id = set.Id, Name = set.Name, Products = new List <ProductViewmodel>() }; // Loop through the products and add them to the set. var products = new List <ProductViewmodel>(); foreach (var product in set.Products) { var p = await context.Products .Include(x => x.Division).Include(x => x.Division.Company).FirstOrDefaultAsync(x => x.Id == product.Id); products.Add(new ProductViewmodel { Company = new CompanyViewmodel { Id = p.Division.Company.Id, Name = p.Division.Company.Name }, CompanyId = p.Division.Company.Id, Division = new DivisionViewmodel { Id = p.Division.Id, Name = p.Division.Name }, DivisionId = p.Division.Id, Id = p.Id, Name = p.Name, Price = p.Price }); } productSet.Products = products; // Add the new VM to the model returned by this endpoint. model.Add(productSet); } return(Ok(model)); } catch (Exception ex) { _logger.LogError($"Unable to get product sets", ex); return(BadRequest(ex.ToString())); } }
public async Task <IActionResult> Get(int id) { try { var set = await context.ProductSets .Include(x => x.Division) .Include(x => x.Division.Company) .Include(x => x.Products).FirstOrDefaultAsync(x => x.Id == id); if (set == null) { return(NotFound(new { message = $"Product set with ID {id} was not found." })); } var model = new ProductSetViewmodel { Company = new CompanyViewmodel { Id = set.Division.Company.Id, Name = set.Division.Company.Name }, CompanyId = set.Division.Company.Id, Division = new DivisionViewmodel { Id = set.Division.Id, Name = set.Division.Name }, DivisionId = set.Division.Id, Id = set.Id, Name = set.Name, Products = new List <ProductViewmodel>() }; // Loop through the products and add them to the set. foreach (var product in set.Products) { var p = await context.Products.Include(x => x.Division).FirstOrDefaultAsync(x => x.Id == product.Id); model.Products.Add(new ProductViewmodel { Company = new CompanyViewmodel { Id = p.Division.Company.Id, Name = p.Division.Company.Name }, CompanyId = p.Division.Company.Id, Division = new DivisionViewmodel { Id = p.Division.Id, Name = p.Division.Name }, DivisionId = p.Division.Id, Id = p.Id, Name = p.Name, Price = p.Price }); } return(Ok(model)); } catch (Exception ex) { _logger.LogError($"Unable to get product set", ex); return(BadRequest(ex.ToString())); } }