public JsonResult OnGetItemStateChange() { var rawQS = Uri.UnescapeDataString(Request.QueryString.ToString()); var idx = rawQS.IndexOf('{'); if (idx == -1) { return(new JsonResult("ERROR~:No Parameters")); } var jsonQS = rawQS.Substring(idx); InvItemState invIS = JsonConvert.DeserializeObject <InvItemState>(jsonQS); if (invIS != null) { InventoryItem invItem = (invIS.state == NEEDED_STATE) ? _context.InventoryItem.Include(i => i.Item).FirstOrDefault(m => m.ItemId == invIS.invItemId) : _context.InventoryItem.FirstOrDefault(m => m.ItemId == invIS.invItemId); if (invItem != null) { if (invIS.pid > 0) { invItem.PersonId = invIS.pid; } invItem.State = invIS.state; _context.Attach(invItem).State = EntityState.Modified; } try { _context.SaveChanges(); } catch (DbUpdateConcurrencyException) { return(new JsonResult("ERROR~:Update DB Failed")); // TBD } if ((invItem.State == NEEDED_STATE) && (invItem?.Item != null)) { // Notify Item is needed var Item = _context.Item.FirstOrDefault(m => m.Id == invIS.invItemId); // TBD optimize with a single if (Item != null) { Task.Run(() => NotifyNeedAsync(_hostEnv, _configuration, _userManager, "CStat:Stock> Needed : " + Item.Name, false)); // no cleaning even async while user is active } } CurState cs = new CurState { invItemState = GetInvItemState(invItem), allState = GetAllState() }; return(new JsonResult(JsonConvert.SerializeObject(cs))); } return(new JsonResult("ERROR~:Incorrect Parameters")); }
public InvItemState GetInvItemState(InventoryItem invItem) { InvItemState invIS = new InvItemState(); // Get item DisplayName invIS.pid = -1; invIS.displayName = "Need?"; invIS.state = (int)InventoryItem.States.InStock; invIS.btnClass = "InStockBtn"; if (invItem.PersonId.HasValue) { invIS.pid = invItem.PersonId.Value; invIS.displayName = GetDisplayNameByPid(invIS.pid); } if (invItem.State.HasValue) { invIS.state = invItem.State.Value; switch (invIS.state) { case (int)InventoryItem.States.InStock: case (int)InventoryItem.States.InInv: invIS.btnClass = "InStockBtn"; invIS.displayName = "Need?"; break; case (int)InventoryItem.States.OpenNeed: invIS.btnClass = "OpenNeedBtn"; invIS.displayName = "Take"; break; case (int)InventoryItem.States.TakenNeed: invIS.btnClass = "TakenNeedBtn"; break; } } return(invIS); }