Пример #1
0
        public async Task <ActionResult> shipCheckDtl(shipOrderViewModel unshipOrderDtl)
        {
            string shipnoticesid = "";//為了進貨單而設立的變數
            ////////////////////////////////////////////////
            //取得供應商帳號資料
            SupplierAccount supplier = User.Identity.GetSupplierAccount();

            supplierAccount = supplier.SupplierAccountID;
            supplierCode    = supplier.SupplierCode;
            ////////////////////////////////////////////////////
            //ShipNoticesUtilities utilities = new ShipNoticesUtilities();
            string message = "";
            //此LIST要用來存放出貨明細ID 用來寄送電子郵件給公司採購員
            List <string> shipDtlList    = new List <string>();
            List <int>    shipDtlListQty = new List <int>();
            string        shipNoticeID   = "";
            //建立一個LIST用來接住所有的OrderDtlItemChecked
            IList <OrderDtlItemChecked> OrderDtlChecked = unshipOrderDtl.orderDtlItemCheckeds;
            //用來存放確定有要出貨的LIST(有勾選)
            List <PurchaseOrderDtl> orderDtls = new List <PurchaseOrderDtl>();

            //檢查是否有勾選出貨,true為有勾,有則放進orderDtls
            foreach (var dtl in OrderDtlChecked)
            {
                if (dtl.Checked)
                {
                    PurchaseOrderDtl purchaseOrderDtl = db.PurchaseOrderDtl.Find(dtl.PurchaseOrderDtlCode);
                    orderDtls.Add(purchaseOrderDtl);
                }
            }
            //檢查是否至少一個被勾選,如沒有則跳回去UnshipOrderDtl頁面
            if (orderDtls.Count() == 0)
            {
                TempData["message"] = "<script>toastr.error('請選擇欲出貨商品!','通知')</script>";
                message             = "請選擇欲出貨商品!";
                return(RedirectToAction("UnshipOrderDtl", "ShipNotices", new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID, message = message }));
            }
            DateTime now = DateTime.Now;

            //檢查庫存是否足夠,不足則顯示庫存不足的訊息,足夠則扣掉該或源清單庫存
            //並新增該採購單明細實際出貨日期,新增出貨明細//
            foreach (var dtl in orderDtls)
            {
                SourceList sourceList = db.SourceList.Find(dtl.SourceListID);
                if (sourceList.UnitsInStock < unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty)
                {
                    //這裡要return 錯誤訊息,並且回到原頁面
                    TempData["message"] = "<script>Swal.fire({  icon: 'error',  title: 'Oops...',  text: '庫存不足!',  footer: '<a href>Why do I have this issue?</a>'})</script>";
                    message             = "庫存不足!";
                    // return Json(new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID, message = message }, JsonRequestBehavior.AllowGet);
                    return(RedirectToAction("UnshipOrderDtl", "ShipNotices", new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID, message = message }));
                }
                //扣除該料件貨源清單的庫存以及訂單數量
                //出貨數量要在這裡檢查,先檢查出貨明細裡面的shipQty比對是否小於同一個採購單明細的Qty,
                //是的話,扣除該料件貨源清單的庫存以及訂單數量並且更新shipQty
                if (db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault() != null)
                {
                    ShipNoticeDtl snd      = db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault();
                    int           orderQty = dtl.Qty;
                    if (orderQty > snd.ShipQty || (unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty + snd.ShipQty) < orderQty)
                    {
                        sourceList.UnitsInStock = sourceList.UnitsInStock - unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty;
                    }
                }
                else
                {
                    sourceList.UnitsInStock = sourceList.UnitsInStock - unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty;
                    if (sourceList.UnitsOnOrder < dtl.Qty)
                    {
                        sourceList.UnitsOnOrder = 0;
                    }
                    else
                    {
                        sourceList.UnitsOnOrder = sourceList.UnitsOnOrder - dtl.Qty;
                    }
                }
                //新增出貨通知 應該在這 先檢查是否有該筆出貨通知(因為有可能分開出貨,所以同筆訂單後出貨的就不用在增加出貨通知,只要增加出貨明細即可)
                if (db.ShipNotice.Where(x => x.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID).FirstOrDefault() == null)
                {
                    //新增出貨通知//感覺應該要在外面再加一個迴圈做出貨通知以及出貨明細
                    ShipNotice shipNotice = new ShipNotice();
                    string     snId       = $"SN-{now:yyyyMMdd}-";
                    int        count      = db.ShipNotice.Where(x => x.ShipNoticeID.StartsWith(snId)).Count();
                    count++;
                    snId = $"{snId}{count:000}";
                    shipNotice.ShipNoticeID      = snId;
                    shipnoticesid                = snId; //將出貨ID存入變數中
                    shipNotice.PurchaseOrderID   = unshipOrderDtl.PurchaseOrderID;
                    shipNotice.ShipDate          = now;
                    shipNotice.EmployeeID        = db.PurchaseOrder.Find(unshipOrderDtl.PurchaseOrderID).EmployeeID;
                    shipNotice.CompanyCode       = db.Employee.Find(shipNotice.EmployeeID).CompanyCode;
                    shipNotice.SupplierAccountID = supplierAccount;
                    db.ShipNotice.Add(shipNotice);
                    //先把新增的出貨通知資料存進資料庫
                    db.SaveChanges();
                }
                //檢查是否有該出貨明細,沒有則新增出貨明細
                if (db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault() == null)
                {
                    //新增出貨明細 保存期限先不填
                    ShipNoticeDtl shipNoticeDtl = new ShipNoticeDtl();
                    shipNoticeDtl.ShipNoticeID = db.ShipNotice.Where(x => x.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID).FirstOrDefault().ShipNoticeID;
                    shipnoticesid = shipNoticeDtl.ShipNoticeID; //將出貨ID存入變數中
                    shipNoticeDtl.PurchaseOrderDtlCode = dtl.PurchaseOrderDtlCode;
                    shipNoticeDtl.ShipQty = unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty;
                    //金額為數量*單價*折扣*批量
                    shipNoticeDtl.ShipAmount = Convert.ToInt32(shipNoticeDtl.ShipQty * dtl.PurchaseUnitPrice * (1 - dtl.Discount) * dtl.QtyPerUnit);
                    //把新出貨明細資料加進資料庫
                    db.ShipNoticeDtl.Add(shipNoticeDtl);
                    //存進出貨明細OID給寄送電子郵件用,改成存採購單編號CODE,因為OID會有新增先後順序的問題
                    shipDtlList.Add(dtl.PurchaseOrderDtlCode);
                    shipDtlListQty.Add(unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty);
                }
                //有的話,則去修改出貨明細表的出貨數量和出貨金額
                else
                {
                    ShipNoticeDtl snd = db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault();
                    snd.ShipQty        += unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty;
                    snd.ShipAmount      = Convert.ToInt32(snd.ShipQty * dtl.PurchaseUnitPrice * (1 - dtl.Discount) * dtl.QtyPerUnit);
                    db.Entry(snd).State = EntityState.Modified;
                    //存進出貨明細OID給寄送電子郵件用,改成存採購單編號CODE,因為OID會有新增先後順序的問題
                    shipDtlList.Add(dtl.PurchaseOrderDtlCode);
                    shipDtlListQty.Add(unshipOrderDtl.orderDtlItemCheckeds.Where(x => x.PurchaseOrderDtlCode == dtl.PurchaseOrderDtlCode).FirstOrDefault().Qty);
                }
                //不管是採購單明細或是採購單有異動都要新增採購單異動總表
                //新增採購單異動總表(明細)
                POChanged pOChanged = new POChanged();
                pOChanged.PurchaseOrderID       = unshipOrderDtl.PurchaseOrderID;
                pOChanged.POChangedCategoryCode = POChangedCategoryCodeShipped;
                pOChanged.RequestDate           = now;
                pOChanged.DateRequired          = dtl.DateRequired;
                pOChanged.RequesterRole         = RequesterRoleSupplier;
                pOChanged.RequesterID           = supplierAccount;
                pOChanged.PurchaseOrderDtlCode  = dtl.PurchaseOrderDtlCode;
                pOChanged.Qty = db.PurchaseOrderDtl.Find(dtl.PurchaseOrderDtlCode).Qty;
                db.POChanged.Add(pOChanged);
                db.SaveChanges();
                //新增採購單明細出貨日期欄位以及POchangedOID欄位
                dtl.ShipDate = now;
                //更新採購單明細POChangedOID欄位
                //找出最新一筆採購單異動資料且是供應商的
                dtl.POChangedOID = utilities.FindPOChangedOIDByDtlCode(RequesterRoleSupplier, dtl.PurchaseOrderDtlCode);
                //把資料庫中的每筆訂單明細以及貨源清單資料狀態改為追蹤
                db.Entry(dtl).State        = EntityState.Modified;
                db.Entry(sourceList).State = EntityState.Modified;
            }
            //存進資料庫
            db.SaveChanges();
            //檢查該筆訂單所有產品是否都已經出貨,如果是,將該筆採購單狀態改為已出貨"S"
            //預設先當作都已出貨
            bool poCheck = true;
            var  q       = from pod in db.PurchaseOrderDtl
                           where pod.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID
                           select pod;

            foreach (var pod in q)
            {
                if (pod.ShipDate == null)
                {
                    //找到未出貨產品,代表尚未全部出貨
                    poCheck = false;
                }
                else
                {
                    //如果有出貨過,檢查出貨數量是否跟採購單採購數量一致
                    ShipNoticeDtl snd = db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == pod.PurchaseOrderDtlCode).SingleOrDefault();
                    if (snd != null && pod.Qty > snd.ShipQty)
                    {
                        poCheck = false;
                    }
                }
            }
            //確認是否已全部出貨,如果是,修改採購單狀態為已出貨(S)並新增一筆採購單異動資料
            //採購單明細的POChangedOID欄位也要更新
            if (poCheck)
            {
                //改採購單狀態
                db.PurchaseOrder.Find(unshipOrderDtl.PurchaseOrderID).PurchaseOrderStatus = POChangedCategoryCodeShipped;
                //新增採購單異動總表
                POChanged pOChanged = new POChanged();
                pOChanged.PurchaseOrderID       = unshipOrderDtl.PurchaseOrderID;
                pOChanged.POChangedCategoryCode = POChangedCategoryCodeShipped;
                pOChanged.RequestDate           = now;
                pOChanged.RequesterRole         = RequesterRoleSupplier;
                pOChanged.RequesterID           = supplierAccount;
                db.POChanged.Add(pOChanged);
                db.SaveChanges();
                //然後把找出來的採購單異動總表最新的POChangedOID更新至採購單明細POChangedOID欄位中
                var podQueryForPOChangedOID = from pod in db.PurchaseOrderDtl
                                              where pod.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID
                                              select pod;
                int pOChangedOID = utilities.FindPOChangedOID(RequesterRoleSupplier, unshipOrderDtl.PurchaseOrderID);
                foreach (var pod in podQueryForPOChangedOID)
                {
                    pod.POChangedOID    = pOChangedOID;
                    db.Entry(pod).State = EntityState.Modified;
                }
                db.SaveChanges();
                // TempData["message"] = "<script>Swal.fire({position: 'top-end',icon: 'success',title: ' 已全部出貨',showConfirmButton: false,timer: 1500})</script>";
                message = "已全部出貨";
            }
            //成功回原頁面
            //TempData["message"] = "<script>Swal.fire({position: 'top-end',icon: 'success',title: '出貨處理成功,庫存已扣除',showConfirmButton: false,timer: 1500})</script>";
            TempData["message"] = "出貨處理成功,庫存已扣除";
            if (message == "")
            {
                message = "出貨處理成功,庫存已扣除";
            }
            List <OrderDtlForMail> odm = orderDtlForMails(shipDtlList, shipDtlListQty);

            await SendMailToBuyer(odm);

            //呼叫新增進貨單方法
            PurchaseOrderReceivesController purchaseOrderReceivesController = new PurchaseOrderReceivesController();

            purchaseOrderReceivesController.Create(shipnoticesid);

            //return Json(new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID, message = message },JsonRequestBehavior.AllowGet);
            return(RedirectToAction("Index", "ShipNotices", new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID, message = message }));
        }
