// GET: Invoices/SelectItems public ActionResult SelectItems(int?id, int?Quantity) { var invoiceItems = new List <Lineitem>(); // load items from session if (Session["InvoiceItems"] != null) { invoiceItems = (List <Lineitem>)Session["InvoiceItems"]; } if (id != null) { if (invoiceItems.SingleOrDefault(ii => ii.product_inventory_id == id) == null) { if (Quantity > db.Product_Inventory.Find(id).unit_quantity) { return(RedirectToAction("Index", "SelectProductInventory", new { actionName = "SelectItems", controllerName = "Invoices", message = "Quantity requested is not available." })); } var li = new Lineitem(); li.lineitem_unit_quantity = Convert.ToInt32(Quantity); li.CalculateTotal(Convert.ToInt32(id)); // assign product id and calculate total li.ProductInventory.Product = db.Products.Find(li.ProductInventory.product_id); // assign product invoiceItems.Add(li); } else { var li = invoiceItems.SingleOrDefault(ii => ii.product_inventory_id == id); if (li != null) { if ((Quantity + li.lineitem_unit_quantity) > db.Product_Inventory.Find(id).unit_quantity) { return(RedirectToAction("Index", "SelectProductInventory", new { actionName = "SelectItems", controllerName = "Invoices", message = "Quantity requested is not available." })); } li.lineitem_unit_quantity += Convert.ToInt32(Quantity); li.CalculateTotal(Convert.ToInt32(id)); li.ProductInventory.Product = db.Products.Find(li.ProductInventory.product_id); } } } Session["InvoiceItems"] = invoiceItems; ViewBag.ActionTitle = "Select Items for "; return(View(invoiceItems)); }