public ActionResult Create([Bind(Include = "PartOID,PartNumber,PartName,PartSpec,PartUnitOID,CreatedDate,PictureAdress,PictureDescription")] Part part)
        {
            if (ModelState.IsValid)
            {
                if (Request.Files["File1"].ContentLength != 0)
                {
                    byte[] data = null;
                    using (BinaryReader br = new BinaryReader(Request.Files["File1"].InputStream))
                    {
                        data = br.ReadBytes(Request.Files["File1"].ContentLength);
                        MemoryStream oMemoryStream = new MemoryStream(data);
                        oMemoryStream.Position = 0;
                        Image  a       = System.Drawing.Image.FromStream(oMemoryStream);
                        Bitmap oBitmap = new Bitmap(a);

                        string path    = part.PartNumber + "-" + part.PartName + ".jpg";
                        string pathqqq = Path.Combine(Server.MapPath("~/imgs"), path);
                        oBitmap.Save(pathqqq);
                    }
                }
                part.PictureAdress = "~/imgs/" + part.PartNumber + "-" + part.PartName + ".jpg";
                part.CreatedDate   = DateTime.Now;

                db.Part.Add(part);
                db.SaveChanges();
                string path2 = Server.MapPath("~/imgs");
                return(RedirectToAction("Index"));
            }

            ViewBag.PartUnitOID = new SelectList(db.PartUnit, "PartUnitOID", "PartUnitName", part.PartUnitOID);
            return(View(part));
        }
        // POST: StockInDtls/Create
        // 若要免於過量張貼攻擊,請啟用想要繫結的特定屬性,如需
        // 詳細資訊,請參閱 https://go.microsoft.com/fwlink/?LinkId=317598。
        public void Create(string stockInid)
        {
            StockInDtl stockInDtl = new StockInDtl();

            stockInDtl.StockInID = stockInid;

            var porid = db.StockIn.Where(w1 => w1.StockInID == stockInid).Select(s => s.PurchaseOrderReceiveID).ToList();
            //庫存編號
            string si   = porid[0];
            var    code = db.PurchaseOrderReceiveDtl.Where(w => w.PurchaseOrderReceiveID == si).Select(s => s.PurchaseOrderDtlCode);
            var    sz   = code.ToList();

            foreach (var item in sz)
            {
                //1.倉庫必須先有資料才能有入庫明細,不然抓不到庫存編號
                //2.必須選擇所要進入的倉庫是哪個,因為一個料件可能存放不同倉庫
                //3.等於不能自動產生
                var    sourcelist = db.PurchaseOrderDtl.Where(w => w.PurchaseOrderDtlCode == item).Select(s => s.SourceListID).ToList();
                string list       = sourcelist[0];
                var    codee      = db.InventoryDtl.Where(w => w.SourceListID == list).Select(s => s.InventoryCode).ToList();
                stockInDtl.InventoryCode = codee[0];
                var num = db.PurchaseOrderDtl.Where(w => w.PurchaseOrderDtlCode == item).Select(s => s.PartNumber).ToList();
                stockInDtl.PartNumber = num[0];
                stockInDtl.StockInQty = 0;

                if (ModelState.IsValid)
                {
                    db.StockInDtl.Add(stockInDtl);
                    db.SaveChanges();
                }
            }
        }
Beispiel #3
0
        public ActionResult Create([Bind(Include = "ProductOID,ProductNumber,ProductName,PictureAdress,PictureDescription")] Product product)
        {
            if (ModelState.IsValid)
            {
                db.Product.Add(product);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(product));
        }
