// GET: PurchaseRequisitionDtls/Create
        public ActionResult CreateDtl()
        {
            ViewBag.PartNumber            = new SelectList(db.Part, "PartNumber", "PartName");
            ViewBag.PurchaseRequisitionID = new SelectList(db.PurchaseRequisition, "PurchaseRequisitionID", "PurchaseRequisitionID");
            ViewBag.SuggestSupplierCode   = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName");
            PurchaseRequisitionDtl p = new PurchaseRequisitionDtl();

            p.DateRequired = DateTime.Now;
            return(View(p));
        }
        public ActionResult CreateDtl2([Bind(Include = "PurchaseRequisitionDtlOID,PurchaseRequisitionDtlCode,PurchaseRequisitionID,PartNumber,Qty,SuggestSupplierCode,DateRequired")] PurchaseRequisitionDtl purchaseRequisitionDtl)
        {
            int    z = 1;
            string y = "", x = purchaseRequisitionDtl.PurchaseRequisitionID;

            y = x + "-00" + z.ToString();
            purchaseRequisitionDtl.PurchaseRequisitionDtlCode = y;
            for (int i = 0; i < db.PurchaseRequisitionDtl.Count(); i++)
            {
                PurchaseRequisitionDtl test = db.PurchaseRequisitionDtl.Find(y);
                if (z < 9)
                {
                    if (test != null)
                    {
                        z   += 1;
                        y    = x + "-00" + z.ToString();
                        test = db.PurchaseRequisitionDtl.Find(y);
                    }
                }
                else if (z < 99)
                {
                    if (test != null)
                    {
                        z   += 1;
                        y    = x + "-0" + z.ToString();
                        test = db.PurchaseRequisitionDtl.Find(y);
                    }
                }
                else
                {
                    if (test != null)
                    {
                        z   += 1;
                        y    = x + "-" + z.ToString();
                        test = db.PurchaseRequisitionDtl.Find(y);
                    }
                }
            }
            purchaseRequisitionDtl.PurchaseRequisitionDtlCode = y;
            //請購單明細代碼 PR-20191016-001-001
            if (ModelState.IsValid)
            {
                db.PurchaseRequisitionDtl.Add(purchaseRequisitionDtl);
                db.SaveChanges();
                return(RedirectToAction("IndexDtl"));
            }

            ViewBag.PartNumber            = new SelectList(db.Part, "PartNumber", "PartName", purchaseRequisitionDtl.PartNumber);
            ViewBag.PurchaseRequisitionID = new SelectList(db.PurchaseRequisition, "PurchaseRequisitionID", "ProductNumber", purchaseRequisitionDtl.PurchaseRequisitionID);
            ViewBag.SuggestSupplierCode   = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName", purchaseRequisitionDtl.SuggestSupplierCode);
            return(View(purchaseRequisitionDtl));
        }
 public ActionResult EditDtl([Bind(Include = "PurchaseRequisitionDtlOID,PurchaseRequisitionDtlCode,PurchaseRequisitionID,PartNumber,Qty,SuggestSupplierCode,DateRequired")] PurchaseRequisitionDtl purchaseRequisitionDtl)
 {
     if (ModelState.IsValid)
     {
         db.Entry(purchaseRequisitionDtl).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("IndexDtl"));
     }
     ViewBag.PartNumber            = new SelectList(db.Part, "PartNumber", "PartName", purchaseRequisitionDtl.PartNumber);
     ViewBag.PurchaseRequisitionID = new SelectList(db.PurchaseRequisition, "PurchaseRequisitionID", "ProductNumber", purchaseRequisitionDtl.PurchaseRequisitionID);
     ViewBag.SuggestSupplierCode   = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName", purchaseRequisitionDtl.SuggestSupplierCode);
     return(View(purchaseRequisitionDtl));
 }
        // GET: PurchaseRequisitionDtls/Details/5
        public ActionResult DetailsDtl(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PurchaseRequisitionDtl purchaseRequisitionDtl = db.PurchaseRequisitionDtl.Find(id);

            if (purchaseRequisitionDtl == null)
            {
                return(HttpNotFound());
            }
            return(View(purchaseRequisitionDtl));
        }
        // GET: PurchaseRequisitionDtls/Edit/5
        public ActionResult EditDtl(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PurchaseRequisitionDtl purchaseRequisitionDtl = db.PurchaseRequisitionDtl.Find(id);

            if (purchaseRequisitionDtl == null)
            {
                return(HttpNotFound());
            }
            ViewBag.PartNumber            = new SelectList(db.Part, "PartNumber", "PartName", purchaseRequisitionDtl.PartNumber);
            ViewBag.PurchaseRequisitionID = new SelectList(db.PurchaseRequisition, "PurchaseRequisitionID", "ProductNumber", purchaseRequisitionDtl.PurchaseRequisitionID);
            ViewBag.SuggestSupplierCode   = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName", purchaseRequisitionDtl.SuggestSupplierCode);
            return(View(purchaseRequisitionDtl));
        }
        // GET: PurchaseRequisitionDtls/Create
        public ActionResult CreateDtl2(string id)
        {
            ViewBag.PartNumber            = new SelectList(db.Part, "PartNumber", "PartName");
            ViewBag.PurchaseRequisitionID = new SelectList(db.PurchaseRequisition, "PurchaseRequisitionID", "ProductNumber");
            ///
            ViewBag.SuggestSupplierCode = new SelectList(db.SupplierInfo, "SupplierCode", "SupplierName");
            //var q = from x in db.SupplierInfo select x.SupplierCode;
            //var q1 = from y in db.PurchaseRequisitionDtl select y.SuggestSupplierCode;
            //var q2 = q.Union(q1);
            //ViewBag.SuggestSupplierCode = new SelectList(q2);
            ///
            ViewBag.PurchaseRequisitionIDD = id;
            PurchaseRequisitionDtl p = new PurchaseRequisitionDtl();

            p.PurchaseRequisitionID = id;
            p.DateRequired          = DateTime.Now;
            return(View(p));
        }
 public ActionResult DeleteDtl(string id)
 {
     try
     {
         if (id == null)
         {
             return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
         }
         PurchaseRequisitionDtl purchaseRequisitionDtl = db.PurchaseRequisitionDtl.Find(id);
         if (purchaseRequisitionDtl == null)
         {
             return(HttpNotFound());
         }
         db.PurchaseRequisitionDtl.Remove(purchaseRequisitionDtl);
         db.SaveChanges();
         return(RedirectToAction("IndexDtl"));
     }
     catch
     {
         return(Content("<script> alert('刪除失敗');window.location.href='../Index'</script>"));
     }
 }
        /// <summary>
        /// 取得單一採購明細 - 新版使用方法
        /// </summary>
        /// <param name="purchaseRequisitionID"></param>
        /// <returns></returns>
        public PurchaseOrderDtlItem GetPODtlItemViewModel(string purchaseRequisitionDtlCode)
        {
            //採購明細已加入
            PurchaseOrderDtlItem pod = session.PODItems.Where(item => item.PurchaseOrderDtlCode == purchaseRequisitionDtlCode).FirstOrDefault();

            if (pod != null)
            {
                return(pod);
            }

            PurchaseOrderDtlItem podedit = null;
            //採購明細未加入
            DateTime now = DateTime.Now;

            //排除時間
            now = new DateTime(now.Year, now.Month, now.Day);
            //取得顯示資料
            PurchaseRequisitionDtl prd = db.PurchaseRequisitionDtl.Find(purchaseRequisitionDtlCode);

            if (prd.SuggestSupplierCode != null)
            {
                //有建議供應商,預先給定值
                SourceList sl = db.SourceList.Find($"{prd.PartNumber}-{prd.SuggestSupplierCode}");
                Part       p  = prd.Part;

                //設定基本資料

                //請購料件總數
                int totalPartQty = p.QtyPerUnit * prd.Qty;
                //請購批量數量(預設不得超買)
                int qty = totalPartQty / sl.QtyPerUnit;
                //採購料件總數
                int totalSourceListQty = qty * sl.QtyPerUnit;

                podedit = new PurchaseOrderDtlItem
                {
                    PartNumber        = prd.PartNumber,
                    PartName          = p.PartName,
                    PartSpec          = p.PartSpec,
                    QtyPerUnit        = sl.QtyPerUnit,
                    OriginalUnitPrice = sl.UnitPrice,
                    //暫不實作最小訂貨量MOQ
                    //Qty = sl.MOQ.HasValue && prd.Qty < sl.MOQ.Value ? sl.MOQ.Value : prd.Qty,
                    Qty                        = qty,
                    TotalPartQty               = totalPartQty,
                    TotalSourceListQty         = totalSourceListQty,
                    Discount                   = 0M,
                    DateRequired               = prd.DateRequired.AddDays(-7),
                    SourceListID               = sl.SourceListID,
                    PurchaseRequisitionDtlCode = prd.PurchaseRequisitionDtlCode
                };

                //計算折扣,需從已加入的相同貨源請購明細計算總數來得到折扣
                int totalQty = session.PODItems.Where(item => item.SourceListID == sl.SourceListID).Sum(item => item.Qty) + qty;
                List <SourceListDtl> slds = db.SourceListDtl.Where(s =>
                                                                   s.SourceListID == sl.SourceListID &&
                                                                   s.DiscountBeginDate <= now &&
                                                                   s.DiscountEndDate >= now).OrderBy(o => o.QtyDemanded).ToList();
                decimal discount = 0M;
                foreach (SourceListDtl sld in slds)
                {
                    if (totalQty >= sld.QtyDemanded)
                    {
                        discount = sld.Discount;
                    }
                }

                //設定折扣

                //新增的
                podedit.Discount          = discount;
                podedit.PurchaseUnitPrice = (int)Math.Ceiling(podedit.OriginalUnitPrice * (1 - discount));
                podedit.Total             = podedit.PurchaseUnitPrice * podedit.Qty;

                session.PODItemEditting = podedit;

                //已存在的
                foreach (var item in session.PODItems.Where(item => item.SourceListID == sl.SourceListID))
                {
                    item.Discount          = discount;
                    item.PurchaseUnitPrice = (int)Math.Ceiling(item.OriginalUnitPrice * (1 - discount));
                    item.Total             = item.PurchaseUnitPrice * item.Qty;
                }
            }
            else
            {
                //沒有建議供應商
                session.PODItemEditting = new PurchaseOrderDtlItem
                {
                    Qty = 0,
                    TotalSourceListQty = 0,
                    Discount           = 0,
                    Total = 0,
                    PurchaseRequisitionDtlCode = purchaseRequisitionDtlCode,
                    DateRequired = prd.DateRequired.AddDays(-7),
                };
            }

            return(session.PODItemEditting);
        }