//move reserve stock public static void moveReserveStock(int idCstmPODt_Free, int idCstmPODt , int id_tb_Stock, decimal ReserveQty) { using (var db = new DataClasses1DataContext()) { var tbst = db.tb_Stocks.Where(x => x.id == id_tb_Stock).FirstOrDefault(); //**เขียน ShipQty ออกจาก Job //เขียน SHipping Header tb_ShippingH gg = new tb_ShippingH(); int idProductionOrderRM = 0; string shipNo = dbClss.GetNo(5, 2); gg.ShippingNo = shipNo; gg.ShipDate = DateTime.Now; gg.UpdateBy = ClassLib.Classlib.User; gg.UpdateDate = DateTime.Now; gg.CreateBy = ClassLib.Classlib.User; gg.CreateDate = DateTime.Now; gg.ShipName = ClassLib.Classlib.User; var po = db.mh_CustomerPODTs.Where(x => x.id == idCstmPODt) .Join(db.mh_CustomerPOs.Where(x => x.DemandType == 0) , dt => dt.idCustomerPO , hd => hd.id , (dt, hd) => new { hd, dt }).FirstOrDefault(); string cstmPOno = (po != null && po.hd != null) ? po.hd.CustomerPONo : idCstmPODt.ToSt(); gg.Remark = $"Shipping for Move Stock to new CustomerPO ({cstmPOno})"; gg.JobCard = ""; gg.TempJobCard = ""; byte[] barcode = null; gg.BarCode = barcode; gg.Status = "Completed"; gg.ToLocation = "Warehouse"; db.tb_ShippingHs.InsertOnSubmit(gg); db.SubmitChanges(); //Shipping ADD var tool = db.mh_Items.Where(x => x.InternalNo == tbst.CodeNo).FirstOrDefault(); var uom = db.mh_ItemUOMs.Where(x => x.UOMCode == tool.BaseUOM && x.ItemNo == tbst.CodeNo).FirstOrDefault(); var pcsunit = 1.00m; if (uom != null) { pcsunit = uom.QuantityPer; } db.sp_024_tb_Shipping_ADD(shipNo, tbst.CodeNo , ReserveQty //QtyPlan , ReserveQty //QtyShip , "", "", "", "" , tbst.LotNo , "Completed", ClassLib.Classlib.User , "", ""//txtTempJobCard.Text.Trim() , 0, tbst.Location, "Warehouse", tool.BaseUOM, pcsunit , tool.BaseUOM, pcsunit, idCstmPODt_Free , idProductionOrderRM , 1 ); //**Stock Receive ใส่ Customer PODt id ใบใหม่ var amntCost = Math.Round(tbst.UnitCost.ToDecimal() * ReserveQty.ToDecimal(), 2); var s = new tb_Stock(); s.AppDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); s.Seq = 1; s.App = "Receive"; s.Appid = 1; s.CreateBy = ClassLib.Classlib.User; s.CreateDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); s.DocNo = dbClss.GetNo(33, 2); //MOS -- Move stock free to new CustomerPO s.RefNo = id_tb_Stock.ToSt(); //Refer id tb_Stock ของ stock free Customer PO เก่า s.CodeNo = tbst.CodeNo; s.Type = "Move Stock Free to New Sale Order"; s.QTY = ReserveQty; s.Inbound = s.QTY; s.Outbound = 0; s.Type_i = 1; s.Category = "Invoice"; s.Refid = idCstmPODt_Free; //old idCstmPODt ---> Free Stock s.idCSTMPODt = idCstmPODt; //new idCstmPODt s.Type_in_out = "In"; s.AmountCost = amntCost; if (s.AmountCost > 0) { s.UnitCost = Math.Round(s.AmountCost.ToDecimal() / s.QTY.ToDecimal(), 6); } else { s.UnitCost = 0; } decimal RemainQty = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(s.CodeNo, "Free", 0, "Warehouse", -1))); decimal sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(s.CodeNo, "", "", "RemainAmount", "Warehouse", 0 /*idCstmPODt*/)) + s.AmountCost.ToDecimal(); decimal sum_Qty = RemainQty.ToDecimal() + s.QTY.ToDecimal(); var RemainAmount = sum_Remain; decimal RemainUnitCost = 0.00m; if (sum_Qty <= 0) { RemainUnitCost = 0; } else { RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 6); } s.RemainQty = sum_Qty; s.RemainUnitCost = RemainUnitCost; s.RemainAmount = RemainAmount; s.Avg = 0; s.CalDate = null; s.Status = "Active"; s.Flag_ClearTemp = 0; s.TLCost = s.AmountCost; s.TLQty = s.QTY; s.ShipQty = 0; s.Location = "Warehouse"; s.LotNo = tbst.LotNo; s.ShelfNo = tbst.ShelfNo; //ต้องไม่ใช่ Item ที่มีในระบบ var c = (from ix in db.mh_Items where ix.InternalNo.Trim().ToUpper() == s.CodeNo.Trim().ToUpper() && ix.Active select ix).ToList(); if (c.Count <= 0) { s.TLQty = 0; s.ShipQty = s.QTY; } db.tb_Stocks.InsertOnSubmit(s); db.SubmitChanges(); //update Stock เข้า item db.sp_010_Update_StockItem(Convert.ToString(s.CodeNo), ""); } }
private void SaveDetail() { string ADNo = txtListNo1.Text.Trim().ToUpper(); DateTime?RequireDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); //if (!dtRequire.Text.Equals("")) // RequireDate = dtRequire.Value; int Seq = 0; DateTime?UpdateDate = null; string LotNo = ""; using (DataClasses1DataContext db = new DataClasses1DataContext()) { string SS = ""; int id = 0; DateTime?CalDate = null; DateTime?AppDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); string Type = ""; string Category = ""; int Flag_ClearTemp = 0; string Type_in_out = "In"; decimal RemainQty = 0; decimal Amount = 0; decimal RemainAmount = 0; decimal RemainUnitCost = 0; //decimal Avg = 0; decimal UnitCost = 0; decimal sum_Remain = 0; decimal sum_Qty = 0; decimal BasePCSUnit = 0; Category = "Adjust"; Type = "Adjust"; Flag_ClearTemp = 5; decimal Qty = 0; string Location = ""; string ShelfNo = ""; var c = (from ix in db.mh_CheckStock_Lists select ix) .Where(a => a.CheckStatus == "Process" && a.SeqStatus == 2 && Convert.ToString(a.ApproveBy) != "" && a.CheckNo.Trim().ToUpper() == ADNo.Trim().ToUpper() && Convert.ToBoolean(a.InputOK) == true).ToList(); if (c.Count > 0) { foreach (var ss in c) { id = StockControl.dbClss.TInt(ss.id); if (StockControl.dbClss.TDe(ss.InputQty) != (0)) // เอาเฉพาะรายการที่ไม่เป็น 0 { //if (StockControl.dbClss.TInt(g.Cells["id"].Value) <= 0) //New ใหม่ //{ LotNo = dbClss.Get_Lot(DateTime.Now.ToString("yyyyMMdd")); //StockControl.dbClss.TSt(g.Cells["LotNo"].Value); //if (LotNo == "") //{ //LotNo = dbClss.Get_Lot(DateTime.Now.ToString("yyyyMMdd")); // } Seq += 1; tb_StockAdjust u = new tb_StockAdjust(); u.AdjustNo = ADNo; u.CodeNo = StockControl.dbClss.TSt(ss.InternalNo); var i = (from ix in db.mh_Items where ix.InternalNo.Trim() == StockControl.dbClss.TSt(ss.InternalNo).Trim() && ix.Active == true select ix).ToList(); if (i.Count > 0) { u.ItemNo = StockControl.dbClss.TSt(i.FirstOrDefault().InternalName); u.ItemDescription = StockControl.dbClss.TSt(i.FirstOrDefault().InternalDescription); u.Location = StockControl.dbClss.TSt(i.FirstOrDefault().Location); Location = StockControl.dbClss.TSt(i.FirstOrDefault().Location); u.ShelfNo = StockControl.dbClss.TSt(i.FirstOrDefault().ShelfNo); ShelfNo = StockControl.dbClss.TSt(i.FirstOrDefault().ShelfNo); } u.Qty = StockControl.dbClss.TDe(ss.InputQty); u.StandardCost = StockControl.dbClss.TDe(ss.Cost); u.PCSUnit = StockControl.dbClss.TDe(ss.PCSUnit); u.Unit = StockControl.dbClss.TSt(ss.UOM); u.Amount = StockControl.dbClss.TDe(ss.Amount); u.Reason = StockControl.dbClss.TSt(ss.Remark); u.LotNo = LotNo; u.StockType = "Taking"; u.Seq = Seq; u.Status = "Completed"; u.CreateBy = ClassLib.Classlib.User; u.CreateDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); u.RefidJobCard = 0; u.RefJobCard = ""; u.RefTempJobCard = ""; u.idCSTMPODt = 0; db.tb_StockAdjusts.InsertOnSubmit(u); db.SubmitChanges(); dbClss.AddHistory(this.Name, "ปรับสต็อก", "เพิ่มรายการ ปรับสต็อก [" + u.CodeNo + " จำนวนปรับปรุง :" + u.Qty.ToString() + " จำนวนก่อนปรับปรุง " + StockControl.dbClss.TSt(ss.StockQty) + "]", ADNo); decimal StandardCost = 0; StandardCost = dbClss.TDe(ss.Cost); //Math.Round((StockControl.dbClss.TDe(gg.Amount) / StockControl.dbClss.TDe(g.Cells["QTYTrue"].Value)), 2); Qty = StockControl.dbClss.TDe(ss.InputQty); if (Qty > 0) { Seq += 1; BasePCSUnit = 1; Amount = StockControl.dbClss.TDe(ss.Amount); UnitCost = Math.Round((Amount / Qty), 2);//Math.Round((Amount / (Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit)), 2); //แบบที่ 1 จะไป sum ใหม่ RemainQty = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(StockControl.dbClss.TSt(ss.InternalNo), "Free", 0, Location, 0))); sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(StockControl.dbClss.TSt(ss.InternalNo), "", "", "RemainAmount", Location, 0)) + Amount; sum_Qty = RemainQty + Qty;//Math.Round(((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit)), 2); RemainAmount = sum_Remain; if (sum_Qty <= 0) { RemainUnitCost = 0; } else { RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 2); } tb_Stock gg = new tb_Stock(); gg.AppDate = AppDate; gg.Seq = Seq; gg.App = "Adjust"; gg.Appid = Seq; gg.CreateBy = ClassLib.Classlib.User; gg.CreateDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); gg.DocNo = ss.CheckNo; gg.RefNo = ss.CheckNo; gg.CodeNo = ss.InternalNo; gg.Type = Type; gg.QTY = Qty; //Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2); gg.Inbound = Qty; //Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2); gg.Outbound = 0; gg.Type_i = 1; //Receive = 1,Cancel Receive 2,Shipping = 3,Cancel Shipping = 4,Adjust stock = 5,ClearTemp = 6 gg.Category = Category; gg.Refid = 0; gg.Type_in_out = Type_in_out; gg.AmountCost = Amount; gg.UnitCost = UnitCost; gg.RemainQty = sum_Qty; gg.RemainUnitCost = RemainUnitCost; gg.RemainAmount = RemainAmount; gg.Avg = 0;// Avg; gg.CalDate = CalDate; gg.Status = "Active"; gg.Flag_ClearTemp = Flag_ClearTemp; //0 คือ invoice,1 คือ Temp , 2 คือ clear temp แล้ว gg.TLCost = Amount; gg.TLQty = Qty; //Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2); gg.ShipQty = 0; gg.Location = Location; gg.ShelfNo = ShelfNo; gg.LotNo = LotNo; gg.idCSTMPODt = -3; gg.Free = true; //ต้องไม่ใช่ Item ที่มีในระบบ var cc = (from ix in db.mh_Items where ix.InternalNo.Trim().ToUpper() == ss.InternalNo.Trim().ToUpper() && ix.Active == true select ix).ToList(); if (cc.Count <= 0) { gg.TLQty = 0; gg.ShipQty = Qty;//Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2); } db.tb_Stocks.InsertOnSubmit(gg); db.SubmitChanges(); } else if (Qty < 0) //ปรับออก { Qty = Math.Abs(Qty); //db.sp_041_tb_Adjust_Stock(txtADNo.Text, vv.CodeNo, Qty, ClassLib.Classlib.User,"","",0, Location,dbClss.TInt(vv.idCSTMPODt)); db.sp_057_Cut_Stock(ss.CheckNo, StockControl.dbClss.TSt(ss.InternalNo).Trim().ToUpper(), Qty, ClassLib.Classlib.User, "", "", 0, Location, "Adjust", "Adjust", 5, 0, 0, "", 0); } //update Stock เข้า item db.sp_010_Update_StockItem(StockControl.dbClss.TSt(ss.InternalNo).Trim().ToUpper(), ""); } //else //{ // var c = (from ix in db.mh_CheckStock_Lists select ix) // .Where(a => a.CheckStatus == "Waiting" && a.id == id).ToList(); // if (c.Count > 0) // { // foreach (var ss in c) // { // ss.CheckStatus = "Completed"; // db.SubmitChanges(); // } // } //} } } var up = (from ix in db.mh_CheckStock_Lists select ix) .Where(a => a.CheckStatus != "Completed" && a.CheckStatus != "Cancel" && a.SeqStatus == 2 && Convert.ToString(a.ApproveBy) != "" && a.CheckNo.Trim().ToUpper() == ADNo.Trim().ToUpper() //&& Convert.ToBoolean(a.InputOK) == true ).ToList(); if (up.Count > 0) { foreach (var ss in up) { ss.CheckStatus = "Completed"; db.SubmitChanges(); } } } }
private void Save_detail2_H(int seq, int id, string SHNo, string CodeNo) { using (DataClasses1DataContext db = new DataClasses1DataContext()) { string Type = "CNShipping"; string Category = "Invoice"; //Temp,Invoice string Type_in_out = "In"; decimal RemainQty = 0; decimal Amount = 0; decimal RemainAmount = 0; decimal Avg = 0; decimal UnitCost = 0; decimal sum_Remain = 0; decimal sum_Qty = 0; decimal RemainUnitCost = 0; string Location = ""; string ShelfNo = ""; var g = (from ix in db.tb_Shippings //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.ShippingNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" && ix.id == id select ix).First(); g.Status = "Cancel"; //insert Stock DateTime?CalDate = null; DateTime?AppDate = DateTime.Now; int Seq = seq; UnitCost = Convert.ToDecimal(g.UnitCost); //get_cost(g.CodeNo); Amount = Convert.ToDecimal(g.QTY) * UnitCost; string Category1 = "Free"; if (dbClss.TInt(g.idCSTMPODt) > 0) { Category1 = "CstmPOID"; } //แบบที่ 1 จะไป sum ใหม่ RemainQty = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(g.CodeNo, Category1, 0, dbClss.TSt(g.Location), dbClss.TInt(g.idCSTMPODt)))); //แบบที่ 2 จะไปดึงล่าสุดมา //RemainQty = Convert.ToDecimal(dbClss.Get_Stock(vv.CodeNo, "", "", "RemainQty")); sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(g.CodeNo, "", "", "RemainAmount", dbClss.TSt(g.Location), dbClss.TInt(g.idCSTMPODt))) + Amount; sum_Qty = RemainQty + Convert.ToDecimal(g.QTY); //if (sum_Qty > 0) // Avg = sum_Remain / sum_Qty; //else // Avg = 0; RemainAmount = sum_Remain;//sum_Qty * Avg; if (sum_Qty <= 0) { RemainUnitCost = 0; } else { RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 2); } //กรณีที่ Shipping แบบ Temp แล้ว cancel ให้มาปรับ Flag ด้วย var s1 = (from ix in db.tb_Stocks //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.DocNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" && ix.CodeNo == CodeNo //&& ix.Refid == id //&& ix.Category == "Temp" //&& ix.Flag_ClearTemp == 1 && ix.Type == "Shipping" select ix).ToList(); if (s1.Count > 0) { Location = dbClss.TSt(s1.FirstOrDefault().Location); ShelfNo = dbClss.TSt(s1.FirstOrDefault().ShelfNo); var ss = (from ix in db.tb_Stocks //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.DocNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" //&& ix.Refid == id && ix.CodeNo == CodeNo && ix.Category == "Temp" && ix.Flag_ClearTemp == 1 && ix.Type == "Shipping" select ix).ToList(); if (ss.Count > 0) { var s = (from ix in db.tb_Stocks //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.DocNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" //&& ix.Refid == id && ix.CodeNo == CodeNo && ix.Category == "Temp" && ix.Flag_ClearTemp == 1 && ix.Type == "Shipping" select ix).First(); if (s != null) { s.Flag_ClearTemp = 2; db.SubmitChanges(); Location = dbClss.TSt(s.Location); } } string LotNo = ""; if (LotNo == "") { LotNo = dbClss.Get_Lot(DateTime.Now.ToString("yyyyMMdd")); } tb_Stock gg = new tb_Stock(); gg.AppDate = AppDate; gg.Seq = Seq; gg.App = "Cancel SH"; gg.Appid = Seq; gg.CreateBy = ClassLib.Classlib.User; gg.CreateDate = DateTime.Now; gg.DocNo = txtCNNo.Text; gg.RefNo = SHNo; gg.Type = ddlType.Text; gg.QTY = Convert.ToDecimal(g.QTY); gg.Inbound = Convert.ToDecimal(g.QTY); gg.Outbound = 0; gg.CodeNo = g.CodeNo; gg.Status = "Active"; gg.Type_i = 4; //Receive = 1,Cancel Receive 2,Shipping = 3,Cancel Shipping = 4,Adjust stock = 5,ClearTemp = 6 gg.Category = Category; gg.Refid = dbClss.TInt(s1.FirstOrDefault().Refid); //Convert.ToInt32(txtid.Text); gg.RefidAD = s1.FirstOrDefault().RefidAD; //gg.RefShipid = id; gg.Flag_ClearTemp = 0; //0 คือ invoice,1 คือ Temp , 2 คือ clear temp แล้ว gg.Type_in_out = Type_in_out; gg.AmountCost = Amount; gg.UnitCost = UnitCost; gg.RemainQty = sum_Qty; gg.RemainUnitCost = RemainUnitCost; gg.RemainAmount = RemainAmount; gg.Avg = 0;// Avg; gg.TLCost = Amount; gg.TLQty = Convert.ToDecimal(g.QTY); gg.ShipQty = 0; gg.Location = Location; gg.ShelfNo = ShelfNo; gg.idCSTMPODt = dbClss.TInt(s1.FirstOrDefault().idCSTMPODt); gg.RefTempJobCode = dbClss.TSt(s1.FirstOrDefault().RefTempJobCode); gg.RefJobCode = dbClss.TSt(s1.FirstOrDefault().RefJobCode); gg.RefidJobCode = dbClss.TInt(s1.FirstOrDefault().RefidJobCode); gg.Free = true; gg.LotNo = LotNo; db.tb_Stocks.InsertOnSubmit(gg); db.SubmitChanges(); dbClss.AddHistory(this.Name, "เพิ่ม Stock", "Cancel รายการ Shipping [" + txtSHNo.Text.Trim() + " id : " + g.id.ToString() + " CodeNo : " + g.CodeNo + " จำนวน : " + g.QTY.ToString() + "]", txtCNNo.Text); //update Stock เข้า item db.sp_010_Update_StockItem(Convert.ToString(g.CodeNo), ""); } } }
void SaveE() { try { using (var db = new DataClasses1DataContext()) { string PKNo = (txtidPk.Text.ToInt() > 0) ? txtPackingNo.Text.Trim() : ""; var m = db.mh_Packings.Where(x => x.PackingNo == PKNo).FirstOrDefault(); if (m == null) { m = new mh_Packing(); m.CreateBy = ClassLib.Classlib.User; m.CreateDate = DateTime.Now; m.PackingNo = dbClss.GetNo(32, 2); db.mh_Packings.InsertOnSubmit(m); dbClss.AddHistory(this.Name, "Packing", $"New document Packing {m.PackingNo}", m.PackingNo); } m.Remark = txtRemark.Text; m.Active = true; m.UpdateDate = DateTime.Now; m.UpdateBy = ClassLib.Classlib.User; m.PackingDate = dtPackingDate.Value.Date; db.SubmitChanges(); //Save Header //DT foreach (var item in dgvData.Rows) { if (item.Cells["Qty"].Value.ToDecimal() == 0) { continue; } bool newItem = false; int id = item.Cells["id"].Value.ToInt(); int idJob = item.Cells["idJob"].Value.ToInt(); string jobNo = item.Cells["RefNo"].Value.ToSt(); var dt = db.mh_PackingDts.Where(x => x.id == id).FirstOrDefault(); if (dt == null) { dt = new mh_PackingDt(); db.mh_PackingDts.InsertOnSubmit(dt); newItem = true; } dt.PackingNo = m.PackingNo; dt.ItemNo = item.Cells["ItemNo"].Value.ToSt(); dt.ItemName = item.Cells["ItemName"].Value.ToSt(); dt.Qty = item.Cells["Qty"].Value.ToDecimal(); dt.UOM = item.Cells["UOM"].Value.ToSt(); dt.PCSUnit = item.Cells["PCSUnit"].Value.ToDecimal(); dt.Amount = item.Cells["Amount"].Value.ToDecimal(); //find Rem amount when Receive Qty == Out Qty var prod = db.mh_ProductionOrders.Where(x => x.id == idJob).FirstOrDefault(); if (prod == null) { continue; } if (dt.Qty == prod.OutQty) { var sumProd = db.mh_ProductionOrderRMs.Where(x => x.JobNo == jobNo && x.Active).Sum(x => x.CostOverall); var temp = db.mh_ProductionOrderRM_2s.Where(x => x.JobNo == jobNo && x.Active).ToList(); if (temp.Count > 0) { sumProd += temp.Sum(x => x.TotalCost); } var costAll = prod.CostOverhead + sumProd; //Cost All in Job (Cost Overhead + RM Cost) var costTaking = 0.00m; var packall = db.mh_Packings.Where(x => x.Active) .Join(db.mh_PackingDts.Where(x => x.Active && x.idJob == idJob) , pk_hd => pk_hd.PackingNo , pk_dt => pk_dt.PackingNo , (pk_hd, pk_dt) => new { pk_hd, pk_dt }).ToList(); if (packall.Count() > 0) { costTaking = packall.Sum(x => x.pk_dt.Amount); } //costRem dt.Amount = costAll - costTaking; } dt.UnitPrice = Math.Round(dt.Amount / dt.Qty, 2); DateTime dNow = DateTime.Now.Date; string LotNo = item.Cells["LotNo"].Value.ToSt(); //var dLot = db.mh_LotFGs.Where(x => x.LotDate == dNow).FirstOrDefault(); //if (dLot != null) //{ // LotNo = dLot.LotNo; // //prod.LotNo = dLot.LotNo; //ใส่ lot ในใบ Production //} dt.LotNo = LotNo; dt.ShelfNo = item.Cells["ShelfNo"].Value.ToSt(); dt.Remark = item.Cells["Remark"].Value.ToSt(); dt.RefNo = jobNo; dt.CustomerPONo = item.Cells["CustomerPONo"].Value.ToSt(); dt.CustomerPONo_TEMP = item.Cells["CustomerPONo_TEMP"].Value.ToSt(); dt.idJob = idJob; dt.idCstmPODt = item.Cells["idCstmPODt"].Value.ToInt(); dt.Active = true; dt.OfTag = item.Cells["OfTag"].Value.ToSt(); dt.FullTag = item.Cells["FullTag"].Value.ToSt(); db.SubmitChanges(); //Save Detail //update OutQty -- Job var job = prod; if (job != null) { job.OutQty -= dt.Qty; if (job.OutQty <= 0) { job.CloseJob = true; ////รับครบ //var slist = db.tb_Stocks.Where(x => x.idCSTMPODt == item.Cells["idCstmPODt"].Value.ToInt() && x.TLQty > 0 && x.Type != "Receive By Job").ToList(); //foreach (var ss in slist) // ss.Free = true; db.SubmitChanges(); } dbClss.AddHistory("ProductionOrder", "Job Order Sheet", $"Receive by Packing No {m.PackingNo} : {dt.Qty}", job.JobNo); } //Stock if (newItem) { var s = new tb_Stock(); s.AppDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); s.Seq = item.Index + 1; s.App = "Receive"; s.Appid = item.Index + 1; s.CreateBy = ClassLib.Classlib.User; s.CreateDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US")); s.DocNo = m.PackingNo; s.RefNo = job.JobNo; //JobNo --> mh_ProductionOrder s.CodeNo = item.Cells["ItemNo"].Value.ToSt(); s.Type = "Receive By Job"; s.QTY = Math.Round(item.Cells["Qty"].Value.ToDecimal() * item.Cells["PCSUnit"].Value.ToDecimal(), 2); s.Inbound = s.QTY; s.Outbound = 0; s.Type_i = 1; s.Category = "Invoice"; s.Refid = dt.id; //id mh_PackingDt //กรณีปกติจะบันทึก idCustomerPO Dt เพื่อระบุว่าของที่รับเข้าใช้สำหรับ Customer PO ใด s.idCSTMPODt = job.RefDocId; //idCstmPODt -->เปลี่ยนเป็น idSaleOrder var so = db.mh_SaleOrderDTs.Where(x => x.id == job.RefDocId) .Join(db.mh_SaleOrders.Where(x => x.Active) , sodt => sodt.SONo , sohd => sohd.SONo , (sodt, sohd) => new { sohd, sodt }).FirstOrDefault(); if (so == null) { continue; // Packing จาก Job ต้องมาจาก SaleOrder เท่านั้น } //เช็คว่าเป็น FG ที่ผลิตเพื่อ Customer PO (Safety stock หรือไม่) :::: DemandType = 1 --> ผลิตเพื่อ Safety Stock if (so.sodt.ItemNo == s.CodeNo) { if (so.sodt.forSafetyStock && so.sohd.DemandType == 1) //เป็น FG ที่ผลิตเพื่อ Safety Stock ให้ใส่ idCstmPO =0 { s.idCSTMPODt = 0; s.Free = false; } else { s.Free = true; } so.sodt.OutQty -= s.QTY.ToDecimal(); if (so.sodt.OutQty < 0) { so.sodt.OutQty = 0; } //dbClss.AddHistory("CustomerPO", "Customer P/O", $"Receive by Packing no. {m.PackingNo} : {s.QTY}", cstmpo.pohd.CustomerPONo); } else //เป็น SEMI Component หรือ FG Component { s.Free = true; } if (false) { //กรณี Safety Stock จะบันทึก idCStmPODt เป็น 0 แต่ถ้าเป็นการรับเพื่อไปผลิต FG Safety Stock จะใส่ id นั้นๆปกติ //var cstmpo = db.mh_CustomerPODTs.Where(x => x.id == job.RefDocId /*&& x.forSafetyStock*/) // .Join(db.mh_CustomerPOs.Where(x => x.Active /*x.DemandType == 1*/) // , podt => podt.idCustomerPO // , pohd => pohd.id // , (podt, pohd) => new { pohd, podt }).FirstOrDefault(); //if (cstmpo != null) //{ ////เช็คว่าเป็น FG ที่ผลิตเพื่อ Customer PO (Safety stock หรือไม่) :::: DemandType = 1 --> ผลิตเพื่อ Safety Stock //if (cstmpo.podt.ItemNo == s.CodeNo) //{ // if(cstmpo.podt.forSafetyStock && cstmpo.pohd.DemandType == 1) //เป็น FG ที่ผลิตเพื่อ Safety Stock ให้ใส่ idCstmPO =0 // s.idCSTMPODt = 0; // cstmpo.podt.OutQty -= s.QTY.ToDecimal(); // if (cstmpo.podt.OutQty < 0) // cstmpo.podt.OutQty = 0; // dbClss.AddHistory("CustomerPO", "Customer P/O", $"Receive by Packing no. {m.PackingNo} : {s.QTY}", cstmpo.pohd.CustomerPONo); //} //} } s.Type_in_out = "In"; s.AmountCost = dt.Amount; if (s.AmountCost > 0) { s.UnitCost = Math.Round(s.AmountCost.ToDecimal() / s.QTY.ToDecimal(), 6); } else { s.UnitCost = 0; } decimal RemainQty = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(s.CodeNo, "", 0, "Warehouse", -1))); decimal sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(s.CodeNo, "", "", "RemainAmount", "Warehouse", 0 /*job.RefDocId*/)) + s.AmountCost.ToDecimal(); decimal sum_Qty = RemainQty.ToDecimal() + s.QTY.ToDecimal(); var RemainAmount = sum_Remain; decimal RemainUnitCost = 0.00m; if (sum_Qty <= 0) { RemainUnitCost = 0; } else { RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 6); } s.RemainQty = sum_Qty; s.RemainUnitCost = RemainUnitCost; s.RemainAmount = RemainAmount; s.Avg = 0; s.CalDate = null; s.Status = "Active"; s.Flag_ClearTemp = 0; s.TLCost = s.AmountCost; s.TLQty = s.QTY; s.ShipQty = 0; s.Location = "Warehouse"; s.LotNo = dt.LotNo; s.ShelfNo = item.Cells["ShelfNo"].Value.ToSt(); s.RefTempJobCode = m.PackingNo; s.RefidJobCode = dt.id; //ต้องไม่ใช่ Item ที่มีในระบบ var c = (from ix in db.mh_Items where ix.InternalNo.Trim().ToUpper() == s.CodeNo.Trim().ToUpper() && ix.Active select ix).ToList(); if (c.Count <= 0) { s.TLQty = 0; s.ShipQty = s.QTY; } db.tb_Stocks.InsertOnSubmit(s); db.SubmitChanges(); //update Stock เข้า item db.sp_010_Update_StockItem(Convert.ToString(s.CodeNo), ""); } db.SubmitChanges(); } dbClss.AddHistory(this.Name, "Packing", $"New Packing {m.PackingNo}", m.PackingNo); ClearData(); txtPackingNo.Text = m.PackingNo; DataLoad(); baseClass.Info("Save complete.\n"); } } catch (Exception ex) { throw ex; } }
private void Save_detail2(int seq, int id, string SHNo) { using (DataClasses1DataContext db = new DataClasses1DataContext()) { string Type = "CNShipping"; string Category = "Invoice"; //Temp,Invoice string Type_in_out = "In"; decimal RemainQty = 0; decimal Amount = 0; decimal RemainAmount = 0; decimal Avg = 0; decimal UnitCost = 0; decimal sum_Remain = 0; decimal sum_Qty = 0; var g = (from ix in db.tb_Shippings //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.ShippingNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" && ix.id == id select ix).First(); g.Status = "Cancel"; //insert Stock DateTime?CalDate = null; DateTime?AppDate = DateTime.Now; int Seq = seq; UnitCost = Convert.ToDecimal(g.UnitCost); //get_cost(g.CodeNo); Amount = Convert.ToDecimal(g.QTY) * UnitCost; //แบบที่ 1 จะไป sum ใหม่ RemainQty = (Convert.ToDecimal(db.Cal_QTY(g.CodeNo, "", 0))); //แบบที่ 2 จะไปดึงล่าสุดมา //RemainQty = Convert.ToDecimal(dbClss.Get_Stock(vv.CodeNo, "", "", "RemainQty")); sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(g.CodeNo, "", "", "RemainAmount")) + Amount; sum_Qty = RemainQty + Convert.ToDecimal(g.QTY); Avg = sum_Remain / sum_Qty; RemainAmount = sum_Qty * Avg; //กรณีที่ Shipping แบบ Temp แล้ว cancel ให้มาปรับ Flag ด้วย var s1 = (from ix in db.tb_Stocks //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.DocNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" && ix.Refid == id && ix.Category == "Temp" && ix.Flag_ClearTemp == 1 && ix.Type == "Shipping" select ix).ToList(); if (s1.Count > 0) { var s = (from ix in db.tb_Stocks //join i in db.tb_Items on ix.CodeNo equals i.CodeNo where ix.DocNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" && ix.Refid == id && ix.Category == "Temp" && ix.Flag_ClearTemp == 1 && ix.Type == "Shipping" select ix).First(); if (s != null) { s.Flag_ClearTemp = 2; db.SubmitChanges(); } } tb_Stock gg = new tb_Stock(); gg.AppDate = AppDate; gg.Seq = Seq; gg.App = "Cancel SH"; gg.Appid = Seq; gg.CreateBy = ClassLib.Classlib.User; gg.CreateDate = DateTime.Now; gg.DocNo = txtCNNo.Text; gg.RefNo = SHNo; gg.Type = ddlType.Text; gg.QTY = Convert.ToDecimal(g.QTY); gg.Inbound = Convert.ToDecimal(g.QTY); gg.Outbound = 0; gg.CodeNo = g.CodeNo; gg.Status = "Active"; gg.Type_i = 4; //Receive = 1,Cancel Receive 2,Shipping = 3,Cancel Shipping = 4,Adjust stock = 5,ClearTemp = 6 gg.Category = Category; gg.Refid = Convert.ToInt32(txtid.Text); gg.Flag_ClearTemp = 0; //0 คือ invoice,1 คือ Temp , 2 คือ clear temp แล้ว gg.Type_in_out = Type_in_out; gg.AmountCost = Amount; gg.UnitCost = UnitCost; gg.RemainQty = sum_Qty; gg.RemainUnitCost = 0; gg.RemainAmount = RemainAmount; gg.Avg = Avg; db.tb_Stocks.InsertOnSubmit(gg); db.SubmitChanges(); dbClss.AddHistory(this.Name, "เพิ่ม Stock", "Cancel รายการ Shipping [" + txtSHNo.Text.Trim() + " id : " + g.id.ToString() + " CodeNo : " + g.CodeNo + " จำนวน : " + g.QTY.ToString() + "]", txtCNNo.Text); //update Stock เข้า item db.sp_010_Update_StockItem(Convert.ToString(g.CodeNo), ""); } }