Пример #2
0
        //出貨按鈕ACTION結束在這
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// UnshipOrderDtl的patialView方法
        /// 改用PARTIALVIEW寫寫看
        /// </summary>
        /// <returns></returns>
        //回傳PATIALVIEW給UnShipOrderDtl.cshtml
        //這裡應該要檢查庫存不足,和已出貨的明細,並直接顯示在第一欄
        public ActionResult GetPurchaseOrderDtlPatialView(shipOrderViewModel unshipOrderDtlViewModel)
        {
            var q = from pod in db.PurchaseOrderDtl.AsEnumerable()
                    join sl in db.SourceList on pod.SourceListID equals sl.SourceListID
                    where pod.PurchaseOrderID == unshipOrderDtlViewModel.PurchaseOrderID
                    select new
            {
                pod.PurchaseOrderID,
                pod.PurchaseOrderDtlOID,
                pod.PurchaseOrderDtlCode,
                pod.Qty,
                pod.PurchasedQty,
                sl.UnitsInStock
            };
            IList <OrderDtlItemChecked> odc = new List <OrderDtlItemChecked>();

            foreach (var item in q)
            {
                OrderDtlItemChecked orderDtlItemChecked = new OrderDtlItemChecked();
                orderDtlItemChecked.PurchaseOrderDtlOID  = item.PurchaseOrderDtlOID;
                orderDtlItemChecked.PurchaseOrderDtlCode = item.PurchaseOrderDtlCode;
                int shipQty = 0;
                if (db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == item.PurchaseOrderDtlCode).SingleOrDefault() != null)
                {
                    shipQty = db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == item.PurchaseOrderDtlCode).SingleOrDefault().ShipQty;
                }
                orderDtlItemChecked.Qty = item.Qty - shipQty;
                //顯示庫存是否足夠
                if (item.UnitsInStock >= orderDtlItemChecked.Qty)
                {
                    orderDtlItemChecked.IsEnough = true;
                }
                else
                {
                    orderDtlItemChecked.IsEnough = false;
                }
                //預設為沒有勾選
                orderDtlItemChecked.Checked = false;
                odc.Add(orderDtlItemChecked);
            }

            IEnumerable <OrderDtlItem> od = null;

            var queryOrderitem = from pod in db.PurchaseOrderDtl
                                 join sl in db.SourceList
                                 on pod.SourceListID equals sl.SourceListID
                                 where pod.PurchaseOrderID == unshipOrderDtlViewModel.PurchaseOrderID
                                 select new OrderDtlItem
            {
                PurchaseOrderDtlOID  = pod.PurchaseOrderDtlOID,
                PurchaseOrderDtlCode = pod.PurchaseOrderDtlCode,
                PartName             = pod.PartName,
                PartNumber           = pod.PartNumber,
                QtyPerUnit           = pod.QtyPerUnit,
                TotalPartQty         = pod.TotalPartQty,
                PurchaseQty          = pod.Qty,
                SourceListID         = pod.SourceListID,
                CommittedArrivalDate = pod.CommittedArrivalDate,
                ShipDate             = pod.ShipDate,
                DateRequired         = pod.DateRequired,
                UnitsInStock         = sl.UnitsInStock
            };

            od = queryOrderitem.ToList();
            //檢查是否有出貨過,有的話要檢查是否出貨明細SHIPQTY是否和採購單QTY是否相同
            //相同的話,代表該商品已全部出貨完畢,Unship = true,否則仍然有需要出貨的數量,Unship = false
            foreach (var orderdtl in od)
            {
                if (orderdtl.ShipDate == null)
                {
                    orderdtl.Unship  = true;
                    orderdtl.ShipQty = 0;
                }
                else
                {
                    ShipNoticeDtl snd = db.ShipNoticeDtl.Where(x => x.PurchaseOrderDtlCode == orderdtl.PurchaseOrderDtlCode).SingleOrDefault();
                    if (snd != null && snd.ShipQty < orderdtl.PurchaseQty)
                    {
                        orderdtl.Unship  = true;
                        orderdtl.ShipQty = snd.ShipQty;
                    }
                    else
                    {
                        orderdtl.Unship  = false;
                        orderdtl.ShipQty = orderdtl.PurchaseQty;
                    }
                }
            }
            shipOrderViewModel uodvm = new shipOrderViewModel()
            {
                PurchaseOrderID      = unshipOrderDtlViewModel.PurchaseOrderID,
                orderDtlItems        = od,
                orderDtlItemCheckeds = odc
            };

            return(PartialView("_GetPurchaseOrderDtlPatialView", uodvm));
        }
