Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }