public async Task <IActionResult> CreateChemicals([FromBody] List <Chemical> chemicals) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } //set barcode foreach (var chemical in chemicals) { try { chemical.Barcode = ++_context.MetaData.FirstOrDefault().MaxBarcode; await _context.SaveChangesAsync(); } catch (Exception e) { return(BadRequest($"Error: {e.InnerException}")); } } try { _context.Chemicals.AddRange(chemicals); await _context.SaveChangesAsync(); //need to add each chemical one at a time to prevent bug when add multiple chemicals where barcode is duplicated var uniqueChemBeingAdded = chemicals.Select(x => x.ChemicalName).Distinct(); foreach (var chemicalName in uniqueChemBeingAdded) { var isDuplicate = _context.ChemicalFamily.Any(x => x.ChemicalName.ToLower() == chemicalName.ToLower()); if (!isDuplicate) { if (_context.Chemicals.Any(x => x.ChemicalName.ToLower() == chemicalName.ToLower())) { var currentQuantity = _context.Chemicals.Where(x => x.ChemicalName.ToLower() == chemicalName.ToLower()).Count(); var newChemFamily = new ChemicalFamily(); newChemFamily.ChemicalName = chemicalName; newChemFamily.reorderThreshold = -1; newChemFamily.ReorderQuantity = -1; newChemFamily.Quantity = currentQuantity; _context.ChemicalFamily.Add(newChemFamily); } } else { _context.ChemicalFamily.Where(x => x.ChemicalName.ToLower() == chemicalName.ToLower()).FirstOrDefault().Quantity = _context.ChemicalFamily.Where(x => x.ChemicalName.ToLower() == chemicalName.ToLower()).FirstOrDefault().Quantity + chemicals.Where(x => x.ChemicalName.ToLower() == chemicalName.ToLower()).Count(); await _context.SaveChangesAsync(); } } await _context.SaveChangesAsync(); } catch (Exception e) { return(BadRequest($"Error: {e.InnerException}")); } return(Created("/chemicals", chemicals)); }
public async Task <IActionResult> UpdateChemical(int id, [FromBody] Chemical chemical) { if (!ModelState.IsValid) { return(BadRequest()); } try { chemical.Id = id; if (_context.Chemicals.Any(x => x.Id == id)) { var originalChemName = _context.Chemicals.AsNoTracking().Where(x => x.Id == id)?.First()?.ChemicalName; if (originalChemName != null && originalChemName.ToLower() != chemical.ChemicalName.ToLower()) { if (_context.ChemicalFamily.AsNoTracking().Any(x => x.ChemicalName.ToLower() == originalChemName.ToLower())) { _context.ChemicalFamily.Where(x => x.ChemicalName.ToLower() == originalChemName.ToLower()).First().Quantity -= 1; if (_context.ChemicalFamily.Where(x => x.ChemicalName.ToLower() == originalChemName.ToLower()).First().Quantity < 0) { return(BadRequest("Quantity below 0")); } if (_context.ChemicalFamily.AsNoTracking().Any(x => x.ChemicalName.ToLower() == chemical.ChemicalName.ToLower())) { _context.ChemicalFamily.Where(x => x.ChemicalName.ToLower() == chemical.ChemicalName.ToLower()).First().Quantity += 1; } else { var newChemFamily = new ChemicalFamily(); newChemFamily.ChemicalName = chemical.ChemicalName; newChemFamily.reorderThreshold = -1; newChemFamily.ReorderQuantity = -1; newChemFamily.Quantity = 1; _context.ChemicalFamily.Add(newChemFamily); } } } } _context.Chemicals.Update(chemical); await _context.SaveChangesAsync(); } catch (Exception e) { return(BadRequest($"Error: {e.InnerException}")); } return(Ok(chemical)); }