Пример #3
0
        public ActionResult shipCheckDtl(UnshipOrderDtlViewModel unshipOrderDtl)
        {
            //建立一個LIST用來接住所有的OrderDtlItemChecked
            IList <OrderDtlItemChecked> OrderDtlChecked = unshipOrderDtl.orderDtlItemCheckeds;
            //用來存放確定有要出貨的LIST(有勾選)
            List <PurchaseOrderDtl> orderDtls = new List <PurchaseOrderDtl>();

            //檢查是否有勾選出貨,true為有勾,有則放進orderDtls
            foreach (var dtl in OrderDtlChecked)
            {
                if (dtl.Checked)
                {
                    PurchaseOrderDtl purchaseOrderDtl = db.PurchaseOrderDtl.Find(dtl.PurchaseOrderDtlCode);
                    orderDtls.Add(purchaseOrderDtl);
                }
            }
            DateTime          now         = DateTime.Now;
            List <SourceList> sourceLists = new List <SourceList>();

            //檢查庫存是否足夠,不足則顯示庫存不足的訊息,足夠則扣掉該或源清單庫存
            //並新增該採購單明細實際出貨日期,新增出貨明細//
            foreach (var dtl in orderDtls)
            {
                SourceList sourceList = db.SourceList.Find(dtl.SourceListID);
                if (sourceList.UnitsInStock < dtl.Qty)
                {
                    //這裡要return 錯誤訊息,並且回到原頁面
                    TempData["message"] = "<script>Swal.fire({  icon: 'error',  title: 'Oops...',  text: '庫存不足!',  footer: '<a href>Why do I have this issue?</a>'})</script>";
                    return(RedirectToAction("UnshipOrderDtl", "ShipNotices", new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID }));
                }
                //扣除該料件貨源清單的庫存以及訂單數量
                sourceList.UnitsInStock = sourceList.UnitsInStock - dtl.Qty;
                if (sourceList.UnitsOnOrder < dtl.Qty)
                {
                    sourceList.UnitsOnOrder = 0;
                }
                else
                {
                    sourceList.UnitsOnOrder = sourceList.UnitsOnOrder - dtl.Qty;
                }
                sourceLists.Add(sourceList);
                dtl.ShipDate = now;
                //新增出貨通知 應該在這 先檢查是否有該筆出貨通知(因為有可能分開出貨,所以同筆訂單後出貨的就不用在增加出貨通知,只要增加出貨明細即可)
                if (db.ShipNotice.Where(x => x.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID).FirstOrDefault() == null)
                {
                    //新增出貨通知//感覺應該要在外面再加一個迴圈做出貨通知以及出貨明細
                    ShipNotice shipNotice = new ShipNotice();
                    string     snId       = $"SN-{now:yyyyMMdd}-";
                    int        count      = db.ShipNotice.Where(x => x.ShipNoticeID.StartsWith(snId)).Count();
                    count++;
                    snId = $"{snId}{count:000}";
                    shipNotice.ShipNoticeID      = snId;
                    shipNotice.PurchaseOrderID   = unshipOrderDtl.PurchaseOrderID;
                    shipNotice.ShipDate          = now;
                    shipNotice.EmployeeID        = db.PurchaseOrder.Find(unshipOrderDtl.PurchaseOrderID).EmployeeID;
                    shipNotice.CompanyCode       = db.Employee.Find(shipNotice.EmployeeID).CompanyCode;
                    shipNotice.SupplierAccountID = supplierAccount;
                    db.ShipNotice.Add(shipNotice);
                    //先把新增的出貨通知資料存進資料庫
                    db.SaveChanges();
                }
                //新增出貨明細 保存期限先不填
                ShipNoticeDtl shipNoticeDtl = new ShipNoticeDtl();
                shipNoticeDtl.ShipNoticeID         = db.ShipNotice.Where(x => x.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID).FirstOrDefault().ShipNoticeID;
                shipNoticeDtl.PurchaseOrderDtlCode = dtl.PurchaseOrderDtlCode;
                shipNoticeDtl.ShipQty = dtl.Qty;
                //金額為數量*單價*折扣*批量
                shipNoticeDtl.ShipAmount = Convert.ToInt32(dtl.Qty * dtl.PurchaseUnitPrice * (1 - dtl.Discount) * dtl.QtyPerUnit);
                //把新出貨明細資料加進資料庫
                db.ShipNoticeDtl.Add(shipNoticeDtl);
                //把資料庫中的每筆訂單以及貨源清單資料狀態改為追蹤
                db.Entry(dtl).State        = EntityState.Modified;
                db.Entry(sourceList).State = EntityState.Modified;
            }
            //存進資料庫
            db.SaveChanges();
            //檢查該筆訂單所有產品是否都已經出貨,如果是,將該筆採購單狀態改為已出貨"S"
            //預設先當作都已出貨
            bool poCheck = true;
            var  q       = from pod in db.PurchaseOrderDtl
                           where pod.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID
                           select pod;

            foreach (var pod in q)
            {
                if (pod.ShipDate == null)
                {
                    //找到未出貨產品,代表尚未全部出貨
                    poCheck = false;
                }
            }
            //確認是否已全部出貨,如果是修改採購單狀態為已出貨(S)並新增一筆採購單異動資料
            //採購單明細的POChangedOID欄位也要更新
            if (poCheck)
            {
                //改採購單狀態
                db.PurchaseOrder.Find(unshipOrderDtl.PurchaseOrderID).PurchaseOrderStatus = POChangedCategoryCodeShipped;
                //新增採購單異動總表
                POChanged pOChanged = new POChanged();
                pOChanged.PurchaseOrderID       = unshipOrderDtl.PurchaseOrderID;
                pOChanged.POChangedCategoryCode = POChangedCategoryCodeShipped;
                pOChanged.RequestDate           = now;
                pOChanged.RequesterRole         = RequesterRoleSupplier;
                pOChanged.RequesterID           = supplierAccount;
                db.POChanged.Add(pOChanged);
                db.SaveChanges();
                //更新採購單明細POChangedOID欄位
                //2019 11/20 23:06 下方註解掉的程式碼不知道為甚麼會發生無法辨識此方法,無法放入站存區,所以只好分開來寫
                //int a = db.POChanged.Last(x => (x.RequesterRole == RequesterRoleSupplier) && (x.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID)).POChangedOID;

                //先找出最新一筆採購單異動資料且是供應商的
                var      poc          = db.POChanged.Where(x => (x.RequesterRole == RequesterRoleSupplier) && (x.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID));
                DateTime dt           = poc.FirstOrDefault().RequestDate;
                int      pOChangedOID = poc.FirstOrDefault().POChangedOID;
                foreach (var pocD in poc)
                {
                    if (pocD.RequestDate > dt)
                    {
                        dt           = pocD.RequestDate;
                        pOChangedOID = pocD.POChangedOID;
                    }
                }
                //然後把找出來的採購單異動總表最新的POChangedOID更新至採購單明細POChangedOID欄位中
                var podQueryForPOChangedOID = from pod in db.PurchaseOrderDtl
                                              where pod.PurchaseOrderID == unshipOrderDtl.PurchaseOrderID
                                              select pod;
                foreach (var pod in podQueryForPOChangedOID)
                {
                    pod.POChangedOID    = pOChangedOID;
                    db.Entry(pod).State = EntityState.Modified;
                }
                db.SaveChanges();
                TempData["message"] = "<script>Swal.fire({position: 'top-end',icon: 'success',title: '出貨處理成功,庫存已扣除',showConfirmButton: false,timer: 1500})</script>";
            }
            //成功回原頁面
            TempData["message"] = "<script>Swal.fire({position: 'top-end',icon: 'success',title: '已全部出貨',showConfirmButton: false,timer: 1500})</script>";
            return(RedirectToAction("UnshipOrderDtl", "ShipNotices", new { PurchaseOrderID = unshipOrderDtl.PurchaseOrderID }));
        }