Beispiel #4
0
        public ActionResult Create([Bind(Include = "WarehouseInfoOID,WarehouseCode,WarehouseName,Address,EmployeeID,Tel,Remark")] WarehouseInfo warehouseInfo)
        {
            if (ModelState.IsValid)
            {
                db.WarehouseInfo.Add(warehouseInfo);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.EmployeeID = new SelectList(db.Employee, "EmployeeID", "Name", warehouseInfo.EmployeeID);
            return(View(warehouseInfo));
        }
 public ActionResult Edit([Bind(Include = "PurchaseOrderOID,PurchaseOrderID,SupplierCode,EmployeeID,ReceiverName,ReceiverTel,ReceiverMobile,ReceiptAddress,CreateDate,PurchaseOrderStatus,SignStatus,SignFlowOID")] PurchaseOrder purchaseOrder)
 {
     if (ModelState.IsValid)
     {
         db.Entry(purchaseOrder).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.EmployeeID   = new SelectList(db.Employee, "EmployeeID", "Name", purchaseOrder.EmployeeID);
     ViewBag.SignFlowOID  = new SelectList(db.SignFlow, "SignFlowOID", "OriginatorID", purchaseOrder.SignFlowOID);
     ViewBag.SupplierCode = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName", purchaseOrder.SupplierCode);
     return(View(purchaseOrder));
 }
        public ActionResult Create([Bind(Include = "PurchaseRequisitionOID,PurchaseRequisitionID,ProductNumber,EmployeeID,PRBeginDate,ProcessStatus,SignStatus,SignFlowOID")] PurchaseRequisition purchaseRequisition)
        {
            int    z = 1;
            string x = "", year, month, day;

            year  = DateTime.Now.Year.ToString();
            month = DateTime.Now.Month.ToString();
            day   = DateTime.Now.Day.ToString();
            x     = year + month + day;
            string y = "PR-" + x + "-00" + z.ToString();

            for (int i = 0; i < db.PurchaseRequisition.Count(); i++)
            {
                PurchaseRequisition test = db.PurchaseRequisition.Find(y);
                if (z < 9)
                {
                    if (test != null)
                    {
                        z   += 1;
                        y    = "PR-" + x + "-00" + z.ToString();
                        test = db.PurchaseRequisition.Find(y);
                    }
                }
                else if (z < 99)
                {
                    if (test != null)
                    {
                        z   += 1;
                        y    = "PR-" + x + "-0" + z.ToString();
                        test = db.PurchaseRequisition.Find(y);
                    }
                }
                else
                {
                    if (test != null)
                    {
                        z   += 1;
                        y    = "PR-" + x + "-" + z.ToString();
                        test = db.PurchaseRequisition.Find(y);
                    }
                }
            }
            purchaseRequisition.EmployeeID            = "CE00002";
            purchaseRequisition.ProcessStatus         = "N";
            purchaseRequisition.SignStatus            = "S";
            purchaseRequisition.PurchaseRequisitionID = y;
            //PurchaseRequisitionID請購單編號=PR-yyyyMMdd-3碼流水號(PR-20191023-001)
            if (ModelState.IsValid)
            {
                purchaseRequisition.PRBeginDate = DateTime.Now;
                db.PurchaseRequisition.Add(purchaseRequisition);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.EmployeeID    = new SelectList(db.Employee, "EmployeeID", "Name", purchaseRequisition.EmployeeID);
            ViewBag.ProductNumber = new SelectList(db.Product, "ProductNumber", "ProductName", purchaseRequisition.ProductNumber);
            ViewBag.SignFlowOID   = new SelectList(db.SignFlow, "SignFlowOID", "OriginatorID", purchaseRequisition.SignFlowOID);
            return(View(purchaseRequisition));
        }
Beispiel #7
0
        public ActionResult Create(WarehouseInfo warehouseInfo)
        {
            string message = "新增成功!!";
            bool   status  = true;

            if (ModelState.IsValid)
            {
                db.WarehouseInfo.Add(warehouseInfo);
                db.SaveChanges();
                return(Json(new { status = status, message = message, id = db.WarehouseInfo.Max(x => x.WarehouseInfoOID) }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                message = "新增失敗!!";
                status  = false;
                return(Json(new { status = status, message = message }, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #8
0
        public JsonResult UpdateStock([Bind(Include = "UnitsInStock,PartNumber,SourceListOID,SourceListID")] SourceList SourceList)
        {
            if (SourceList.SourceListID == null)
            {
                return(Json(new { status = "savefail", message = "修改失敗" }, JsonRequestBehavior.AllowGet));
            }
            SourceList sourceList = db.SourceList.Find(SourceList.SourceListID);

            sourceList.UnitsInStock    = SourceList.UnitsInStock;
            db.Entry(sourceList).State = EntityState.Modified;
            db.SaveChanges();
            return(Json(new { status = "saved", message = "修改成功" }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Create([Bind(Include = "SourceListOID,SourceListID,PartNumber,QtyPerUnit,MOQ,UnitPrice,SupplierCode,UnitsInStock,UnitsOnOrder,SafetyQty,EXP")] SourceList sourceList)
        {
            if (ModelState.IsValid)
            {
                sourceList.UnitsInStock = 0;
                sourceList.UnitsOnOrder = 0;
                sourceList.SourceListID = sourceList.PartNumber + "-" + sourceList.SupplierCode;
                db.SourceList.Add(sourceList);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.PartNumber   = new SelectList(db.Part, "PartNumber", "PartName", sourceList.PartNumber);
            ViewBag.SupplierCode = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName", sourceList.SupplierCode);
            return(View(sourceList));
        }
        //[ValidateAntiForgeryToken]
        public ActionResult changeUnitsInStock([Bind(Include = "UnitsInStock,PartNumber,SourceListOID,SourceListID")] SourceList SourceList)
        {
            int?UnitsInStock = SourceList.UnitsInStock;

            if (UnitsInStock == null || UnitsInStock <= 0)
            {
                return(Json("<script>Swal.fire({ title: '庫存數量不得小於零', showClass: {  popup: 'animated fadeInDown faster' }, hideClass:      {      popup: 'animated fadeOutUp faster' }    })</script>", JsonRequestBehavior.AllowGet));
            }
            SourceList a = db.SourceList.Find(SourceList.SourceListID);

            if (a == null)
            {
                return(HttpNotFound());
            }
            a.UnitsInStock = (int)UnitsInStock;
            db.Entry(a).Property(ap => ap.UnitsInStock).IsModified = true;
            db.SaveChanges();
            return(Json(new { value = true }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Create(SupInfoViewModel m)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var          maxThanOID = db.SupplierInfo.Select(x => x.SupplierInfoOID).Max() + 1;
                    string       SupCodestr = String.Format("S{0:00000}", Convert.ToDouble(maxThanOID));
                    var          supInfo    = db.SupplierInfo;
                    SupplierInfo s          = new SupplierInfo();
                    s.SupplierCode      = SupCodestr;
                    s.SupplierName      = m.SupplierName;
                    s.TaxID             = m.TaxID;
                    s.Address           = m.Address;
                    s.Email             = m.Email;
                    s.Tel               = m.Tel;
                    s.SupplierRatingOID = m.SupplierRatingOID;

                    supInfo.Add(s);
                    var result = db.SaveChanges();

                    if (result > 0)
                    {
                        TempData["Success"] = $"{s.SupplierName} 更新成功";
                        return(View("Index"));
                    }
                    else
                    {
                        ViewBag.Error = "對不起,伺服器發生錯誤,請再試一次。";
                        return(View(m));
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Error = $"對不起,伺服器發生錯誤: {ex.Message},請再試一次。";
            }
            return(View(m));
        }
        public ActionResult Create([Bind(Include = "PurchaseOrderOID,PurchaseRequisitionID,CheckedResultSetVM")] PurchaseOrderCreateViewModel model)
        {
            if (model == null || model.CheckedResultSetVM.Count(s => s.Checked) == 0)
            {
                TempData["ErrorMessage"] = "採購細項請至少勾選一項";
                return(RedirectToAction("Create"));
            }

            //從暫存新增至正式資料表
            DateTime now = DateTime.Now;

            using (PMSAEntities db = new PMSAEntities())
            {
                //新增採購單
                PurchaseOrderTemp pot = db.PurchaseOrderTemp.Find(model.PurchaseOrderOID);
                db.Entry(pot).State = EntityState.Detached;
                string poId  = $"PO-{now:yyyyMMdd}-";
                int    count = db.PurchaseOrder.Where(i => i.PurchaseOrderID.StartsWith(poId)).Count();
                count++;
                poId = $"{poId}{count:000}";
                PurchaseOrder po = new PurchaseOrder
                {
                    PurchaseOrderID     = poId,
                    SupplierCode        = pot.SupplierCode,
                    EmployeeID          = pot.EmployeeID,
                    CreateDate          = now,
                    PurchaseOrderStatus = "N"
                };
                db.PurchaseOrder.Add(po);
                db.SaveChanges();
                //新增採購單明細
                int index = 0;
                foreach (var item in model.CheckedResultSetVM)
                {
                    if (!item.Checked)
                    {
                        continue;
                    }
                    var podt = db.PurchaseOrderDtlTemp.Find(item.PurchaseOrderDtlOID);
                    index++;
                    PurchaseOrderDtl pod = new PurchaseOrderDtl
                    {
                        PurchaseOrderDtlCode = $"{poId}-{index:000}",
                        PurchaseOrderID      = poId,
                        PartNumber           = podt.PartNumber,
                        PartName             = podt.PartName,
                        PartSpec             = podt.PartSpec,
                        QtyPerUnit           = podt.QtyPerUnit,
                        TotalPartQty         = podt.TotalPartQty,
                        OriginalUnitPrice    = podt.OriginalUnitPrice,
                        Discount             = podt.Discount,
                        PurchaseUnitPrice    = podt.PurchaseUnitPrice,
                        Qty                  = podt.Qty,
                        PurchasedQty         = podt.PurchasedQty,
                        GoodsInTransitQty    = podt.GoodsInTransitQty,
                        Total                = podt.Total,
                        DateRequired         = podt.DateRequired,
                        CommittedArrivalDate = podt.CommittedArrivalDate,
                        ShipDate             = podt.ShipDate,
                        ArrivedDate          = podt.ArrivedDate,
                        SourceListID         = podt.SourceListID
                    };
                    db.PurchaseOrderDtl.Add(pod);
                    db.SaveChanges();
                    //請購單與採購單關聯
                    //TODO: 應從暫存取出,目前暫以傳入方式處理
                    PRPORelation rel = new PRPORelation
                    {
                        PurchaseOrderID            = poId,
                        PurchaseOrderDtlCode       = pod.PurchaseOrderDtlCode,
                        PurchaseRequisitionID      = model.PurchaseRequisitionID,
                        PurchaseRequisitionDtlCode = item.PurchaseRequisitionDtlCode,
                    };
                    db.PRPORelation.Add(rel);
                    db.SaveChanges();
                    //採購單異動總表
                    POChanged poc = new POChanged
                    {
                        PurchaseOrderID       = poId,
                        POChangedCategoryCode = "N",
                        RequestDate           = now,
                        RequesterRole         = "P",
                        RequesterID           = pot.EmployeeID
                    };
                    db.POChanged.Add(poc);
                    db.SaveChanges();
                    //更新PurchaseOrderDtl.POChangedOID
                    pod.POChangedOID = poc.POChangedOID;
                    db.Entry(pod).Property(podp => podp.POChangedOID).IsModified = true;
                    db.SaveChanges();
                }
                //刪除暫存資料
                var PRPORelationTemps = db.PRPORelationTemp.Where(i => i.PurchaseOrderOID == model.PurchaseOrderOID);
                db.PRPORelationTemp.RemoveRange(PRPORelationTemps);
                db.SaveChanges();
                var PurchaseOrderDtlTemps = db.PurchaseOrderDtlTemp.Where(i => i.PurchaseOrderOID == model.PurchaseOrderOID);
                db.PurchaseOrderDtlTemp.RemoveRange(PurchaseOrderDtlTemps);
                var PurchaseOrderOld = db.PurchaseOrderTemp.Find(model.PurchaseOrderOID);
                db.PurchaseOrderTemp.Remove(PurchaseOrderOld);
            }

            return(RedirectToAction("Index"));
        }
Beispiel #13
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 }));
        }
        public ActionResult Create(InventoryDtl inventoryDtl)
        {
            string message = "新增成功!!";
            bool   status  = true;

            if (inventoryDtl.SourceListID != null)
            {
                int    z = 1;
                string y = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S0000" + z.ToString();

                for (int i = 0; i < db.InventoryDtl.Count(); i++)
                {
                    InventoryDtl test = new InventoryDtl();
                    if (z < 9)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S0000" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else if (z < 99)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S000" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else if (z < 999)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S00" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else if (z < 9999)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S0" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                }

                inventoryDtl.InventoryCode = y;

                var q = from p in db.SourceList
                        where p.SourceListID == inventoryDtl.SourceListID
                        select p.PartNumber;

                var p1 = q.ToList();

                var qe = from p in db.SourceList
                         select p.SourceListID;
                var q1 = from p in db.InventoryDtl
                         select p.SourceListID;
                var q2 = qe.Except(q1);

                int ui = inventoryDtl.UnitsInStock;
                var qt = from p in db.SourceList
                         where p.SourceListID == inventoryDtl.SourceListID
                         select p.QtyPerUnit;
                var pp  = qt.ToList();
                int qty = ui * Convert.ToInt32(pp[0].ToString());

                if (inventoryDtl.SafetyQty == null)
                {
                    inventoryDtl.SafetyQty = 0;
                }

                var use = User.Identity.GetEmployee();

                if (ModelState.IsValid)
                {
                    inventoryDtl.UnitsInStock           = qty;
                    inventoryDtl.PartNumber             = p1[0].ToString();
                    inventoryDtl.CreateEmployeeID       = use.EmployeeID;
                    inventoryDtl.LastModifiedEmployeeID = use.EmployeeID;
                    inventoryDtl.UnitsOnStockInOrder    = 0;
                    inventoryDtl.UnitsOnStockOutOrder   = 0;
                    inventoryDtl.CreateDate             = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                    inventoryDtl.LastModifiedDate       = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                    db.InventoryDtl.Add(inventoryDtl);
                    db.SaveChanges();

                    var ii = db.InventoryDtl.Max(x => x.InventoryDtlOID);

                    var inventorycode        = db.InventoryDtl.Where(w => w.InventoryDtlOID == ii).Select(s => s.InventoryCode);
                    var partnumber           = db.InventoryDtl.Where(w => w.InventoryDtlOID == ii).Select(s => s.Part.PartName);
                    var unitsonstockinorder  = db.InventoryDtl.Where(w => w.InventoryDtlOID == ii).Select(s => s.UnitsOnStockInOrder);
                    var unitsonstockoutorder = db.InventoryDtl.Where(w => w.InventoryDtlOID == ii).Select(s => s.UnitsOnStockOutOrder);
                    var unit = db.InventoryDtl.Where(w => w.InventoryDtlOID == ii).Select(s => s.UnitsInStock);

                    var inv = inventorycode.ToList();
                    var c   = inv[0].ToString();

                    var pat = partnumber.ToList();
                    var pa  = pat[0].ToString();

                    var uio = unitsonstockinorder.ToList();
                    var uis = uio[0].ToString();

                    var uoo = unitsonstockoutorder.ToList();
                    var uos = uoo[0].ToString();

                    var uin = unit.ToList();
                    var uii = uin[0].ToString();

                    return(Json(new { status = status, message = message, id = db.InventoryDtl.Max(x => x.InventoryDtlOID),
                                      c, pa, uis, uos, uii }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    message = "新增失敗!!";
                    status  = false;
                    return(Json(new { status = status, message = message }, JsonRequestBehavior.AllowGet));
                }
            }
            else
            {
                message = "新增失敗!!目前已沒有新的貨源清單編號可新增庫存!!!!";
                status  = false;
                return(Json(new { status = status, message = message }, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #15
0
        public ActionResult CreateSupInfo(SupInfoViewModel SupInfoModel)
        {
            //if (!ModelState.IsValid)
            //{
            //    BuyerSupAcc_Parent p = new BuyerSupAcc_Parent();
            //    p.SupInfoModel = SupInfoModel;
            //    return View("Create", p);
            //}

            //檢查是否有公司可選
            var result = getAllSupInfoNoContactOnlySupInfoToIndexAjax().Data;
            var data   = JsonConvert.SerializeObject(result);

            if (data == "[]")
            {
                try
                {
                    //supInfo
                    var          maxsupThanOID = db.SupplierInfo.Select(x => x.SupplierInfoOID).Max() + 1;
                    string       SupCodestr    = String.Format("S{0:00000}", Convert.ToDouble(maxsupThanOID));
                    SupplierInfo supinfo       = new SupplierInfo();
                    supinfo.SupplierCode      = SupCodestr;
                    supinfo.SupplierName      = SupInfoModel.SupplierName;
                    supinfo.TaxID             = SupInfoModel.TaxID;
                    supinfo.Tel               = SupInfoModel.Tel;
                    supinfo.Email             = SupInfoModel.Email;
                    supinfo.Address           = SupInfoModel.Address;
                    supinfo.SupplierRatingOID = null;

                    db.SupplierInfo.Add(supinfo);
                    var r1 = db.SaveChanges();
                    if (r1 > 0)
                    {
                        //新增公司後回到view
                        TempData["Success"] = $"{supinfo.SupplierName} 更新成功";
                        return(RedirectToAction("Create"));
                    }
                    else
                    {
                        ModelState.AddModelError("", "填寫欄位有錯誤");
                        BuyerSupAcc_Parent p = new BuyerSupAcc_Parent();
                        p.SupInfoModel = SupInfoModel;
                        return(View("Create", p));
                    }
                }
                catch (DbEntityValidationException ex)
                {
                    var entityError      = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage);
                    var getFullMessage   = string.Join("; ", entityError);
                    var exceptionMessage = string.Concat(ex.Message, "errors are: ", getFullMessage);
                    Console.WriteLine(exceptionMessage);
                    if (!ModelState.IsValid)
                    {
                        BuyerSupAcc_Parent p = new BuyerSupAcc_Parent();
                        p.SupInfoModel = SupInfoModel;
                        return(View("Create", p));
                    }
                }
            }
            //新增公司後回到view
            TempData["Success"] = "更新成功";
            return(RedirectToAction("Create"));
        }
        public IEnumerable <PurchaseOrderDtlItem> GetPurchaseOrderDtlList(string purchaseRequisitionID, string supplierCode)
        {
            IEnumerable <PurchaseOrderDtlItem> pods = null;
            DateTime now = DateTime.Now;

            //排除時間
            now = new DateTime(now.Year, now.Month, now.Day);
            //取得顯示資料
            using (PMSAEntities db = new PMSAEntities())
            {
                var podq = from pr in db.PurchaseRequisition
                           join prd in db.PurchaseRequisitionDtl
                           on new { pr.PurchaseRequisitionID, ID = pr.PurchaseRequisitionID } equals
                new { prd.PurchaseRequisitionID, ID = purchaseRequisitionID }
                join sl in db.SourceList
                    on new { prd.PartNumber, SupplierCode = supplierCode } equals
                new { sl.PartNumber, sl.SupplierCode }
                join p in db.Part
                on sl.PartNumber equals p.PartNumber
                where !(from prdRel in db.PRPORelation
                        select prdRel.PurchaseRequisitionDtlCode).Contains(prd.PurchaseRequisitionDtlCode) &&
                sl.SourceListDtl.Where(d => d.DiscountBeginDate <= now && d.DiscountEndDate >= now).Any()
                orderby prd.PurchaseRequisitionDtlCode
                select new PurchaseOrderDtlItem
                {
                    PartNumber        = prd.PartNumber,
                    PartName          = p.PartName,
                    PartSpec          = p.PartSpec,
                    QtyPerUnit        = sl.QtyPerUnit,
                    OriginalUnitPrice = sl.UnitPrice,
                    Qty          = sl.MOQ.HasValue && prd.Qty < sl.MOQ.Value ? sl.MOQ.Value : prd.Qty,
                    Discount     = 0M,
                    DateRequired = prd.DateRequired,
                    SourceListID = sl.SourceListID,
                    PurchaseRequisitionDtlCode = prd.PurchaseRequisitionDtlCode
                };
                pods = podq.ToList();
            }
            //設定折扣
            foreach (PurchaseOrderDtlItem item in pods)
            {
                using (PMSAEntities db = new PMSAEntities())
                {
                    IEnumerable <SourceListDtl> sldq = db.SourceListDtl.Where(s =>
                                                                              s.SourceListID == item.SourceListID &&
                                                                              s.DiscountBeginDate <= now &&
                                                                              s.DiscountEndDate >= now).OrderBy(o => o.QtyDemanded);
                    foreach (SourceListDtl sld in sldq)
                    {
                        if (item.Qty >= sld.QtyDemanded)
                        {
                            item.Discount = sld.Discount;
                        }
                    }
                    item.TotalPartQty      = item.QtyPerUnit * item.Qty;
                    item.PurchaseUnitPrice = (int)Math.Ceiling(item.OriginalUnitPrice * (1 - item.Discount));
                    item.Total             = item.PurchaseUnitPrice * item.Qty;
                    item.DateRequired      = item.DateRequired.AddDays(-7);
                }
            }

            //寫入暫存資料表
            using (PMSAEntities db = new PMSAEntities())
            {
                //TODO: 多人新增相同請購單來源會有刪除同一筆資料的問題,請購單需要設定[新增中]的狀態
                //移除現有資料
                var rortq = db.PRPORelationTemp.Where(p => p.PurchaseRequisitionID == purchaseRequisitionID);
                int?poOid = rortq.FirstOrDefault()?.PurchaseOrderOID;
                if (poOid.HasValue)
                {
                    db.PRPORelationTemp.RemoveRange(rortq);
                    var podtq = db.PurchaseOrderDtlTemp.Where(p => p.PurchaseOrderOID == poOid);
                    db.PurchaseOrderDtlTemp.RemoveRange(podtq);
                    var potq = db.PurchaseOrderTemp.Find(poOid);
                    db.PurchaseOrderTemp.Remove(potq);
                    db.SaveChanges();
                }
                //新增暫存資料
                PurchaseOrderTemp pot = new PurchaseOrderTemp
                {
                    SupplierCode = supplierCode,
                    EmployeeID   = emp.EmployeeID,
                    CreateDate   = DateTime.Now
                };
                db.PurchaseOrderTemp.Add(pot);
                db.SaveChanges();

                //更新暫存OID
                foreach (var item in pods)
                {
                    item.PurchaseOrderOID = pot.PurchaseOrderOID;
                }

                foreach (var item in pods)
                {
                    PurchaseOrderDtlTemp podt = new PurchaseOrderDtlTemp
                    {
                        PurchaseOrderOID  = pot.PurchaseOrderOID,
                        PartNumber        = item.PartNumber,
                        PartName          = item.PartName,
                        PartSpec          = item.PartSpec,
                        QtyPerUnit        = item.QtyPerUnit,
                        TotalPartQty      = item.TotalPartQty,
                        OriginalUnitPrice = item.OriginalUnitPrice,
                        Discount          = item.Discount,
                        PurchaseUnitPrice = item.PurchaseUnitPrice,
                        Qty               = item.Qty,
                        PurchasedQty      = 0,
                        GoodsInTransitQty = 0,
                        Total             = item.Total,
                        SourceListID      = item.SourceListID
                    };
                    db.PurchaseOrderDtlTemp.Add(podt);
                    db.SaveChanges();

                    item.PurchaseOrderDtlOID = podt.PurchaseOrderDtlOID;

                    PRPORelationTemp rort = new PRPORelationTemp
                    {
                        PurchaseRequisitionID      = purchaseRequisitionID,
                        PurchaseRequisitionDtlCode = item.PurchaseRequisitionDtlCode,
                        PurchaseOrderOID           = pot.PurchaseOrderOID,
                        PurchaseOrderDtlOID        = podt.PurchaseOrderDtlOID
                    };
                    db.PRPORelationTemp.Add(rort);
                    db.SaveChanges();
                }
            }

            return(pods);
        }
Beispiel #17
0
        public ActionResult Create()
        {
            string id      = date();
            string message = "新增成功!!";
            bool   status1 = true;

            if (id == "false")
            {
                message = "目前沒有新的進貨單可以入庫了!!";
                status1 = false;
                return(Json(new
                {
                    status = status1,
                    message = message
                }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                StockIn stockIn = new StockIn();
                //string message = "新增成功!!";
                //bool status = true;
                stockIn.PurchaseOrderReceiveID = id;
                string stockinid = "";
                if (stockIn.PurchaseOrderReceiveID != null)
                {
                    int    z = 1;
                    string y = $"IN-{now:yyyyMMdd}-00{z.ToString()}";  //前面的值

                    for (int i = 0; i < db.StockIn.Count(); i++)
                    {
                        StockIn test = new StockIn();
                        if (z < 9)
                        {
                            if (test != null)
                            {
                                z   += 1;
                                y    = $"IN-{now:yyyyMMdd}-00{z.ToString()}";
                                test = db.StockIn.Find(y);
                            }
                        }
                        else if (z < 99)
                        {
                            if (test != null)
                            {
                                z   += 1;
                                y    = $"IN-{now:yyyyMMdd}-0{z.ToString()}";
                                test = db.StockIn.Find(y);
                            }
                        }
                        else
                        {
                            if (test != null)
                            {
                                z   += 1;
                                y    = $"IN-{now:yyyyMMdd}-{z.ToString()}";
                                test = db.StockIn.Find(y);
                            }
                        }
                    }
                    stockIn.StockInID = y;  //入庫單號
                    stockinid         = stockIn.StockInID;
                    //進貨單號會直接抓回傳過來的值
                    //備註預設空值
                    //加庫存日期可先為空值,加入時再修改日期
                    var use = User.Identity.GetEmployee();
                    stockIn.CreateEmployeeID = use.EmployeeID; //建檔人員直接抓登入者就好
                                                               //建檔日期
                    stockIn.CreateDate = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                    //簽核狀態跟簽核流程總表識別碼都是直接抓進貨總表
                    var status = db.PurchaseOrderReceive.Where(w => w.PurchaseOrderReceiveID == stockIn.PurchaseOrderReceiveID).Select(s => s.SignStatus);
                    var atus   = status.ToList();
                    stockIn.SignStatus = atus[0];

                    if (ModelState.IsValid)
                    {
                        db.StockIn.Add(stockIn);
                        db.SaveChanges();
                    }
                    //------------------------------------------------------------------------------------------
                    //入庫明細
                    //------------------------------------------------------------------------------------------
                    //在此呼叫stockInDtl的新增方法
                    StockInDtlsController stockInDtls = new StockInDtlsController();
                    stockInDtls.Create(stockinid);
                }
                var    oid    = db.StockIn.Max(m => m.StockInOID);
                var    inid   = db.StockIn.Where(w => w.StockInOID == oid).Select(s => s.StockInID).ToList();
                string inid1  = inid[0];
                var    orid   = db.StockIn.Where(w => w.StockInOID == oid).Select(s => s.PurchaseOrderReceiveID).ToList();
                string orid1  = orid[0];
                var    sstus  = db.StockIn.Where(w => w.StockInOID == oid).Select(s => s.SignStatus).ToList();
                string sstus1 = stut(sstus[0]);

                var    crdate  = db.StockIn.Where(w => w.StockInOID == oid).Select(s => s.CreateDate).ToList();
                string crdate1 = crdate[0].ToShortDateString();
                return(Json(new
                {
                    status = status1,
                    message = message,
                    id = db.StockIn.Max(x => x.StockInOID),
                    inid1, orid1, sstus1, crdate1
                }, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #18
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 }));
        }
        //此方法為答交按鈕的方法,此功能為辰哥負責
        public async Task <JsonResult> OrderApply(string orderID)
        {
            //取得供應商帳號資料
            SupplierAccount supplier        = User.Identity.GetSupplierAccount();
            string          supplierAccount = supplier.SupplierAccountID;
            string          supplierCode    = supplier.SupplierCode;

            //供應商答交程式碼
            if (string.IsNullOrWhiteSpace(orderID))
            {
                return(Json("fail", JsonRequestBehavior.AllowGet));
            }
            PurchaseOrder orderUpdate = db.PurchaseOrder.Find(orderID);

            if (orderUpdate == null)
            {
                return(Json("fail", JsonRequestBehavior.AllowGet));
            }
            orderUpdate.PurchaseOrderStatus = "E";
            ShipNoticesUtilities utilities = new ShipNoticesUtilities();

            if (!utilities.AddAPOChanged(orderUpdate, supplierAccount, supplierCode))
            {
                return(Json("fail", JsonRequestBehavior.AllowGet));
            }
            db.Entry(orderUpdate).State = EntityState.Modified;
            db.SaveChanges();
            await SendMailToBuyer(orderUpdate, "已答交", null);

            return(Json("success", JsonRequestBehavior.AllowGet));

//            var q = from poc in db.POChanged
//                        //join po in db.PurchaseOrder on poc.PurchaseOrderID equals po.PurchaseOrderID
//                        //into s
//                        //from po in s.DefaultIfEmpty()
//                    where poc.RequesterRole == "P" && poc.PurchaseOrderID == orderID
//                    select new
//                    {
//                        poc.PurchaseOrderID,
//                        poc.RequesterRole,
//                    };
//            var t = q.ToList();
//            if (q.Count() == 0 || q.Count() == null)
//            {
//                return Json("fail", JsonRequestBehavior.AllowGet);
//            }
////<<<<<<< HEAD
//            PurchaseOrder order = (from po in db.PurchaseOrder.AsEnumerable()
//                                   where po.PurchaseOrderID == orderID
//                                   select po).SingleOrDefault();
//            if (utilities.AddAPOChanged(order, supplierAccount, supplierCode) == false)
//            {
//                return Json("fail", JsonRequestBehavior.AllowGet);
//            }
//            //=======
//            else
//            {
//                PurchaseOrder order = (from po in db.PurchaseOrder.AsEnumerable()
//                                       where po.PurchaseOrderID == orderID
//                                       select po).SingleOrDefault();
//                if (utilities.AddAPOChanged(order, supplierAccount, supplierCode) == false)
//                {
//                    return Json("fail", JsonRequestBehavior.AllowGet);
//                }
//                //採購單狀態W為雙方答交,供應商未出貨訂單判定應為判斷是否為W
//                order.PurchaseOrderStatus = "E";
//                db.Entry(order).State = System.Data.Entity.EntityState.Modified;

//                db.SaveChanges();
//                await SendMailToBuyer(order, "已答交", null);
//                return Json("success", JsonRequestBehavior.AllowGet);
//                //>>>>>>> 802426d1abd7d38d1f6e79d3378d39e1746e0b09
//            }
//            //採購單狀態W為雙方答交,供應商未出貨訂單判定應為判斷是否為W
//            order.PurchaseOrderStatus = "W";
//            db.Entry(order).State = System.Data.Entity.EntityState.Modified;

//            db.SaveChanges();
//            await SendMailToBuyer(order, "已答交",null);
//            return Json("success", JsonRequestBehavior.AllowGet);
        }
        public ActionResult Create([Bind(Include = "InventoryDtlOID,InventoryCode,WarehouseCode,InventoryCategoryCode,SourceListID,PartNumber,UnitsInStock,UnitsOnStockOutOrder,UnitsOnStockInOrder,SafetyQty,CreateDate,CreateEmployeeID,LastModifiedDate,LastModifiedEmployeeID")] InventoryDtl inventoryDtl)
        {
            if (inventoryDtl.SourceListID != null)
            {
                int    z = 1;
                string y = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S0000" + z.ToString();

                for (int i = 0; i < db.InventoryDtl.Count(); i++)
                {
                    InventoryDtl test = new InventoryDtl();
                    if (z < 9)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S0000" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else if (z < 99)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S000" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else if (z < 999)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S00" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else if (z < 9999)
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S0" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                    else
                    {
                        if (test != null)
                        {
                            z   += 1;
                            y    = inventoryDtl.WarehouseCode + "-" + inventoryDtl.InventoryCategoryCode + "-" + inventoryDtl.SourceListID + "-S" + z.ToString();
                            test = db.InventoryDtl.Find(y);
                        }
                    }
                }

                inventoryDtl.InventoryCode = y;

                var q = from p in db.SourceList
                        where p.SourceListID == inventoryDtl.SourceListID
                        select p.PartNumber;

                var p1 = q.ToList();

                var qe = from p in db.SourceList
                         select p.SourceListID;
                var q1 = from p in db.InventoryDtl
                         select p.SourceListID;
                var q2 = qe.Except(q1);

                if (inventoryDtl.SafetyQty == null)
                {
                    inventoryDtl.SafetyQty = 0;
                }

                if (ModelState.IsValid)
                {
                    inventoryDtl.PartNumber             = p1[0].ToString();
                    inventoryDtl.CreateEmployeeID       = "CE00001";
                    inventoryDtl.LastModifiedEmployeeID = "CE00001";
                    inventoryDtl.UnitsOnStockInOrder    = 0;
                    inventoryDtl.UnitsOnStockOutOrder   = 0;
                    inventoryDtl.CreateDate             = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                    inventoryDtl.LastModifiedDate       = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                    db.InventoryDtl.Add(inventoryDtl);
                    db.SaveChanges();
                    return(RedirectToAction("Index"));
                }

                ViewBag.CreateEmployeeID       = new SelectList(db.Employee, "EmployeeID", "Name", inventoryDtl.CreateEmployeeID);
                ViewBag.LastModifiedEmployeeID = new SelectList(db.Employee, "EmployeeID", "Name", inventoryDtl.LastModifiedEmployeeID);
                ViewBag.InventoryCategoryCode  = new SelectList(db.InventoryCategory, "InventoryCategoryCode", "InventoryCategoryName", inventoryDtl.InventoryCategoryCode);
                ViewBag.PartNumber             = new SelectList(db.Part, "PartNumber", "PartName", inventoryDtl.PartNumber);
                ViewBag.SourceListID           = new SelectList(q2);
                ViewBag.WarehouseCode          = new SelectList(db.WarehouseInfo, "WarehouseCode", "WarehouseName", inventoryDtl.WarehouseCode);
                return(View(inventoryDtl));
            }
            else
            {
                return(Content("<script>alert('目前已沒有新的貨源清單編號可新增庫存!!!!');</script>"));
            }
        }