// // /Inventory/ConcludeInventory public ActionResult ConcludeInventory() { InventoryContext db = new InventoryContext(); var inventories = db.Inventories.Select(x => x).ToList(); var inv = inventories.LastOrDefault(); inv.Completed = true; foreach (var item in db.InventoryItems.Where(x => x.InventoryId == inv.Id)) { item.IsInventoried = false; } db.Entry(inv).State = EntityState.Modified; db.SaveChanges(); //TODO: Create Confirmation Page return RedirectToAction("Index"); }
public ActionResult TakeItemInventory(TestItemInventoryVM vm) { InventoryContext db = new InventoryContext(); Inventory inventory = db.Inventories.Find(vm.InventoryId); foreach (var item in vm.RegularlyOrderedProducts) { Product product = db.Products.Find(item.Id); var retrievedInvItem = (from i in db.InventoryItems where i.ProductId == product.Id && i.InventoryId == inventory.Id select i).FirstOrDefault(); InventoryItem invItem = new InventoryItem { Product = product, ProductId = product.Id, Inventory = inventory, InventoryId = inventory.Id, Quantity = item.UnitsInStock }; //Ensure Quantity has changed before trying to set values if (item.UnitsInStock != product.UnitsInStock) { invItem.IsInventoried = true; } //If the InventoryItem is different from what's passed from the view, always take what's passed from the view else if (item.IsInventoried != invItem.IsInventoried) { invItem.IsInventoried = item.IsInventoried; } //Set UnitsInStock on Product product.UnitsInStock = item.UnitsInStock; db.Entry(product).State = EntityState.Modified; //If record exists, update it. if (retrievedInvItem != null) { db.Entry(retrievedInvItem).CurrentValues.SetValues(invItem); } //If record doesn't exist, add it else { db.InventoryItems.Add(invItem); } db.SaveChanges(); } return RedirectToAction("TakeInventory"); }
// // GET: /Inventory/Create public ActionResult TakeInventory() { InventoryContext db = new InventoryContext(); TakeInventoryVM vm = new TakeInventoryVM(); Inventory takeInventory = new Inventory(); //Determine if an inventory exists. Create one if it doesn't. if (db.Inventories.All(x => x.Completed)) { takeInventory.Date = DateTime.Now; db.Inventories.Add(takeInventory); db.SaveChanges(); vm.InventoryId = takeInventory.Id; } else { var inventories = db.Inventories.Select(x => x).ToList(); var inv = inventories.LastOrDefault(); vm.InventoryId = inv.Id; } //Get list of tests to display on view var testsToInventory = (from x in db.Tests where x.Products.Count() > 0 select x).OrderBy(x => x.Abbreviation).ToList(); var invItems = (from i in db.InventoryItems where i.InventoryId == vm.InventoryId select i); var regularlyOrderedProducts = (from p in db.Products where p.RegularlyOrdered == true select p).ToList(); foreach (var item in testsToInventory) { TakeInventoryVM.Test test = new TakeInventoryVM.Test(); foreach (var p in item.Products) { if (p.RegularlyOrdered == true) { test.Id = item.Id; test.TestName = item.Abbreviation; } } vm.Tests.Add(test); } foreach (var item in vm.Tests) { //Determine how to set IsComplete property var invItemsForTest = (from i in invItems where i.Product.TestId == item.Id select i).ToList(); var regOrderedByTest = (from p in regularlyOrderedProducts where p.TestId == item.Id select p).ToList(); //For Test.IsComplete to be 'true' there must be the same number of InventoryItems as there are RegularlyOrderedProducts // and their 'IsComplete' properties must all be set to 'true' if (invItemsForTest.Count() == regOrderedByTest.Count() && invItemsForTest.All(x => x.IsInventoried)) { item.IsComplete = true; } else { item.IsComplete = false; } } return View(vm); }