public ActionResult Edit([Bind(Include = "SourceListOID,SourceListID,PartNumber,QtyPerUnit,MOQ,UnitPrice,SupplierCode,UnitsInStock,UnitsOnOrder,SafetyQty,EXP")] SourceList sourceList)
 {
     if (ModelState.IsValid)
     {
         db.Entry(sourceList).State = EntityState.Modified;
         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));
 }
 public ActionResult Edit([Bind(Include = "PurchaseRequisitionOID,PurchaseRequisitionID,ProductNumber,EmployeeID,PRBeginDate,ProcessStatus,SignStatus,SignFlowOID")] PurchaseRequisition purchaseRequisition)
 {
     if (ModelState.IsValid)
     {
         db.Entry(purchaseRequisition).State = EntityState.Modified;
         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));
 }
        public async Task <ActionResult> Index(Sup_parent m)
        {
            try
            {
                var userId               = User.Identity.Name;
                var userData             = UserManager.Users.Where(x => x.UserName == userId).SingleOrDefault();
                var supData              = db.SupplierAccount.Where(x => x.SupplierAccountID == userId).SingleOrDefault();
                var supInfoData          = db.SupplierInfo.Where(x => x.SupplierCode == supData.SupplierCode).SingleOrDefault();
                SupInfoViewModel    info = new SupInfoViewModel();
                SupSettingViewModel sup  = new SupSettingViewModel();

                //姓名
                userData.RealName   = m.SupSettingViewModel.ContactName;
                supData.ContactName = m.SupSettingViewModel.ContactName;
                //信箱
                string holder = userData.Email;
                userData.Email = m.SupSettingViewModel.Email;
                supData.Email  = m.SupSettingViewModel.Email;
                //如果信箱有改,驗證要重置為false
                if (holder != m.SupSettingViewModel.Email)
                {
                    userData.EmailConfirmed = false;
                }
                //手機
                userData.PhoneNumber = m.SupSettingViewModel.Mobile;
                supData.Mobile       = m.SupSettingViewModel.Mobile;
                //市話
                supData.Tel = m.SupSettingViewModel.Tel;
                //雙因素
                //判斷Email是否通過驗證
                userData.TwoFactorEnabled = m.SupSettingViewModel.EnableTwoFactorAuth;

                var r = await UserManager.UpdateAsync(userData);

                db.Entry(supData).State = System.Data.Entity.EntityState.Modified;
                var r2 = await db.SaveChangesAsync();

                if (r.Succeeded && r2 > 0)
                {
                    TempData["SuccessMsg"] = "修改成功!";
                    return(RedirectToAction("Index"));
                }
                TempData["ErrorMsg"] = "修改失敗,請檢查網路連線再試一次。";
                return(RedirectToAction("Index"));
            }
            catch
            {
                TempData["ErrorMsg"] = "修改失敗,不可空值,並請檢查網路連線再試一次...";
                return(RedirectToAction("Index"));
            }
        }
예제 #4
0
        //4.存到資料庫
        //更新此 user table
        //await updateEmpUserTable(user, emp);
        private async Task updateEmpUserTable(ApplicationUser user, Employee emp)
        {
            //4.存到資料庫
            //更新此 user table
            var store = new UserStore <ApplicationUser>(new ApplicationDbContext());
            await UserManager.UpdateAsync(user);

            var ctx = store.Context;
            await ctx.SaveChangesAsync();

            //Emp table
            db.Entry(emp).State = EntityState.Modified;
            await db.SaveChangesAsync();
        }
