//delete by Id
        public ActionResult DeleteFromVerification(int id)
        {
            if (Session["User"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            if (Session["Company"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            int    palletNum = (int)Session["PalletNum"];
            string msg       = "";

            HttpResponseMessage response = GlobalVariables.WebApiClient.DeleteAsync("LoosePicking?id=" + id).Result;

            //TempData["RespondMessage"] = response.Content.ReadAsStringAsync().Result;
            if (response.IsSuccessStatusCode)
            {
                msg = response.Content.ReadAsStringAsync().Result;

                //Remove from PalletSelectionModel List
                List <PalletSelectionModel> psms         = (List <PalletSelectionModel>)Session["PalletSelectionModels"];
                List <PalletSelectionModel> verifiedPsms = psms.Where(w => w.PalletNum == palletNum).ToList();
                PalletSelectionModel        ps           = verifiedPsms.Where(w => w.Id == id).SingleOrDefault();
                decimal redeemQty = ps.PalletQty;
                string  uniqueKey = ps.UD108Key1;
                verifiedPsms.Remove(ps);
                Session["PalletSelectionModels"] = verifiedPsms;

                //Add back the delete Qty to the PartNum , find by UD108Key1
                LoosePickingDetailModel lpd = (LoosePickingDetailModel)Session["LoosePickingDetailModel"];
                if (uniqueKey == lpd.UD108Key1)
                {
                    lpd.Qty = lpd.Qty + redeemQty;
                    Session["LoosePickingDetailModel"] = lpd;
                }
                msg = "Success";
            }

            //TempData["ResponseMessage"] = msg;
            //return View("Verification", verifiedPsms);

            return(Json(new { Message = msg }, JsonRequestBehavior.AllowGet));
        }
        // Checking Lot Num in Picking Process. (One of the function in ProductScanning Page)
        public ActionResult CheckProductScanningLotNum(string Company, string PartNum, string LotNum)
        {
            if (Session["User"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            if (Session["Company"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            string  msg  = "-";
            decimal _Qty = 0;
            //LPLotNum
            //LPRetrieve

            string Qry = $"LPLotNum?Company={Company}&PartNum={PartNum}&LotNum={LotNum}";
            HttpResponseMessage response = GlobalVariables.WebApiClient.GetAsync(Qry).Result;

            if (response.IsSuccessStatusCode)
            {
                PalletSelectionModel p = new PalletSelectionModel();
                p = response.Content.ReadAsAsync <PalletSelectionModel>().Result;
                PalletSelectionModel pallet = (PalletSelectionModel)Session["PalletSelectionModel"];
                pallet.FromWareHouse = p.FromWareHouse; // "L05";
                pallet.FromBinNum    = p.FromBinNum;    // "RS_BTL";
                pallet.ToWareHouse   = p.ToWareHouse;   // "L09";
                pallet.ToBinNum      = p.ToBinNum;      // "L09";
                //pallet.Qty = rmApi.Qty;
                pallet.LotNum = p.LotNum;

                _Qty = p.PalletQty;

                //pallet.Id = rm.Id;

                // Set some missing data into the Current Session
                Session["PalletSelectionModel"] = pallet;
                msg = "Valid";

                //Session["RetrieveApiModel"] = rm;
                //return RedirectToAction("Retrieve");
                return(Json(new { Message = msg, PalletQty = _Qty, Warning = p.LotCheck }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                string msgJson = response.Content.ReadAsStringAsync().Result;

                try
                {
                    JObject jObject = JObject.Parse(msgJson);
                    string  msg_    = (string)jObject.SelectToken("Message");
                    string  msgDtl  = (string)jObject.SelectToken("MessageDetail");
                    if (msgDtl == null)
                    {
                        msg = msg_;
                    }
                    else
                    {
                        msg = msgDtl;
                    }
                }
                catch (Exception ex)
                {
                    msg = msgJson;
                }
            }

            return(Json(new { Message = msg }, JsonRequestBehavior.AllowGet));
        }
        //public ActionResult UpdateProductScanning(PalletSelectionModel obj)
        public ActionResult UpdateProductScanning(PalletSelectionModel obj)
        {
            if (Session["User"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            if (Session["Company"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            PalletSelectionModel sessionPallet = (PalletSelectionModel)Session["PalletSelectionModel"];

            obj.FromWareHouse = sessionPallet.FromWareHouse; //"L05";
            obj.FromBinNum    = sessionPallet.FromBinNum;    // "RS_BTL";
            obj.ToWareHouse   = sessionPallet.ToWareHouse;   //"L09";
            obj.ToBinNum      = sessionPallet.ToBinNum;      //"L09";
            //pallet.Qty = rmApi.Qty;
            obj.ShipByDate = (DateTime)Session["ShipByDate"];

            string errMsg = "-";
            string msg    = "-";
            string status = "";

            //Check Qty. If finish, change to LoosePickStatus to Full
            LoosePickingDetailModel lpd = (LoosePickingDetailModel)Session["LoosePickingDetailModel"];
            decimal newLpdQty           = 0;
            decimal qty       = lpd.Qty;
            decimal palletQty = obj.PalletQty;

            newLpdQty = qty - palletQty;
            if (newLpdQty <= 0)
            {
                obj.LoosePickStatus = "Full";
            }

            //JavaScriptSerializer js = new JavaScriptSerializer();
            //var json = js.Serialize(obj);


            HttpResponseMessage response = GlobalVariables.WebApiClient.PostAsJsonAsync("LPPalletSelection", obj).Result;

            if (response.IsSuccessStatusCode)
            {
                //Set New Qty in LPDM Session
                //lpd.Qty = newLpdQty;
                //Session["LoosePickingDetailModel"] = lpd;
                //Session["LoosePickingDetailModelXQty"] = newLpdQty;
                lpd.Qty = newLpdQty;
                Session["LoosePickingDetailModel"] = lpd;
                msg    = response.Content.ReadAsStringAsync().Result;
                status = "Success";

                try
                {
                    JObject jObject = JObject.Parse(msg);
                    string  msgJ    = (string)jObject.SelectToken("Message");
                    string  msgDtl  = (string)jObject.SelectToken("MessageDetail");
                    if (msgDtl == null)
                    {
                        errMsg = msgJ;
                    }
                    else
                    {
                        errMsg = msgDtl;
                    }
                }
                catch (Exception ex)
                {
                    errMsg = msg;
                }
            }
            else
            {
                msg    = response.Content.ReadAsStringAsync().Result;
                status = "Fail";

                try
                {
                    JObject jObject = JObject.Parse(msg);
                    string  msgJ    = (string)jObject.SelectToken("Message");
                    string  msgDtl  = (string)jObject.SelectToken("MessageDetail");
                    if (msgDtl == null)
                    {
                        errMsg = msgJ;
                    }
                    else
                    {
                        errMsg = msgDtl;
                    }
                }
                catch (Exception ex)
                {
                    errMsg = msg;
                }
            }


            return(Json(new { Message = errMsg, Status = status }, JsonRequestBehavior.AllowGet));
        }
        //************PRODUCT SCANNING - PICKING PROCESS************//

        //Product Scanning Page for Picking Process. id = PalletNum
        public ActionResult ProductScanning(int id)
        {
            if (Session["User"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            if (Session["Company"] == null)
            {
                return(RedirectToAction("Login", "Home"));
            }

            //Testing data
            //List<LotNumSuggestion> lotNums = new List<LotNumSuggestion>();
            //LotNumSuggestion ln = new LotNumSuggestion();
            //ln.LotNum = "Lot12345";
            //ln.OnHandQty = 100;
            //lotNums.Add(ln);

            //LotNumSuggestion ln2 = new LotNumSuggestion();
            //ln2.LotNum = "LotZXC";
            //ln2.OnHandQty = 200;
            //lotNums.Add(ln2);

            //if (lotNums != null)
            //{
            //    //Display in the modal
            //    TempData["LotNums"] = lotNums;
            //}


            int palletNum = id;

            Session["PalletNum"] = palletNum;

            //Data from loose picking detail bring to pallet selection model for update purpose
            LoosePickingDetailModel lpd = (LoosePickingDetailModel)Session["LoosePickingDetailModel"];

            //Set some data from LoosePickingDetailModel Object to PalletSelectionModel for update through WEB Api. Because we need to post by PalletSelectionModel Object through WEB Api /LPPalletSelection(POST)
            PalletSelectionModel ps = new PalletSelectionModel();

            ps.Id         = lpd.Id;
            ps.UD108Key1  = lpd.UD108Key1;
            ps.SysRowId   = lpd.SysRowId;
            ps.Company    = lpd.Company;
            ps.Plant      = lpd.Plant;
            ps.SONum      = lpd.SONum;
            ps.ShipByDate = lpd.ShipByDate;
            ps.PartNum    = lpd.PartNum;
            ps.PartDesc   = lpd.PartDesc;
            ps.ActQty     = lpd.ActQty;
            ps.PrevQty    = lpd.PrevLPQty;
            ps.PalletNum  = id;     //
            //ps.LotNum = ""; // Set after they scan the lot num and its valid. On Action: CheckProductScanningLotNum
            ps.PalletQty = lpd.Qty; //
            ps.UomCode   = lpd.UomCode;
            //ps.FromWareHouse
            //ps.FromBinNum
            //ps.ToWareHouse
            //ps.ToBinNum
            //ps.VerifyStatus
            ps.Remark          = lpd.Remark;
            ps.LoosePickStatus = lpd.LoosePickStatus;
            ps.UserId          = lpd.UserId;
            ps.DPNum           = lpd.DPNum;
            //ps.RowMod

            //Keep PalletSelectionModel Object into Session
            Session["PalletSelectionModel"] = ps;

            //Get Suggested Lot Num from Web API
            List <LotNumSuggestion> lotNums = new List <LotNumSuggestion>();

            lotNums = GetSuggestionLotNum(ps.Company, ps.PartNum);
            if (lotNums != null)
            {
                //Display in the modal
                TempData["LotNums"] = lotNums;
            }

            return(View(ps));
        }