public async Task <bool> IsDuplicateProductHeaderAsync(NewProductHeaderDto productHeader) { //Check header var duplicate = await _dbContext.ProductHeaders.AnyAsync(c => c.Model.Equals(productHeader.Model, StringComparison.InvariantCultureIgnoreCase)); if (duplicate) { return(true); } var products = productHeader.Products.ToList(); //Check duplicates in product list for (int i = 0; i < products.Count; i++) { for (int j = i + 1; j < products.Count; j++) { if (products[i].Code.Equals(products[j].Code, StringComparison.InvariantCultureIgnoreCase) //|| (products[i].Size.Id == products[j].Size.Id //&& products[i].ColorPrimary.Id == products[j].ColorPrimary.Id //&& products[i].ColorSecondary.Id == products[j].ColorSecondary.Id //&& products[i].ExtraDescription.Equals(products[j].ExtraDescription, StringComparison.InvariantCultureIgnoreCase)) ) { return(true); } } } //Check for duplicates codes in db var productCodes = products.Select(p => p.Code).ToList(); return(await _dbContext.Products.AnyAsync(p => productCodes.Contains(p.Code))); }
public async Task <IActionResult> AddProductHeader([FromBody] NewProductHeaderDto newProductHeader) { try { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (await _productRepository.IsDuplicateProductHeaderAsync(newProductHeader)) { ModelState.AddModelError("productHeader", "A product already exists"); return(BadRequest(ModelState)); } var productHeaderId = await _productRepository.AddProductHeaderAsync(newProductHeader); if (productHeaderId > 0) { return(Ok(productHeaderId)); } return(StatusCode(500, "An error ocurred in server")); } catch (Exception e) { _logger.LogCritical($"POST {Route} - {e.GetType().Name} - {e.Message} - {e.StackTrace}"); return(StatusCode(500, "An error ocurred in server")); } }
public async Task <int> AddProductHeaderAsync(NewProductHeaderDto newProductHeader) { var productHeader = new ProductHeader { Model = newProductHeader.Model, Description = newProductHeader.Description, ShortDescription = newProductHeader.ShortDescription, SubCategoryId = newProductHeader.SubCategory.Id, BrandId = newProductHeader.Brand.Id, IsActive = true }; var products = new List <Product>(); foreach (var productDto in newProductHeader.Products) { products.Add(new Product { Code = productDto.Code, ExtraDescription = productDto.ExtraDescription, Price = productDto.Price, SpecialPrice = productDto.SpecialPrice, CreateDate = DateTime.Now, SizeId = productDto.Size.Id, ColorPrimaryId = productDto.ColorPrimary.Id, ColorSecondaryId = productDto.ColorSecondary.Id, IsActive = true }); } productHeader.Products = products; await _dbContext.ProductHeaders.AddAsync(productHeader); if (await _dbContext.SaveChangesAsync() > 0) { return(productHeader.Id); } return(0); }