예제 #5
0
 public ActionResult Edit([Bind(Include = "PartOID,PartNumber,PartName,PartSpec,PartUnitOID,CreatedDate,PictureAdress,PictureDescription")] Part part)
 {
     if (ModelState.IsValid)
     {
         if (Request.Files["File1"].ContentLength != 0)
         {
             FileInfo f = new FileInfo($@"C:\CCLASS\MVC\layoutTest_1018\layoutTest\Imgs\{part.PartNumber}-{part.PartName}.jpg");
             if (f.Exists)
             {
                 f.Delete();
             }
             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";
         db.Entry(part).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.PartUnitOID = new SelectList(db.PartUnit, "PartUnitOID", "PartUnitName", part.PartUnitOID);
     return(View(part));
 }
        public ActionResult Edit([Bind(Include = "InventoryDtlOID,InventoryCode,WarehouseCode,InventoryCategoryCode,SourceListID,PartNumber,UnitsInStock,UnitsOnStockOutOrder,UnitsOnStockInOrder,SafetyQty,CreateDate,CreateEmployeeID,LastModifiedDate,LastModifiedEmployeeID")] InventoryDtl inventoryDtl)
        {
            if (inventoryDtl.SafetyQty == null)
            {
                inventoryDtl.SafetyQty = 0;
            }

            if (ModelState.IsValid)
            {
                inventoryDtl.UnitsOnStockInOrder    = 0;
                inventoryDtl.UnitsOnStockOutOrder   = 0;
                inventoryDtl.LastModifiedEmployeeID = "CE00001";
                inventoryDtl.LastModifiedDate       = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                db.Entry(inventoryDtl).State        = EntityState.Modified;
                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(db.SourceList, "SourceListID", "SourceListID", inventoryDtl.SourceListID);
            ViewBag.WarehouseCode          = new SelectList(db.WarehouseInfo, "WarehouseCode", "WarehouseName", inventoryDtl.WarehouseCode);
            return(View(inventoryDtl));
        }
예제 #7
0
        public ActionResult Edit(StockIn stockIn)
        {
            string message = "修改成功!!";
            bool   status  = true;

            switch (stockIn.SignStatus)
            {
            case "同意":
                stockIn.SignStatus = "Y";
                break;

            case "拒絕":
                stockIn.SignStatus = "N";
                break;

            case "簽核中":
                stockIn.SignStatus = "S";
                break;
            }

            if (ModelState.IsValid)
            {
                db.Entry(stockIn).State = EntityState.Modified;
                db.SaveChanges();
                return(Json(new { status = status, message = message, id = db.StockIn.Max(x => x.StockInOID) }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                message = "修改失敗!!";
                status  = false;
                return(Json(new { status = status, message = message }, JsonRequestBehavior.AllowGet));
            }
        }
예제 #8
0
        //4.存到資料庫
        //更新此 user table
        private async Task updateTable(ApplicationUser user, SupplierAccount sa)
        {
            //更新此 user table
            await UserManager.UpdateAsync(user);

            //sa table
            db.Entry(sa).State = EntityState.Modified;
            int u2 = await db.SaveChangesAsync();
        }
예제 #9
0
 public ActionResult Edit([Bind(Include = "ProductOID,ProductNumber,ProductName,PictureAdress,PictureDescription")] Product product)
 {
     if (ModelState.IsValid)
     {
         db.Entry(product).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(product));
 }
예제 #10
0
 public ActionResult Edit([Bind(Include = "WarehouseInfoOID,WarehouseCode,WarehouseName,Address,EmployeeID,Tel,Remark")] WarehouseInfo warehouseInfo)
 {
     if (ModelState.IsValid)
     {
         db.Entry(warehouseInfo).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.EmployeeID = new SelectList(db.Employee, "EmployeeID", "Name", warehouseInfo.EmployeeID);
     return(View(warehouseInfo));
 }
예제 #11
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));
        }
예제 #12
0
        public ActionResult Edit(StockInDtl stockInDtl)
        {
            string message = "修改成功!!";
            bool   status  = true;

            var data = db.Part.Where(w => w.PartName == stockInDtl.PartNumber).Select(s => s.PartNumber).ToList();

            stockInDtl.PartNumber = data[0];

            if (ModelState.IsValid)
            {
                db.Entry(stockInDtl).State = EntityState.Modified;
                db.SaveChanges();
                return(Json(new { status = status, message = message, id = db.StockInDtl.Max(x => x.StockInDtlOID) }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                message = "修改失敗!!";
                status  = false;
                return(Json(new { status = status, message = message }, JsonRequestBehavior.AllowGet));
            }
        }
 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));
 }
예제 #14
0
        public ActionResult Edit(WarehouseInfo warehouseInfo)
        {
            string message = "修改成功!!";
            bool   status  = true;

            if (ModelState.IsValid)
            {
                db.Entry(warehouseInfo).State = EntityState.Modified;
                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));
            }
        }
        //[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([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"));
        }
예제 #17
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 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);
        }
예제 #19
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 }));
        }
예제 #20
0
        //[ValidateAntiForgeryToken]
        public ActionResult Edit(InventoryDtl inventoryDtl)
        {
            string message = "修改成功!!";
            bool   status  = true;

            var q = from p in db.InventoryDtl
                    where p.WarehouseCode == inventoryDtl.WarehouseCode
                    select p.WarehouseCode;
            var p0 = q.ToList();
            var q1 = db.InventoryDtl.Where(w => w.InventoryCategoryCode == inventoryDtl.InventoryCategoryCode).Select(s => s.InventoryCategoryCode);
            var p1 = q1.ToList();
            var q2 = db.InventoryDtl.Where(w => w.Part.PartName == inventoryDtl.PartNumber).Select(s => s.PartNumber);
            var p2 = q2.ToList();

            int qty = 0;
            var num = from p in db.InventoryDtl
                      where p.InventoryCode == inventoryDtl.InventoryCode
                      select p.UnitsInStock;
            var num1 = num.ToList();

            if (Convert.ToInt32(num1[0].ToString()) != inventoryDtl.UnitsInStock)
            {
                int ui = inventoryDtl.UnitsInStock;
                var qt = from p in db.SourceList
                         where p.SourceListID == inventoryDtl.SourceListID
                         select p.QtyPerUnit;
                var pp = qt.ToList();
                qty = ui * pp[0];
            }
            else
            {
                qty = inventoryDtl.UnitsInStock;
            }
            var use  = User.Identity.GetEmployee();
            var unit = db.InventoryDtl.Where(w => w.InventoryCode == inventoryDtl.InventoryCode).Select(s => s.UnitsInStock);
            var uin  = unit.ToList();
            var uii  = uin[0].ToString();

            if (ModelState.IsValid)
            {
                inventoryDtl.UnitsInStock           = qty;
                inventoryDtl.InventoryCategoryCode  = p1[0].ToString();
                inventoryDtl.WarehouseCode          = p0[0].ToString();
                inventoryDtl.PartNumber             = p2[0].ToString();
                inventoryDtl.UnitsOnStockInOrder    = 0;
                inventoryDtl.UnitsOnStockOutOrder   = 0;
                inventoryDtl.LastModifiedEmployeeID = use.EmployeeID;
                inventoryDtl.CreateDate             = Convert.ToDateTime(inventoryDtl.CreateDate.ToShortDateString());
                inventoryDtl.LastModifiedDate       = Convert.ToDateTime(DateTime.Now.ToShortDateString());

                db.Entry(inventoryDtl).State = EntityState.Modified;
                db.SaveChanges();
                return(Json(new { status = status, message = message, id = db.InventoryDtl.Max(x => x.InventoryDtlOID), qty }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                message = "修改失敗!!";
                status  = false;
                return(Json(new { status = status, message = message }, JsonRequestBehavior.AllowGet));
            }
        }