public ActionResult SellPiece()
        {
            var form = new ItemInventory
            {
                ItemList =
                      _context.Items.ToListItems(t => (t.ItemCode + " - " + t.ItemName),
                          v => v.ItemId.ToString(CultureInfo.InvariantCulture), "Please Select...")
            };

            return View(form);
        }
        public ActionResult SellPiece(ItemInventory formItemInventory)
        {
            try
            {
                var itemInventory = _context.Inventories.SingleOrDefault(i => i.Carton.ItemId == formItemInventory.ItemId);
                if (itemInventory == null)
                {
                    //TODO: Divide into cartons and pieces
                    return RedirectToAction<InventoryController>(c => c.Index())
                         .WithWarning("No Inventory exists!");

                }
                //TODO: Update
                var carton = _context.Cartons.SingleOrDefault(i => i.ItemId == formItemInventory.ItemId);

                if (carton == null)
                {
                    //TODO: This shouldn't happen in business case
                    return RedirectToAction<InventoryController>(c => c.Index())
                        .WithError("Database Error, Contact Administrator");
                }

                var existingPieces = itemInventory.NumberOfPieces;
                var existingCartons = itemInventory.NumberOfCartons;
                var totalPieces = (existingCartons * carton.NumberOfPieces) + existingPieces;

                if (totalPieces < formItemInventory.NumberOfPieces)
                {
                    return RedirectToAction<InventoryController>(c => c.Index())
                       .WithWarning("Sell Request is more than total inventory");
                }

                int remainingNumberOfCartons;
                int floatPieces;
                DivideIntoLotSize(totalPieces - formItemInventory.NumberOfPieces,
                    carton.NumberOfPieces, out remainingNumberOfCartons,
                    out floatPieces);


                itemInventory.NumberOfCartons = remainingNumberOfCartons;
                itemInventory.NumberOfPieces = floatPieces;

                _context.SaveChanges();

                return RedirectToAction<InventoryController>(c => c.Index())
                .WithSuccess("Piece(s) Sold!");
            }
            catch (Exception ex)
            {
                return RedirectToAction<InventoryController>(c => c.Index())
                .WithError("Error Selling Piece(s)");
            }
        }
        public ActionResult AddPiece(ItemInventory formItemInventory)
        {
            try
            {
                var itemInventory = _context.Inventories.SingleOrDefault(i => i.Carton.ItemId == formItemInventory.ItemId);
                if (itemInventory == null)
                {

                    //TODO: Divide into cartons and pieces
                    var carton = _context.Cartons.SingleOrDefault(i => i.ItemId == formItemInventory.ItemId);
                    if (carton == null)
                    {
                        //TODO: Need to think about a TPH Strategy; throw error for now
                        return RedirectToAction<InventoryController>(c => c.Index())
                            .WithError("No carton defined for respective Item");
                    }

                    int numberOfCartons;
                    int floatPieces;
                    DivideIntoLotSize(formItemInventory.NumberOfPieces, carton.NumberOfPieces, out numberOfCartons,
                        out floatPieces);

                    _context.Inventories.Add(new Inventory
                    {
                        CartonId = carton.CartonId,
                        NumberOfCartons = numberOfCartons,
                        NumberOfPieces = floatPieces
                    });

                }
                else
                {
                    //TODO: Update
                    var carton = _context.Cartons.SingleOrDefault(i => i.ItemId == formItemInventory.ItemId);

                    if (carton == null)
                    {
                        //TODO: This shouldn't happen in business case
                        return RedirectToAction<InventoryController>(c => c.Index())
                            .WithError("Database Error, Contact Administrator");
                    }

                    var existingPieces = itemInventory.NumberOfPieces;
                    var existingCartons = itemInventory.NumberOfCartons;

                    int additionalNumberOfCartons;
                    int floatPieces;
                    DivideIntoLotSize(existingPieces + formItemInventory.NumberOfPieces,
                        carton.NumberOfPieces, out additionalNumberOfCartons,
                        out floatPieces);


                    itemInventory.NumberOfCartons = existingCartons + additionalNumberOfCartons;
                    itemInventory.NumberOfPieces = floatPieces;
                }

                _context.SaveChanges();

                return RedirectToAction<InventoryController>(c => c.Index())
                .WithSuccess("Piece(s) Added!");
            }
            catch (Exception ex)
            {
                return RedirectToAction<InventoryController>(c => c.Index())
                .WithError("Error Adding Piece(s)");
            }
        }