void AddStockHD(int id)
 {
     using (SSLsEntities db = new SSLsEntities())
     {
         StoreFrontStock hd = new StoreFrontStock();
         hd.Description = "-";
         hd.CreateDate  = DateTime.Now;
         hd.CreateBy    = Singleton.SingletonAuthen.Instance().Id;
         hd.UpdateDate  = DateTime.Now;
         hd.UpdateBy    = Singleton.SingletonAuthen.Instance().Id;
         hd.Enable      = true;
         hd.CurrentQty  = 0;
         hd.FKProduct   = id;
         db.StoreFrontStock.Add(hd);
         db.SaveChanges();
     }
 }
        private void SaveCommit()
        {
            using (SSLsEntities db = new SSLsEntities())
            {
                //var ss = textBoxTotalCost.Text;
                // 1. เพิ่มใหม่
                List <ProcessedGoods> lists = new List <ProcessedGoods>();
                ProcessedGoods        obj;
                string desc  = textBoxDesc.Text;
                string docno = textBoxDocName.Text;
                List <ProductDetails> products = Singleton.SingletonProduct.Instance().ProductDetails;
                int idHD    = products.SingleOrDefault(w => w.Id == _FKProDtl).Products.Id;
                var stockHD = db.StoreFrontStock.SingleOrDefault(w => w.FKProduct == idHD && w.Enable == true);
                if (stockHD == null)
                {
                    StoreFrontStock hd = new StoreFrontStock();
                    hd.Description = "-";
                    hd.CreateDate  = DateTime.Now;
                    hd.CreateBy    = Singleton.SingletonAuthen.Instance().Id;
                    hd.UpdateDate  = DateTime.Now;
                    hd.UpdateBy    = Singleton.SingletonAuthen.Instance().Id;
                    hd.Enable      = true;
                    hd.CurrentQty  = 0;
                    hd.FKProduct   = idHD;
                    db.StoreFrontStock.Add(hd);
                    db.SaveChanges();
                    stockHD = db.StoreFrontStock.SingleOrDefault(w => w.FKProduct == idHD && w.Enable == true);
                }
                List <StoreFrontStockDetails> details = new List <StoreFrontStockDetails>();
                StoreFrontStockDetails        detail  = new StoreFrontStockDetails();
                detail.DocNo             = docno;
                detail.DocDtlNumber      = 0;
                detail.Description       = "";
                detail.CreateDate        = DateTime.Now;
                detail.CreateBy          = Singleton.SingletonAuthen.Instance().Id;
                detail.UpdateDate        = DateTime.Now;
                detail.UpdateBy          = Singleton.SingletonAuthen.Instance().Id;
                detail.Enable            = true;
                detail.ActionQty         = decimal.Parse(textBoxQty.Text);
                detail.FKStoreFrontStock = stockHD.Id;
                detail.FKTransactionType = MyConstant.PosTransaction.SetStock;
                detail.Barcode           = textBoxGoodsCode.Text;
                detail.Name             = products.SingleOrDefault(w => w.Id == _FKProDtl).Products.ThaiName;
                detail.FKProductDetails = _FKProDtl;
                detail.ResultQty        = 0;
                detail.PackSize         = 1;
                detail.CostOnlyPerUnit  = products.SingleOrDefault(w => w.Id == _FKProDtl).CostOnly;
                detail.SellPricePerUnit = products.SingleOrDefault(w => w.Id == _FKProDtl).SellPrice;
                details.Add(detail);

                //ProcessedGoods procGoods;
                //List<ProcessedGoods> procList = new List<ProcessedGoods>();
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    //procGoods = new ProcessedGoods();
                    obj    = new ProcessedGoods();
                    detail = new StoreFrontStockDetails();
                    var getBarcode = dataGridView1.Rows[i].Cells[colCode].Value;
                    if (getBarcode == null)
                    {
                        continue;
                    }
                    else if (getBarcode.ToString() == "")
                    {
                        continue;
                    }
                    decimal qty        = decimal.Parse(dataGridView1.Rows[i].Cells[colQty].Value.ToString());
                    decimal costOnly   = decimal.Parse(dataGridView1.Rows[i].Cells[colCostOnly].Value.ToString());
                    decimal costAndVat = decimal.Parse(dataGridView1.Rows[i].Cells[colCostAndVat].Value.ToString());
                    decimal packsize   = decimal.Parse(dataGridView1.Rows[i].Cells[colpz].Value.ToString());
                    decimal sellprice  = decimal.Parse(dataGridView1.Rows[i].Cells[colPrice].Value.ToString());
                    int     id         = int.Parse(dataGridView1.Rows[i].Cells[colFKId].Value.ToString());
                    obj.FKProductDtl = _FKProDtl;
                    obj.Barcode      = getBarcode.ToString();
                    obj.CreateDate   = DateTime.Now;
                    obj.CreateBy     = Singleton.SingletonAuthen.Instance().Id;
                    obj.UpdateDate   = DateTime.Now;
                    obj.UpdateBy     = Singleton.SingletonAuthen.Instance().Id;
                    obj.CostOnly     = costOnly;
                    obj.CostAndVat   = costAndVat;
                    obj.CostVat      = costAndVat - costOnly;
                    obj.PackSize     = packsize;
                    obj.SellPrice    = sellprice;
                    obj.Qty          = qty;
                    obj.Description  = desc;
                    obj.Enable       = true;
                    obj.DocumentNo   = docno;
                    lists.Add(obj);
                    // ตัด Stock
                    int idHDForProd = products.SingleOrDefault(w => w.Id == id).Products.Id; // fkproduct
                    var getStockHD  = db.StoreFrontStock.SingleOrDefault(w => w.FKProduct == idHDForProd && w.Enable == true);
                    if (getStockHD == null)
                    {
                        AddStockHD(idHDForProd);
                        getStockHD = db.StoreFrontStock.SingleOrDefault(w => w.FKProduct == idHDForProd && w.Enable == true);
                    }
                    detail.DocNo             = docno;
                    detail.DocDtlNumber      = (i + 1);
                    detail.Description       = "";
                    detail.CreateDate        = DateTime.Now;
                    detail.CreateBy          = Singleton.SingletonAuthen.Instance().Id;
                    detail.UpdateDate        = DateTime.Now;
                    detail.UpdateBy          = Singleton.SingletonAuthen.Instance().Id;
                    detail.Enable            = true;
                    detail.ActionQty         = (qty * packsize) * decimal.Parse(textBoxQty.Text);
                    detail.FKStoreFrontStock = getStockHD.Id;
                    detail.FKTransactionType = MyConstant.PosTransaction.ProcessingGoods;
                    detail.Barcode           = getBarcode.ToString();
                    detail.Name             = products.SingleOrDefault(w => w.Id == id).Products.ThaiName;
                    detail.FKProductDetails = id;
                    detail.ResultQty        = 0;
                    detail.PackSize         = packsize;
                    detail.CostOnlyPerUnit  = costOnly;
                    detail.SellPricePerUnit = sellprice;
                    details.Add(detail);
                }
                // add to process goods
                db.ProcessedGoods.AddRange(lists);
                // add to stock
                db.StoreFrontStockDetails.AddRange(details);
                db.SaveChanges();
            }
        }
        /// <summary>
        /// คืน stock กรณีลด รายการ
        /// </summary>
        private void CheckAddNew()
        {
            List <ProductDetails> products = Singleton.SingletonProduct.Instance().ProductDetails;

            using (SSLsEntities db = new SSLsEntities())
            {
                List <StoreFrontStockDetails> details = new List <StoreFrontStockDetails>();
                var getPGoods = db.ProcessedGoods.Where(w => w.FKProductDtl == _FKProDtl && w.Enable == true).ToList();
                List <ProcessedGoods> lists = new List <ProcessedGoods>();
                ProcessedGoods        obj;
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    var getBarcode = dataGridView1.Rows[i].Cells[colCode].Value;
                    if (getBarcode == null)
                    {
                        continue;
                    }
                    else if (getBarcode.ToString() == "")
                    {
                        continue;
                    }
                    var detect = getPGoods.FirstOrDefault(w => w.Barcode == getBarcode.ToString());
                    if (detect != null)
                    {
                        // แสดงว่าเป็นบาร์โค้ดเดิม
                    }
                    else
                    {
                        // แสดงว่า เพิ่มมาใหม่
                        obj = new ProcessedGoods();
                        obj.FKProductDtl = _FKProDtl;
                        obj.Barcode      = getBarcode.ToString();
                        obj.CreateDate   = DateTime.Now;
                        obj.CreateBy     = Singleton.SingletonAuthen.Instance().Id;
                        obj.UpdateDate   = DateTime.Now;
                        obj.UpdateBy     = Singleton.SingletonAuthen.Instance().Id;

                        decimal qty        = decimal.Parse(dataGridView1.Rows[i].Cells[colQty].Value.ToString());
                        decimal costOnly   = decimal.Parse(dataGridView1.Rows[i].Cells[colCostOnly].Value.ToString());
                        decimal costAndVat = decimal.Parse(dataGridView1.Rows[i].Cells[colCostAndVat].Value.ToString());
                        decimal packsize   = decimal.Parse(dataGridView1.Rows[i].Cells[colpz].Value.ToString());
                        decimal sellprice  = decimal.Parse(dataGridView1.Rows[i].Cells[colPrice].Value.ToString());
                        obj.CostOnly    = costOnly;
                        obj.CostAndVat  = costAndVat;
                        obj.CostVat     = costAndVat - costOnly;
                        obj.PackSize    = packsize;
                        obj.SellPrice   = sellprice;
                        obj.Qty         = qty;
                        obj.Description = textBoxDesc.Text;
                        obj.Enable      = true;
                        obj.DocumentNo  = textBoxDocName.Text;
                        lists.Add(obj);

                        string desc  = textBoxDesc.Text;
                        string docno = textBoxDocName.Text;

                        var getGoodfromSing = products.FirstOrDefault(w => w.Code == obj.Barcode);
                        var stockHD         = db.StoreFrontStock.SingleOrDefault(w => w.FKProduct == getGoodfromSing.FKProduct && w.Enable == true);

                        if (stockHD == null)
                        {
                            StoreFrontStock hd = new StoreFrontStock();
                            hd.Description = "-";
                            hd.CreateDate  = DateTime.Now;
                            hd.CreateBy    = Singleton.SingletonAuthen.Instance().Id;
                            hd.UpdateDate  = DateTime.Now;
                            hd.UpdateBy    = Singleton.SingletonAuthen.Instance().Id;
                            hd.Enable      = true;
                            hd.CurrentQty  = 0;
                            hd.FKProduct   = getGoodfromSing.FKProduct;
                            db.StoreFrontStock.Add(hd);
                            db.SaveChanges();
                            stockHD = db.StoreFrontStock.SingleOrDefault(w => w.FKProduct == getGoodfromSing.FKProduct && w.Enable == true);
                        }
                        // ตัด stock
                        StoreFrontStockDetails detail = new StoreFrontStockDetails();
                        detail.DocNo             = docno;
                        detail.DocDtlNumber      = i + 1;
                        detail.Description       = "";
                        detail.CreateDate        = DateTime.Now;
                        detail.CreateBy          = Singleton.SingletonAuthen.Instance().Id;
                        detail.UpdateDate        = DateTime.Now;
                        detail.UpdateBy          = Singleton.SingletonAuthen.Instance().Id;
                        detail.Enable            = true;
                        detail.ActionQty         = (qty * packsize) * _QTY; // ยอดคงเหลือ
                        detail.FKStoreFrontStock = stockHD.Id;
                        detail.FKTransactionType = MyConstant.PosTransaction.ProcessingGoods;
                        detail.Barcode           = obj.Barcode;
                        detail.Name             = products.SingleOrDefault(w => w.Id == getGoodfromSing.Id).Products.ThaiName;
                        detail.FKProductDetails = getGoodfromSing.Id;
                        detail.ResultQty        = 0;
                        detail.PackSize         = 1;
                        detail.CostOnlyPerUnit  = products.SingleOrDefault(w => w.Id == getGoodfromSing.Id).CostOnly;
                        detail.SellPricePerUnit = products.SingleOrDefault(w => w.Id == getGoodfromSing.Id).SellPrice;
                        details.Add(detail);
                    }
                }
                // add to process goods
                db.StoreFrontStockDetails.AddRange(details);
                db.ProcessedGoods.AddRange(lists);
                db.SaveChanges();
            }
        }