private bool AddUnit() { bool ck = false; int C = 0; try { radGridView1.EndEdit(); using (DataClasses1DataContext db = new DataClasses1DataContext()) { foreach (var g in radGridView1.Rows) { if (Convert.ToString(g.Cells["dgvC"].Value).Equals("T")) { var t = new mh_CapacityAbsence(); if (Convert.ToString(g.Cells["dgvCodeTemp"].Value).Equals("")) { t.NoOfWorkHours = g.Cells["WorkHours"].Value.ToDecimal(); t.Date = g.Cells["Date"].Value.ToDateTime().Value.Date; t.StartingTime = g.Cells["StartTime"].Value.ToSt(); t.EndingTime = g.Cells["EndTime"].Value.ToSt(); t.Capacity = g.Cells["Capacity"].Value.ToDecimal(); t.idWorkCenters = idWorkCenters; t.SubWorkId = g.Cells["SubWorkId"].Value.ToInt(); t.Active = true; dbClss.AddHistory(this.Name, "เพิ่มวัน", $"เพิ่มวันหยุดงาน [{t.Date.ToDtString()}]", idWorkCenters.ToSt()); //dbClss.AddHistory(this.Name, "เพิ่มผู้ขาย", "เพิ่มผู้ขาย [" + gy.VendorName + "]", ""); db.mh_CapacityAbsences.InsertOnSubmit(t); db.SubmitChanges(); C += 1; } else { t = db.mh_CapacityAbsences.Where(x => x.id == g.Cells["dgvCodeTemp"].Value.ToInt()).First(); t.Date = g.Cells["Date"].Value.ToDateTime().Value.Date; t.StartingTime = g.Cells["StartTime"].Value.ToSt(); t.EndingTime = g.Cells["EndTime"].Value.ToSt(); t.NoOfWorkHours = g.Cells["WorkHours"].Value.ToDecimal(); t.Capacity = g.Cells["Capacity"].Value.ToDecimal(); t.idWorkCenters = idWorkCenters; t.SubWorkId = g.Cells["SubWorkId"].Value.ToInt(); C += 1; db.SubmitChanges(); dbClss.AddHistory(this.Name, "แก้ไขวันหยุดงาน", $"แก้ไขวันหยุดงาน [{t.Date.ToDtString()}]", idWorkCenters.ToSt()); } //Calendar Load var calLoad = db.mh_CalendarLoads.Where(x => x.idAbs == t.id).FirstOrDefault(); //save CalendarLoad var m = db.mh_CalendarLoads.Where(x => x.idHol == t.id).FirstOrDefault(); if (m == null) { m = new mh_CalendarLoad(); db.mh_CalendarLoads.InsertOnSubmit(m); } m.idAbs = t.id; m.idCal = 0; m.idHol = 0; m.idJob = 0; m.idRoute = 0; m.idWorkcenter = t.idWorkCenters; m.StartingTime = baseClass.setTimeSpan(t.StartingTime); m.EndingTime = baseClass.setTimeSpan(t.EndingTime); m.Date = t.Date; db.SubmitChanges(); } } } } catch (Exception ex) { MessageBox.Show(ex.Message); dbClss.AddError("เพิ่มวันหยุดงาน", ex.Message, this.Name); } if (C > 0) { MessageBox.Show("บันทึกสำเร็จ!"); } return(ck); }
void GenJob() { this.Cursor = Cursors.WaitCursor; try { var rowS = dgvData.Rows.Where(x => x.Cells["S"].Value.ToBool()).ToList(); if (rowS.Count < 1) { baseClass.Warning("Please select data.!"); return; } if (rowS.Where(x => x.Cells["PlanningType"].Value.ToSt() == "Production").Count() < 1) { baseClass.Warning("Please select PlanningType: Production.\n"); return; } if (!baseClass.Question("Do you want to 'Generate Job Order Sheet' ?")) { return; } using (var db = new DataClasses1DataContext()) { foreach (var item in rowS.Where(x => x.Cells["PlanningType"].Value.ToSt() == "Production")) { //Hd var m = new mh_ProductionOrder(); m.CreateBy = ClassLib.Classlib.User; m.CreateDate = DateTime.Now; m.JobDate = DateTime.Now.Date; m.JobNo = dbClss.GetNo(29, 2); m.Rev = "0"; // m.Active = true; m.CloseJob = false; m.EndingDate = item.Cells["EndingDate"].Value.ToDateTime().Value; m.FGName = item.Cells["ItemName"].Value.ToSt(); m.FGNo = item.Cells["ItemNo"].Value.ToSt(); m.ReqDate = item.Cells["ReqDate"].Value.ToDateTime().Value; var reqDate = m.ReqDate.Date; var runLot = dbClss.GetNo(42, 2); m.LotNo = runLot; m.Qty = item.Cells["Qty"].Value.ToDecimal(); m.PCSUnit = item.Cells["PCSUnit"].Value.ToDecimal(); m.OutQty = m.Qty; m.RefDocId = item.Cells["idRef"].Value.ToInt(); m.RefDocNo = item.Cells["RefDocNo"].Value.ToSt(); m.RefDocNo_TEMP = item.Cells["RefDocNo_TEMP"].Value.ToSt(); m.StartingDate = item.Cells["StartingDate"].Value.ToDateTime().Value; m.UOM = item.Cells["UOM"].Value.ToSt(); m.UpdateBy = ClassLib.Classlib.User; m.UpdateDate = DateTime.Now; m.HoldJob = false; db.mh_ProductionOrders.InsertOnSubmit(m); dbClss.AddHistory("ProductionOrder", "Job Order Sheet", $"New Job Order Sheeet {m.JobNo}", m.JobNo); //Update Customer P/O if (item.Cells["root"].Value.ToBool()) { //var po = db.mh_CustomerPODTs.Where(x => x.id == m.RefDocId).FirstOrDefault(); //if (po != null) //{ // //po.OutPlan -= m.OutQty; // po.OutPlan = 0;//Full Ref Customer P/O // po.Status = baseClass.setCustomerPOStatus(po); // db.SubmitChanges(); //} //db.SubmitChanges(); var so = db.mh_SaleOrderDTs.Where(x => x.id == m.RefDocId).FirstOrDefault(); if (so != null) { //so.OutPlan -= m.OutQty; so.OutPlan = 0;//Full Ref SaleOrder db.SubmitChanges(); if (so.RefId > 0) { var po = db.mh_CustomerPODTs.Where(x => x.id == so.RefId).FirstOrDefault(); if (po != null) //Sale Order เปิดจาก Customer P/O { po.OutPlan = Math.Round(po.Qty * po.PCSUnit, 2); var soAll = db.mh_SaleOrderDTs.Where(x => x.Active && x.RefId == po.id) .Join(db.mh_SaleOrders.Where(x => x.Active) , dt => dt.SONo , hd => hd.SONo , (dt, hd) => new { hd, dt }).ToList(); foreach (var s in soAll) { var q = Math.Round(s.dt.Qty * s.dt.PCSUnit, 2) - s.dt.OutPlan; po.OutPlan -= q; } po.Status = baseClass.setCustomerPOStatus(po); if (soAll.Count > 0) { db.SubmitChanges(); } }//Customer P/O not null } } } var calOvers = new List <CalOverhead>(); //Dt //**Component** int mainNo = item.Cells["mainNo"].Value.ToInt(); //find all component of Item var itemFG = db.mh_Items.Where(x => x.InternalNo == m.FGNo).FirstOrDefault(); if (itemFG == null) { continue; } var bom = db.tb_BomHDs.Where(x => x.id == itemFG.BillOfMaterials).FirstOrDefault(); if (bom == null) { continue; } var rowDt = db.tb_BomDTs.Where(x => x.BomNo == bom.BomNo).ToList(); var exYield = 100 - bom.YieldOperation.ToDecimal(); foreach (var r in rowDt) { var itemA = db.mh_Items.Where(x => x.InternalNo == r.Component).FirstOrDefault(); if (itemA == null) { continue; } var useQ = Math.Round(m.Qty * r.Qty, 2); decimal yieldItem = 0.00m; if (r.chk_YieldOperation.ToBool()) { yieldItem = Math.Ceiling((exYield / 100) * useQ); } useQ += yieldItem; var useQAll = Math.Round(useQ * r.PCSUnit.ToDecimal(), 2); var dt = new mh_ProductionOrderRM { Active = true, GroupType = itemA.GroupType, InvGroup = itemA.InventoryGroup, ItemName = itemA.InternalName, ItemNo = itemA.InternalNo, JobNo = m.JobNo, PCSUnit = r.PCSUnit.ToDecimal(), Qty = useQ, OutQty = useQAll, Type = itemA.Type, UOM = r.Unit, CostOverall = 0.00m, }; db.mh_ProductionOrderRMs.InsertOnSubmit(dt); db.SubmitChanges(); } //save Capacity Load --mh_CapacityLoad_TEMP <---> mh_CapacityLoad var capaList = db.mh_CapacityLoad_TEMPs.Where(x => x.DocId == mainNo && x.DocNo == null).ToList(); foreach (var c in capaList) { if (c.DocNo.ToSt() != "") { continue; } var cc = new mh_CapacityLoad { Active = true, Capacity = c.Capacity, CapacityX = c.CapacityX, Date = c.Date, DocId = m.id,//idJob DocNo = m.JobNo, WorkCenterID = c.WorkCenterID, }; db.mh_CapacityLoads.InsertOnSubmit(cc); c.DocId = m.id; c.DocNo = m.JobNo; m.CapacityUseX += c.CapacityX; var co = calOvers.Where(x => x.idDoc == c.DocId && x.idWorkcenter == c.WorkCenterID).FirstOrDefault(); if (co == null) { calOvers.Add(new CalOverhead { CapacityX = c.CapacityX, idDoc = c.DocId, idWorkcenter = c.WorkCenterID }); } else { co.CapacityX += c.CapacityX; } } db.SubmitChanges(); //save Calendar Load --mh_CalendarLoad_TEMP <---> mh_CalendarLoad var calList = db.mh_CalendarLoad_TEMPs.Where(x => x.idJob == mainNo && x.idAbs == -1).ToList(); foreach (var c in calList) { var cc = new mh_CalendarLoad { Date = c.Date, EndingTime = c.EndingTime, idAbs = (c.idAbs >= 0) ? c.idAbs : 0, idCal = c.idCal, idHol = c.idHol, idJob = m.id, //idJob idRoute = c.idRoute, idWorkcenter = c.idWorkcenter, StartingTime = c.StartingTime, }; db.mh_CalendarLoads.InsertOnSubmit(cc); c.idJob = m.id; c.idAbs = 0; var co = calOvers.Where(x => x.idWorkcenter == c.idWorkcenter && x.idDoc == c.idJob && x.idRoute == 0).FirstOrDefault(); if (co != null) { co.idRoute = c.idRoute; } } db.SubmitChanges(); //save Cost Overhead var manuTime = 1; var manu = db.mh_ManufacturingSetups.FirstOrDefault(); if (manu != null) { if (manu.ShowCapacityInUOM == 2) //Hour { manuTime = 60; } else if (manu.ShowCapacityInUOM == 3) //Day { manuTime = (24 * 60); } } foreach (var co in calOvers) { var rt = db.mh_RoutingDTs.Where(x => x.id == co.idRoute && x.idWorkCenter == co.idWorkcenter && x.Active).FirstOrDefault(); if (rt != null) { var costAll = Math.Round(rt.UnitCost / manuTime, 2); m.CostOverhead += Math.Round(costAll * co.CapacityX, 2); } } //move stock reserve from old CustomerPO -> new CustomerPO int idCstmPODt = item.Cells["idRef"].Value.ToInt(); var sr = db.mh_StockReserves.Where(x => x.idCstmPODt == idCstmPODt).ToList(); foreach (var s in sr) { baseClass.moveReserveStock(s.idCstmPODt_Free, s.idCstmPODt, s.id_tb_Stock, s.ReserveQty); } //delete gridPlan int id = item.Cells["id"].Value.ToInt(); var d = db.mh_PlanningMPS_TEMPs.Where(x => x.id == id).ToList(); if (d.Count > 0) { db.mh_PlanningMPS_TEMPs.DeleteAllOnSubmit(d); db.SubmitChanges(); } ////Send to Approve //db.sp_062_mh_ApproveList_Add(m.JobNo, "Job Req", ClassLib.Classlib.User); } DataLoad(); baseClass.Info("Generate Job Order Sheet complete.\n"); } } catch (Exception ex) { baseClass.Error(ex.Message); } finally { this.Cursor = Cursors.Default; } }