Пример #1
0
        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);
        }
Пример #2
0
        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;
            }
        }