Esempio n. 1
0
        /// <summary>
        /// บันทึกรับเข้า และ เพิ่ม Stock Card Wms
        /// </summary>
        private void SaveCommit()
        {
            SSLsEntities db = new SSLsEntities();

            try
            {
                int    currentYear  = DateTime.Now.Year;
                int    currentMonth = DateTime.Now.Month;
                var    running      = db.PORcv.Where(w => w.CreateDate.Year == currentYear && w.CreateDate.Month == currentMonth).Count() + 1;
                string code         = SingletonThisBudgetYear.Instance().ThisYear.CodeYear + DateTime.Now.ToString("MM") + Library.GenerateCodeFormCount(running, 4);

                PORcv rcv = new PORcv();
                rcv.FKPOHeader   = _po.Id;
                rcv.Code         = MyConstant.PrefixForGenerateCode.RCVPOS + code;
                rcv.PORefer      = "" + rcv.Code;
                rcv.Description  = textBoxRemark.Text;
                rcv.Enable       = true;
                rcv.CreateDate   = DateTime.Now;
                rcv.CreateBy     = SingletonAuthen.Instance().Id;
                rcv.UpdateDate   = DateTime.Now;
                rcv.UpdateBy     = SingletonAuthen.Instance().Id;
                rcv.DiscountKey  = textBoxDiscountKey.Text;
                rcv.DiscountBath = decimal.Parse(textBoxDiscountBath.Text);
                rcv.TotalBUnVat  = decimal.Parse(textBoxTotalUnVat.Text);
                rcv.TotalBHasVat = decimal.Parse(textBoxTotalHasVat.Text);
                rcv.TotalVat     = decimal.Parse(textBoxTotalVat.Text);
                rcv.TotalGift    = _totalGift;
                rcv.DriverName   = textBoxDriverName.Text;
                rcv.InvoiceNo    = textBoxInvoice.Text;
                rcv.InvoiceDate  = (DateTime)Library.ConvertTHToENDate(textBoxInvoiceDate.Text);
                if (_idTransport == 0)
                {
                    _idTransport        = MyConstant.Transport.NotChoose;
                    rcv.TransportRemark = "ไม่เลือกบริษัทขนส่ง";
                }
                rcv.FKTransport = _idTransport;
                // details
                //List<PORcvDetails> details = new List<PORcvDetails>();
                PORcvDetails detail;
                decimal      rcvAndGift = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    detail            = new PORcvDetails();
                    detail.Enable     = true;
                    detail.CreateDate = DateTime.Now;
                    detail.CreateBy   = SingletonAuthen.Instance().Id;
                    detail.UpdateDate = DateTime.Now;
                    detail.UpdateBy   = SingletonAuthen.Instance().Id;
                    string proCode = dataGridView1.Rows[i].Cells[colCode].Value.ToString();
                    var    product = Singleton.SingletonProduct.Instance().ProductDetails.FirstOrDefault(w => w.Code == proCode);
                    detail.FKProductDtl   = product.Id;
                    detail.SequenceNumber = int.Parse(dataGridView1.Rows[i].Cells[colNumber].Value.ToString());
                    // รับเข้าในครั้งนี้
                    detail.RcvQuantity = decimal.Parse(dataGridView1.Rows[i].Cells[colQtyRcv].Value.ToString());

                    if (_po.Vendor.FKPOCostType == MyConstant.POCostType.CostOnly) // ตรวจสอบการ ยึดราคาทุน
                    {
                        detail.CurrentCost = product.CostOnly;
                    }
                    else if (_po.Vendor.FKPOCostType == MyConstant.POCostType.CostAndVat)
                    {
                        detail.CurrentCost = product.CostAndVat;
                    }
                    else
                    {
                        detail.CurrentCost = product.CostAndVat;
                    }
                    detail.QtyOnPO      = decimal.Parse(dataGridView1.Rows[i].Cells[colQty].Value.ToString());
                    detail.NewCost      = decimal.Parse(dataGridView1.Rows[i].Cells[colCostPerUnit].Value.ToString());
                    detail.DiscountKey  = dataGridView1.Rows[i].Cells[colDiscountKey].Value.ToString();
                    detail.DiscountBath = decimal.Parse(dataGridView1.Rows[i].Cells[colDiscountBath].Value.ToString());
                    detail.TotalPrice   = decimal.Parse(dataGridView1.Rows[i].Cells[colTotal].Value.ToString());
                    detail.GiftOnPo     = decimal.Parse(dataGridView1.Rows[i].Cells[colGiftOnPo].Value.ToString());
                    detail.GiftQty      = decimal.Parse(dataGridView1.Rows[i].Cells[colGift].Value.ToString());
                    rcv.PORcvDetails.Add(detail);

                    decimal rcvComplet = decimal.Parse(dataGridView1.Rows[i].Cells[colQtyRcvComplete].Value.ToString());
                    // ยอดรับเข้าครั้งนี้ = ยอดรับเข้า+ของแถม
                    rcvAndGift = detail.GiftQty + detail.RcvQuantity;

                    #region Manage WmsStock //////////////////////////////// ใช้ Library ManageStock แทนละ///////////////////////////////////////////////////////
                    /// จัดการ stock card
                    //int productId = product.FKProduct;
                    ///// get wmsStock
                    //var wmsStock = db.WmsStock.FirstOrDefault(w => w.Enable == true && w.FKProduct == productId);
                    //if (wmsStock != null) // ถ้าเคยตั้ง stock แล้ว
                    //{
                    //    ProductDetails productDtl = product;
                    //    /// check wmsStockDetail เอาตัวล่าสุด
                    //    WmsStockDetail wmsDtl = wmsStock.WmsStockDetail.OrderByDescending(w => w.CreateDate).FirstOrDefault(w => w.Enable == true && w.FKProductDetail == productDtl.Id);
                    //    decimal thisResultQty = 0;
                    //    if (wmsDtl != null)
                    //    {
                    //        // ถ้ามีใน wms stock detail แล้ว
                    //        // modify WmsStockDetail
                    //        WmsStockDetail wmsStockDetail = new WmsStockDetail();
                    //        wmsStockDetail.FKItemRemark = MyConstant.ItemRemark.Nornal;
                    //        wmsStockDetail.FKProductDetail = productDtl.Id;
                    //        wmsStockDetail.FKTransaction = MyConstant.WmsTransaction.RCV;
                    //        wmsStockDetail.FKWmsStock = wmsStock.Id;
                    //        wmsStockDetail.CreateDate = DateTime.Now;
                    //        wmsStockDetail.CreateBy = SingletonAuthen.Instance().Id;
                    //        wmsStockDetail.UpdateDate = DateTime.Now;
                    //        wmsStockDetail.UpdateBy = SingletonAuthen.Instance().Id;
                    //        wmsStockDetail.Enable = true;
                    //        wmsStockDetail.Description = "รับเข้าด้วย PO";
                    //        wmsStockDetail.PackSize = productDtl.PackSize;
                    //        wmsStockDetail.ActionQtyUnit = rcvAndGift;
                    //        wmsStockDetail.ActionQty = rcvAndGift * productDtl.PackSize;
                    //        /// Result จะได้ ของยกยอดมา + ของรับเข้าล่าสุด
                    //        wmsStockDetail.ResultQtyUnit = wmsDtl.ResultQtyUnit + rcvAndGift;
                    //        wmsStockDetail.ResultQty = (wmsDtl.ResultQtyUnit + rcvAndGift) * productDtl.PackSize;
                    //        thisResultQty = wmsStockDetail.ResultQty;
                    //        db.WmsStockDetail.Add(wmsStockDetail);
                    //    }
                    //    else // ถ้าไม่มีใน
                    //    {
                    //        // add new WmsStock
                    //        WmsStockDetail wmsStockDetail = new WmsStockDetail();
                    //        wmsStockDetail.FKItemRemark = MyConstant.ItemRemark.Nornal;
                    //        wmsStockDetail.FKProductDetail = productDtl.Id;
                    //        wmsStockDetail.FKTransaction = MyConstant.WmsTransaction.RCV;
                    //        wmsStockDetail.FKWmsStock = wmsStock.Id;
                    //        wmsStockDetail.CreateDate = DateTime.Now;
                    //        wmsStockDetail.CreateBy = SingletonAuthen.Instance().Id;
                    //        wmsStockDetail.UpdateDate = DateTime.Now;
                    //        wmsStockDetail.UpdateBy = SingletonAuthen.Instance().Id;
                    //        wmsStockDetail.Enable = true;
                    //        wmsStockDetail.Description = "รับเข้าด้วย PO";
                    //        wmsStockDetail.PackSize = productDtl.PackSize;
                    //        wmsStockDetail.ActionQtyUnit = rcvAndGift;
                    //        wmsStockDetail.ActionQty = rcvAndGift * productDtl.PackSize;
                    //        /// Result จะได้ ของยกยอดมา + ของรับเข้าล่าสุด
                    //        wmsStockDetail.ResultQtyUnit =  rcvAndGift;
                    //        wmsStockDetail.ResultQty = rcvAndGift * productDtl.PackSize;
                    //        thisResultQty = wmsStockDetail.ResultQty;
                    //        db.WmsStockDetail.Add(wmsStockDetail);
                    //    }

                    //    // Update WmsStock
                    //    wmsStock.OldQty = wmsStock.CurrentQty;
                    //    wmsStock.CurrentQty = thisResultQty;
                    //    wmsStock.UpdateDate = DateTime.Now;
                    //    wmsStock.UpdateBy = SingletonAuthen.Instance().Id;
                    //    db.Entry(wmsStock).State = EntityState.Modified;

                    //}
                    //else // กรณีไม่เคยมีใน Stock
                    //{
                    //    /// ต้อง new stock ใหม่
                    //    // ต้องดัก การ initial Stock ตั้งแต่ new Product
                    //}
                    #endregion
                }
                db.PORcv.Add(rcv);
                List <PORcvDetails> rcvDtl = rcv.PORcvDetails.ToList();
                //Library.MakeValueForUpdateStockWms(rcvDtl);
                // update po status = 3 เคยมีการรับเข้าแล้ว เชคว่าครบแล้วหรือไม่
                var     po              = db.POHeader.SingleOrDefault(w => w.Id == _po.Id);
                decimal checkRcvQty     = 0;
                decimal checkRcvGiftQty = 0;
                foreach (var item in po.PODetail.Where(w => w.Enable == true).ToList())
                {
                    // ดึง
                    var getProductRcv = rcv.PORcvDetails.FirstOrDefault(w => w.FKProductDtl == item.FKProductDetail);
                    item.RcvQty          = item.RcvQty + getProductRcv.RcvQuantity;
                    item.RcvGiftQty      = item.RcvGiftQty + getProductRcv.GiftQty;
                    db.Entry(item).State = EntityState.Modified;

                    checkRcvQty     = checkRcvQty + item.RcvQty;
                    checkRcvGiftQty = checkRcvGiftQty + item.RcvGiftQty;
                }
                if ((checkRcvQty + checkRcvGiftQty) == (po.TotalQty + po.TotalGift))
                {
                    // ถ้ารับเข้าครบ แปลว่า Complete
                    po.FKPOStatus = MyConstant.POStatus.RCVComplete;
                }
                else
                {
                    po.FKPOStatus = MyConstant.POStatus.RCVNotEnd;
                }
                db.Entry(po).State = EntityState.Modified;

                db.SaveChanges();
                // reset form
                ResetRcv();
            }
            catch (Exception)
            {
                MessageBox.Show("ไม่ถูกต้อง พบข้อผิดพลาด กรุณาติดต่อ admin");
            }
            finally
            {
                db.Dispose();
            }
        }
        /// <summary>
        /// 1. check invoice no
        /// 2. check invoice date****
        /// 3. check vendor****
        /// 4. ต้องเลือก อย่างน้อย 1 PO เพื่อ save
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string invoice = textBoxInvoiceNo.Text.Trim();

            if (invoice == "")
            {
                MessageBox.Show("กรุณากรอก ใบกำกับภาษี/ใบส่ง");
                return;
            }
            try
            {
                DateTime?invoiceDate = Library.ConvertTHToENDate(textBoxInvoiceDate.Text);
                if (invoiceDate == null)
                {
                    MessageBox.Show("วันที่ Invoice ไม่ถูกต้อง (Need Date English United Kingdom)");
                    return;
                }
                else
                {
                }
                Console.WriteLine(invoiceDate);
            }
            catch (Exception)
            {
                Console.WriteLine("Error");
                return;
            }
            //if (_VendorId == 0)
            //{
            //    MessageBox.Show("กรุณาเลือก ผู้จำหน่าย");
            //    return;
            //}

            if (listBoxPolist.Items.Count == 0)
            {
                MessageBox.Show("กรุณาเลือก อย่างน้อย 1 PO");
                return;
            }
            string poInList = listBoxPolist.Items[0].ToString();

            DialogResult dr = MessageBox.Show("คุณต้องการบันทึกข้อมูล ใช่หรือไม่ ?",
                                              "คำเตือนจากระบบ", MessageBoxButtons.YesNo);

            switch (dr)
            {
            case DialogResult.Yes:
                string rcvNo = textBoxRcvNo.Text;

                #region กรณีแก้ไข
                if (rcvNo != "")
                {
                    using (SSLsEntities db = new SSLsEntities())
                    {
                        var rcv = db.PORcv.SingleOrDefault(w => w.Enable == true && w.Code == rcvNo);
                        rcv.InvoiceNo   = textBoxInvoiceNo.Text;
                        rcv.InvoiceDate = (DateTime)Library.ConvertTHToENDate(textBoxInvoiceDate.Text);
                        rcv.FKVendor    = _VendorId;
                        string[] listPO = listBoxPolist.Items.OfType <string>().ToArray();
                        rcv.PORefer     = string.Join(",", listPO);
                        rcv.Description = textBoxDesc.Text;

                        rcv.UpdateDate   = DateTime.Now;
                        rcv.UpdateBy     = SingletonAuthen.Instance().Id;
                        rcv.DiscountKey  = textBoxDis.Text;
                        rcv.DiscountBath = decimal.Parse(textBoxDis.Text);
                        rcv.TotalBUnVat  = decimal.Parse(textBoxUnVat.Text);
                        rcv.TotalBHasVat = decimal.Parse(textBoxHasVat.Text);
                        rcv.TotalVat     = decimal.Parse(textBoxVat.Text);
                        // details
                        List <PORcvDetails> details = new List <PORcvDetails>();
                        PORcvDetails        detail;
                        for (int row = 0; row < dataGridView1.Rows.Count; row++)
                        {
                            int     idpo        = int.Parse(dataGridView1.Rows[row].Cells[colIdPo].Value.ToString());
                            int     idProd      = int.Parse(dataGridView1.Rows[row].Cells[colIdProd].Value.ToString());
                            int     number      = int.Parse(dataGridView1.Rows[row].Cells[colNumber].Value.ToString());
                            string  barcode     = dataGridView1.Rows[row].Cells[colCode].Value.ToString();
                            decimal rcvComplete = decimal.Parse(dataGridView1.Rows[row].Cells[colRcvComplete].Value.ToString());
                            string  name        = dataGridView1.Rows[row].Cells[colName].Value.ToString();
                            decimal pz          = decimal.Parse(dataGridView1.Rows[row].Cells[colPz].Value.ToString());
                            string  unit        = dataGridView1.Rows[row].Cells[colUnit].Value.ToString();
                            decimal qty         = decimal.Parse(dataGridView1.Rows[row].Cells[colQty].Value.ToString());
                            decimal gift        = decimal.Parse(dataGridView1.Rows[row].Cells[colGift].Value.ToString());
                            decimal rcvQty      = decimal.Parse(dataGridView1.Rows[row].Cells[colRcvQty].Value.ToString());
                            decimal rcvGift     = decimal.Parse(dataGridView1.Rows[row].Cells[colRcvGift].Value.ToString());
                            decimal price       = decimal.Parse(dataGridView1.Rows[row].Cells[colPrice].Value.ToString());
                            decimal total       = decimal.Parse(dataGridView1.Rows[row].Cells[colTotal].Value.ToString());
                            int     poDtlId     = int.Parse(dataGridView1.Rows[row].Cells[colPODtlId].Value.ToString());
                            // ถ้ามีแล้ว ก็อัพเดท
                            var getDtlRcv = db.PORcvDetails.SingleOrDefault(w => w.Enable == true && w.FKPoDetails == poDtlId);
                            if (getDtlRcv != null)
                            {
                                getDtlRcv.FKProductDtl   = idProd;
                                getDtlRcv.SequenceNumber = number;
                                getDtlRcv.RcvQuantity    = rcvQty;
                                getDtlRcv.GiftQty        = rcvGift;
                                getDtlRcv.NewCost        = price;
                                getDtlRcv.CurrentCost    = price;
                                getDtlRcv.TotalPrice     = total;
                                if ((rcvGift + rcvQty + rcvComplete) == qty + gift)
                                {
                                    getDtlRcv.IsComplete = true;
                                }
                                else
                                {
                                    getDtlRcv.IsComplete = false;
                                }
                                getDtlRcv.RcvComplete     = rcvGift + rcvQty + rcvComplete;
                                db.Entry(getDtlRcv).State = EntityState.Modified;
                            }
                            else     // ถ้าไมีมี
                            {
                                detail                = new PORcvDetails();
                                detail.FKPORcv        = rcv.Id;
                                detail.CreateDate     = DateTime.Now;
                                detail.CreateBy       = Singleton.SingletonAuthen.Instance().Id;
                                detail.UpdateDate     = DateTime.Now;
                                detail.UpdateBy       = Singleton.SingletonAuthen.Instance().Id;
                                detail.Description    = "-";
                                detail.Enable         = true;
                                detail.FKProductDtl   = idProd;
                                detail.SequenceNumber = number;
                                detail.QtyOnPO        = qty;
                                detail.RcvQuantity    = rcvQty;
                                detail.CurrentCost    = price;
                                detail.NewCost        = price;
                                detail.DiscountKey    = 0 + "";
                                detail.DiscountBath   = 0;
                                detail.TotalPrice     = total;
                                detail.GiftOnPo       = gift;
                                detail.GiftQty        = rcvGift; // รับเข้าของแถม
                                detail.FKPoDetails    = poDtlId;
                                if ((rcvGift + rcvQty + rcvComplete) == qty + gift)
                                {
                                    detail.IsComplete = true;
                                }
                                else
                                {
                                    detail.IsComplete = false;
                                }
                                detail.RcvComplete = detail.RcvComplete + rcvGift + rcvQty;
                                detail.FKPOHeader  = idpo;
                                //if (rcvGift + rcvQty > 0)
                                //{
                                //    details.Add(detail);
                                //}
                                db.PORcvDetails.Add(detail);
                            }
                        }
                        db.SaveChanges();
                    }
                    return;
                }
                #endregion
                ///////////////////////////////////////////////////////////////////////////////////////////////////
                #region กรณีเพิ่ม
                using (SSLsEntities db = new SSLsEntities())
                {
                    int    currentYear  = DateTime.Now.Year;
                    int    currentMonth = DateTime.Now.Month;
                    var    running      = db.PORcv.Where(w => w.CreateDate.Year == currentYear && w.CreateDate.Month == currentMonth).Count() + 1;
                    string code         = SingletonThisBudgetYear.Instance().ThisYear.CodeYear + DateTime.Now.ToString("MM") + Library.GenerateCodeFormCount(running, 4);

                    //string poInList = listBoxPolist.Items[0].ToString();
                    var   getPo = db.POHeader.SingleOrDefault(w => w.Enable == true && w.PONo == poInList);
                    PORcv rcv   = new PORcv();
                    rcv.FKPOHeader   = getPo.Id;
                    rcv.Code         = MyConstant.PrefixForGenerateCode.RCVPOS + code;
                    rcv.Description  = textBoxDesc.Text;
                    rcv.Enable       = true;
                    rcv.CreateDate   = DateTime.Now;
                    rcv.CreateBy     = SingletonAuthen.Instance().Id;
                    rcv.UpdateDate   = DateTime.Now;
                    rcv.UpdateBy     = SingletonAuthen.Instance().Id;
                    rcv.DiscountKey  = textBoxDis.Text;
                    rcv.DiscountBath = decimal.Parse(textBoxDis.Text);
                    rcv.TotalBUnVat  = decimal.Parse(textBoxUnVat.Text);
                    rcv.TotalBHasVat = decimal.Parse(textBoxHasVat.Text);
                    rcv.TotalVat     = decimal.Parse(textBoxVat.Text);
                    rcv.TotalGift    = 0;
                    rcv.InvoiceNo    = textBoxInvoiceNo.Text;
                    rcv.InvoiceDate  = (DateTime)Library.ConvertTHToENDate(textBoxInvoiceDate.Text);
                    string[] listPO = listBoxPolist.Items.OfType <string>().ToArray();
                    rcv.PORefer     = string.Join(",", listPO);
                    rcv.FKTransport = MyConstant.Transport.NotChoose;
                    rcv.PrintNumber = 0;
                    rcv.FKVendor    = _VendorId;
                    if (_VendorId == 0)
                    {
                        rcv.FKVendor = null;
                    }

                    // details
                    List <PORcvDetails> details = new List <PORcvDetails>();
                    PORcvDetails        detail;
                    for (int row = 0; row < dataGridView1.Rows.Count; row++)
                    {
                        detail = new PORcvDetails();
                        int     idpo        = int.Parse(dataGridView1.Rows[row].Cells[colIdPo].Value.ToString());
                        int     idProd      = int.Parse(dataGridView1.Rows[row].Cells[colIdProd].Value.ToString());
                        int     number      = int.Parse(dataGridView1.Rows[row].Cells[colNumber].Value.ToString());
                        string  barcode     = dataGridView1.Rows[row].Cells[colCode].Value.ToString();
                        decimal rcvComplete = decimal.Parse(dataGridView1.Rows[row].Cells[colRcvComplete].Value.ToString());
                        string  name        = dataGridView1.Rows[row].Cells[colName].Value.ToString();
                        decimal pz          = decimal.Parse(dataGridView1.Rows[row].Cells[colPz].Value.ToString());
                        string  unit        = dataGridView1.Rows[row].Cells[colUnit].Value.ToString();
                        decimal qty         = decimal.Parse(dataGridView1.Rows[row].Cells[colQty].Value.ToString());
                        decimal gift        = decimal.Parse(dataGridView1.Rows[row].Cells[colGift].Value.ToString());
                        decimal rcvQty      = decimal.Parse(dataGridView1.Rows[row].Cells[colRcvQty].Value.ToString());
                        decimal rcvGift     = decimal.Parse(dataGridView1.Rows[row].Cells[colRcvGift].Value.ToString());
                        decimal price       = decimal.Parse(dataGridView1.Rows[row].Cells[colPrice].Value.ToString());
                        decimal total       = decimal.Parse(dataGridView1.Rows[row].Cells[colTotal].Value.ToString());
                        int     poDtlId     = int.Parse(dataGridView1.Rows[row].Cells[colPODtlId].Value.ToString());

                        detail.CreateDate     = DateTime.Now;
                        detail.CreateBy       = SingletonAuthen.Instance().Id;
                        detail.UpdateDate     = DateTime.Now;
                        detail.UpdateBy       = SingletonAuthen.Instance().Id;
                        detail.Description    = "-";
                        detail.Enable         = true;
                        detail.FKProductDtl   = idProd;
                        detail.SequenceNumber = number;
                        detail.QtyOnPO        = qty;
                        detail.RcvQuantity    = rcvQty;
                        detail.CurrentCost    = price;
                        detail.NewCost        = price;
                        detail.DiscountKey    = 0 + "";
                        detail.DiscountBath   = 0;
                        detail.TotalPrice     = total;
                        detail.GiftOnPo       = gift;
                        detail.GiftQty        = rcvGift; // รับเข้าของแถม
                        detail.FKPoDetails    = poDtlId;
                        if ((rcvGift + rcvQty + rcvComplete) == qty)
                        {
                            detail.IsComplete = true;
                        }
                        else
                        {
                            detail.IsComplete = false;
                        }
                        detail.RcvComplete = rcvGift + rcvQty;
                        detail.FKPOHeader  = idpo;
                        details.Add(detail);
                        //if (rcvGift + rcvQty > 0)
                        //{
                        //    details.Add(detail);
                        //}
                    }
                    rcv.PORcvDetails = details;
                    db.PORcv.Add(rcv);
                    db.SaveChanges();
                    MessageBox.Show("บันทึก " + rcv.Code + "เรียบร้อย");
                }
                #endregion

                break;

            case DialogResult.No:
                break;
            }
        }