// GET: Storages/avaiable/5&3 public async Task <ActionResult> MatchGoods(int?id) { int CurrentUserID = (int)Session["CurrentUserID"]; OrderedGood orderedGood = await db.OrderedGoods.FindAsync(id); OrderedGoodViewModel orderedgood = new OrderedGoodViewModel { OrderedGoodInfo = orderedGood, GoodName = db.GoodInfoes.Find(orderedGood.GoodID).Name }; List <StorageGoodViewModel> AvaiavleGoodsInStorage = new List <StorageGoodViewModel>(); foreach (Storage storagegood in db.Storages.Where(d => d.OrderID == null && d.GoodID == orderedGood.GoodID && d.UserID == CurrentUserID)) { AvaiavleGoodsInStorage.Add(new StorageGoodViewModel { StorageGoodInfo = storagegood, GoodName = db.GoodInfoes.Find(storagegood.GoodID).Name }); } MatchGoodViewModel MatchGoodinStorage = new MatchGoodViewModel { OrderedGood = orderedgood, //OrderInfoView = await GetOrderViewModelData(OrderID), AvailableGoodsInStorage = AvaiavleGoodsInStorage }; return(View(MatchGoodinStorage)); }
public async Task <ActionResult> Assign([Bind(Include = "SelectedStorageID,SelectedOrderedGoodID")] MatchGoodViewModel AssignedGoodInStorage) { if (AssignedGoodInStorage == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Storage storage = await db.Storages.FindAsync(AssignedGoodInStorage.SelectedStorageID); int orderedgoodID = AssignedGoodInStorage.SelectedOrderedGoodID; OrderedGood orderedgood = await db.OrderedGoods.FindAsync(orderedgoodID); int GoodID = orderedgood.GoodID; if (storage == null) { return(HttpNotFound()); } int avaiableamount = storage.Quantity; int selectedamount = orderedgood.Quantity; if (selectedamount > avaiableamount) { return(HttpNotFound()); } int restofgoodamount = avaiableamount - selectedamount; if (restofgoodamount == 0) { storage.OrderID = orderedgood.OrderID; db.Entry(storage).State = EntityState.Modified; await db.SaveChangesAsync(); } else { storage.OrderID = orderedgood.OrderID; storage.Quantity = selectedamount; db.Entry(storage).State = EntityState.Modified; await db.SaveChangesAsync(); //add new record for rest Storage newstorage = new Storage { GoodID = storage.GoodID, Cost = storage.Cost, Quantity = restofgoodamount, TotalCost = storage.Cost * restofgoodamount, }; db.Storages.Add(newstorage); await db.SaveChangesAsync(); } return(RedirectToAction("MatchGoods", "Orders", new { id = orderedgoodID })); }