public HttpResponseMessage SaveNUpdateBOM(object[] data)
        {
            string result = "";

            try
            {
                PrdBOMMaster objPrdBOMMaster = JsonConvert.DeserializeObject <PrdBOMMaster>(data[0].ToString());

                int menuID = Convert.ToInt16(data[1]);
                List <PrdBOMDying> lstPrdBOMDying = JsonConvert.DeserializeObject <List <PrdBOMDying> >(data[2].ToString());
                List <PrdBOMSize>  lstPrdBOMSize  = JsonConvert.DeserializeObject <List <PrdBOMSize> >(data[3].ToString());

                if (ModelState.IsValid && objPrdBOMMaster != null && objPrdBOMMaster.BOMDate.ToString() != "" && menuID != 0)
                {
                    result = objBillOfMaterial.SaveNUpdateBOM(objPrdBOMMaster, lstPrdBOMDying, lstPrdBOMSize, menuID);
                }
                else
                {
                    result = "";
                }
            }
            catch (Exception e)
            {
                e.ToString();
                result = "";
            }
            return(Request.CreateResponse(HttpStatusCode.OK, result));
        }
        public string DeleteBOM(vmCmnParameters objcmnParam, Int64 bomID)
        {
            _ctxCmn = new ERP_Entities();
            string result = "";

            if (bomID > 0)
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    try
                    {
                        // Int64 bomID = objPrdBOMMaster.BOMID;
                        IEnumerable <PrdBOMMaster> lstPrdBOMMaster = (from qcm in _ctxCmn.PrdBOMMasters.Where(m => m.BOMID == bomID && m.CompanyID == objcmnParam.loggedCompany) select qcm).ToList();
                        PrdBOMMaster objBOMMaster = new PrdBOMMaster();
                        foreach (PrdBOMMaster bms in lstPrdBOMMaster)
                        {
                            bms.DeleteBy  = objcmnParam.loggeduser;
                            bms.DeleteOn  = DateTime.Now;
                            bms.DeletePc  = HostService.GetIP();
                            bms.IsDeleted = true;
                            objBOMMaster  = bms;
                        }

                        List <PrdBOMDying> lstPrdBOMDying = (from alD in _ctxCmn.PrdBOMDyings.Where(m => m.BOMID == bomID && m.CompanyID == objcmnParam.loggedCompany) select alD).ToList();
                        List <PrdBOMDying> lstBOMDying    = new List <PrdBOMDying>();
                        foreach (PrdBOMDying qcdt in lstPrdBOMDying)
                        {
                            PrdBOMDying objDyingDetail = (from qcdetl in _ctxCmn.PrdBOMDyings.Where(m => m.BOMDyingID == qcdt.BOMDyingID) select qcdetl).FirstOrDefault();

                            objDyingDetail.DeleteBy  = objcmnParam.loggeduser;
                            objDyingDetail.DeleteOn  = DateTime.Now;
                            objDyingDetail.DeletePc  = HostService.GetIP();
                            objDyingDetail.IsDeleted = true;
                            lstBOMDying.Add(objDyingDetail);
                        }

                        List <PrdBOMSize> lstPrdBOMSize = (from als in _ctxCmn.PrdBOMSizes.Where(m => m.BOMID == bomID && m.CompanyID == objcmnParam.loggedCompany) select als).ToList();
                        List <PrdBOMSize> lstBOMSize    = new List <PrdBOMSize>();
                        foreach (PrdBOMSize qsiz in lstPrdBOMSize)
                        {
                            PrdBOMSize objSizeDetail = (from qszdetl in _ctxCmn.PrdBOMSizes.Where(m => m.BOMSizeID == qsiz.BOMSizeID) select qszdetl).FirstOrDefault();

                            objSizeDetail.DeleteBy  = objcmnParam.loggeduser;
                            objSizeDetail.DeleteOn  = DateTime.Now;
                            objSizeDetail.DeletePc  = HostService.GetIP();
                            objSizeDetail.IsDeleted = true;
                            lstBOMSize.Add(objSizeDetail);
                        }

                        _ctxCmn.SaveChanges();
                        transaction.Complete();
                        result = lstPrdBOMMaster.FirstOrDefault().BOMNO.ToString();
                    }
                    catch (Exception e)
                    {
                        e.ToString();
                        result = "";
                    }
                }
            }
            return(result);
        }
        public string SaveNUpdateBOM(PrdBOMMaster objPrdBOMMaster, List <PrdBOMDying> lstPrdBOMDying, List <PrdBOMSize> lstPrdBOMSize, int menuID)
        {
            _ctxCmn = new ERP_Entities();
            GenericFactory_EF_CmnCombo = new CmnCombo_EF();
            string result = "";

            if (objPrdBOMMaster.BOMID > 0)
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    try
                    {
                        Int64 bomID = objPrdBOMMaster.BOMID;
                        IEnumerable <PrdBOMMaster> lstPrdBOMMaster = (from qcm in _ctxCmn.PrdBOMMasters.Where(m => m.BOMID == bomID && m.CompanyID == objPrdBOMMaster.CompanyID) select qcm).ToList();
                        PrdBOMMaster objBOMMaster = new PrdBOMMaster();
                        foreach (PrdBOMMaster bms in lstPrdBOMMaster)
                        {
                            bms.UpdateBy    = objPrdBOMMaster.CreateBy;
                            bms.UpdateOn    = DateTime.Now;
                            bms.UpdatePc    = HostService.GetIP();
                            bms.BOMDate     = objPrdBOMMaster.BOMDate;
                            bms.Description = objPrdBOMMaster.Description;
                            objBOMMaster    = bms;
                        }

                        List <PrdBOMDying> lstBOMDying = new List <PrdBOMDying>();

                        List <PrdBOMDying> lstBOMDyingNewAdd = new List <PrdBOMDying>();
                        // for dying

                        long FirstDigit  = 0;
                        long OtherDigits = 0;
                        long nextDyingID = Convert.ToInt16(GenericFactory_EF_CmnCombo.getMaxID("PrdBOMDying"));
                        FirstDigit  = Convert.ToInt64(nextDyingID.ToString().Substring(0, 1));
                        OtherDigits = Convert.ToInt64(nextDyingID.ToString().Substring(1, nextDyingID.ToString().Length - 1));



                        foreach (PrdBOMDying qcdt in lstPrdBOMDying)
                        {
                            if (qcdt.BOMDyingID > 0)
                            {
                                PrdBOMDying objDyingDetail = (from qcdetl in _ctxCmn.PrdBOMDyings.Where(m => m.BOMDyingID == qcdt.BOMDyingID) select qcdetl).FirstOrDefault();

                                objDyingDetail.UpdateBy = objPrdBOMMaster.CreateBy;
                                objDyingDetail.UpdateOn = DateTime.Now;
                                objDyingDetail.UpdatePc = HostService.GetIP();
                                objDyingDetail.Qty      = qcdt.Qty;
                                lstBOMDying.Add(objDyingDetail);
                            }

                            //end  for  new item added when update  dying

                            else if (qcdt.BOMDyingID == 0)
                            {
                                PrdBOMDying objDyingDetailNewAdded = new PrdBOMDying();

                                objDyingDetailNewAdded.BOMDyingID      = Convert.ToInt64(FirstDigit + "" + OtherDigits);
                                objDyingDetailNewAdded.BOMID           = bomID;// qcdt.BOMID;
                                objDyingDetailNewAdded.Qty             = qcdt.Qty;
                                objDyingDetailNewAdded.DyingChemicalID = qcdt.DyingChemicalID;
                                objDyingDetailNewAdded.IsDeleted       = false;
                                objDyingDetailNewAdded.UnitID          = qcdt.UnitID;
                                objDyingDetailNewAdded.CreateBy        = objPrdBOMMaster.CreateBy;
                                objDyingDetailNewAdded.CompanyID       = objPrdBOMMaster.CompanyID;
                                objDyingDetailNewAdded.CreateOn        = DateTime.Now;
                                objDyingDetailNewAdded.CreatePc        = HostService.GetIP();
                                lstBOMDyingNewAdd.Add(objDyingDetailNewAdded);
                                OtherDigits++;
                            }
                            //star  for  new item added when update  dying
                        }


                        List <PrdBOMSize> lstBOMSize       = new List <PrdBOMSize>();
                        List <PrdBOMSize> lstBOMSizeNewAdd = new List <PrdBOMSize>();

                        // for Sizing


                        long FirstDigitSizing  = 0;
                        long OtherDigitsSizing = 0;
                        long nextSizingID      = Convert.ToInt16(GenericFactory_EF_CmnCombo.getMaxID("PrdBOMSize"));
                        FirstDigitSizing  = Convert.ToInt64(nextSizingID.ToString().Substring(0, 1));
                        OtherDigitsSizing = Convert.ToInt64(nextSizingID.ToString().Substring(1, nextSizingID.ToString().Length - 1));


                        foreach (PrdBOMSize qsiz in lstPrdBOMSize)
                        {
                            if (qsiz.BOMSizeID > 0)
                            {
                                PrdBOMSize objSizeDetail = (from qszdetl in _ctxCmn.PrdBOMSizes.Where(m => m.BOMSizeID == qsiz.BOMSizeID) select qszdetl).FirstOrDefault();

                                objSizeDetail.UpdateBy = objPrdBOMMaster.CreateBy;
                                objSizeDetail.UpdateOn = DateTime.Now;
                                objSizeDetail.UpdatePc = HostService.GetIP();
                                objSizeDetail.Qty      = qsiz.Qty;
                                lstBOMSize.Add(objSizeDetail);
                            }

                            //end  for  new item added when update  siz

                            else if (qsiz.BOMSizeID == 0)
                            {
                                PrdBOMSize objSiDetailNewAdded = new PrdBOMSize();
                                objSiDetailNewAdded.BOMSizeID      = Convert.ToInt64(FirstDigitSizing + "" + OtherDigitsSizing);
                                objSiDetailNewAdded.BOMID          = bomID; //qsiz.BOMID;
                                objSiDetailNewAdded.Qty            = qsiz.Qty;
                                objSiDetailNewAdded.IsDeleted      = false;
                                objSiDetailNewAdded.UnitID         = qsiz.UnitID;
                                objSiDetailNewAdded.SizeChemicalID = qsiz.SizeChemicalID;
                                objSiDetailNewAdded.CreateBy       = objPrdBOMMaster.CreateBy;
                                objSiDetailNewAdded.CompanyID      = objPrdBOMMaster.CompanyID;
                                objSiDetailNewAdded.CreateOn       = DateTime.Now;
                                objSiDetailNewAdded.CreatePc       = HostService.GetIP();
                                lstBOMSizeNewAdd.Add(objSiDetailNewAdded);
                                OtherDigitsSizing++;
                            }
                            //star  for  new item added when update  siz
                        }

                        //  for new add  when update

                        if (lstBOMDyingNewAdd.Count > 0)
                        {
                            _ctxCmn.PrdBOMDyings.AddRange(lstBOMDyingNewAdd);
                            //............Update MaxID.................//
                            GenericFactory_EF_CmnCombo.updateMaxID("PrdBOMDying", Convert.ToInt64(FirstDigit + "" + (OtherDigits - 1)));
                            _ctxCmn.SaveChanges();
                        }
                        if (lstBOMSizeNewAdd.Count > 0)
                        {
                            _ctxCmn.PrdBOMSizes.AddRange(lstBOMSizeNewAdd);
                            //............Update MaxID.................//
                            GenericFactory_EF_CmnCombo.updateMaxID("PrdBOMSize", Convert.ToInt64(FirstDigitSizing + "" + (OtherDigitsSizing - 1)));
                            _ctxCmn.SaveChanges();
                        }

                        _ctxCmn.SaveChanges();
                        transaction.Complete();
                        result = objPrdBOMMaster.BOMNO.ToString();
                    }
                    catch (Exception e)
                    {
                        e.ToString();
                        result = "";
                    }
                }
            }
            else
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    try
                    {
                        //...........START  new maxId...............//
                        long NextId = Convert.ToInt16(GenericFactory_EF_CmnCombo.getMaxID("PrdBOMMaster"));

                        // for dying

                        long FirstDigit  = 0;
                        long OtherDigits = 0;
                        long nextDyingID = Convert.ToInt16(GenericFactory_EF_CmnCombo.getMaxID("PrdBOMDying"));
                        FirstDigit  = Convert.ToInt64(nextDyingID.ToString().Substring(0, 1));
                        OtherDigits = Convert.ToInt64(nextDyingID.ToString().Substring(1, nextDyingID.ToString().Length - 1));


                        // for Sizing

                        long FirstDigitSizing  = 0;
                        long OtherDigitsSizing = 0;
                        long nextSizingID      = Convert.ToInt16(GenericFactory_EF_CmnCombo.getMaxID("PrdBOMSize"));
                        FirstDigitSizing  = Convert.ToInt64(nextSizingID.ToString().Substring(0, 1));
                        OtherDigitsSizing = Convert.ToInt64(nextSizingID.ToString().Substring(1, nextSizingID.ToString().Length - 1));

                        //..........END new  maxId....................//


                        //......... START for custom code........... //

                        string customCode = "";
                        string CustomNo   = GenericFactory_EF_CmnCombo.getCustomCode(menuID, objPrdBOMMaster.BOMDate ?? DateTime.Now, objPrdBOMMaster.CompanyID, 1, 1);

                        if (CustomNo != "")
                        {
                            customCode = CustomNo;
                        }
                        else
                        {
                            customCode = NextId.ToString();
                        }

                        //.........END for custom code............ //

                        string newBomNo = customCode;
                        objPrdBOMMaster.BOMID     = NextId;
                        objPrdBOMMaster.CreateOn  = DateTime.Now;
                        objPrdBOMMaster.CreatePc  = HostService.GetIP();
                        objPrdBOMMaster.BOMNO     = newBomNo;
                        objPrdBOMMaster.IsDeleted = false;

                        // For Dying

                        List <PrdBOMDying> lstDyingDetail = new List <PrdBOMDying>();
                        foreach (PrdBOMDying sdtl in lstPrdBOMDying)
                        {
                            PrdBOMDying objchDetail = new PrdBOMDying();
                            objchDetail.BOMDyingID      = Convert.ToInt64(FirstDigit + "" + OtherDigits);
                            objchDetail.BOMID           = NextId;
                            objchDetail.Qty             = sdtl.Qty;
                            objchDetail.DyingChemicalID = sdtl.DyingChemicalID;
                            objchDetail.IsDeleted       = false;
                            objchDetail.UnitID          = sdtl.UnitID;
                            objchDetail.CreateBy        = objPrdBOMMaster.CreateBy;
                            objchDetail.CompanyID       = objPrdBOMMaster.CompanyID;
                            objchDetail.CreateOn        = DateTime.Now;
                            objchDetail.CreatePc        = HostService.GetIP();
                            lstDyingDetail.Add(objchDetail);
                            OtherDigits++;
                        }

                        // For Sizing

                        List <PrdBOMSize> lstSizeDetail = new List <PrdBOMSize>();
                        foreach (PrdBOMSize sze in lstPrdBOMSize)
                        {
                            PrdBOMSize objSiDetail = new PrdBOMSize();
                            objSiDetail.BOMSizeID      = Convert.ToInt64(FirstDigitSizing + "" + OtherDigitsSizing);
                            objSiDetail.BOMID          = NextId;
                            objSiDetail.Qty            = sze.Qty;
                            objSiDetail.IsDeleted      = false;
                            objSiDetail.UnitID         = sze.UnitID;
                            objSiDetail.SizeChemicalID = sze.SizeChemicalID;
                            objSiDetail.CreateBy       = objPrdBOMMaster.CreateBy;
                            objSiDetail.CompanyID      = objPrdBOMMaster.CompanyID;
                            objSiDetail.CreateOn       = DateTime.Now;
                            objSiDetail.CreatePc       = HostService.GetIP();
                            lstSizeDetail.Add(objSiDetail);
                            OtherDigitsSizing++;
                        }


                        _ctxCmn.PrdBOMMasters.Add(objPrdBOMMaster);

                        //............Update MaxID.................//
                        GenericFactory_EF_CmnCombo.updateMaxID("PrdBOMMaster", Convert.ToInt64(NextId));
                        //............Update CustomCode.............//
                        GenericFactory_EF_CmnCombo.updateCustomCode(menuID, objPrdBOMMaster.BOMDate ?? DateTime.Now, objPrdBOMMaster.CompanyID, 1, 1);
                        _ctxCmn.PrdBOMDyings.AddRange(lstDyingDetail);
                        _ctxCmn.PrdBOMSizes.AddRange(lstSizeDetail);
                        //............Update MaxID.................//
                        GenericFactory_EF_CmnCombo.updateMaxID("PrdBOMDying", Convert.ToInt64(FirstDigit + "" + (OtherDigits - 1)));
                        GenericFactory_EF_CmnCombo.updateMaxID("PrdBOMSize", Convert.ToInt64(FirstDigitSizing + "" + (OtherDigitsSizing - 1)));
                        _ctxCmn.SaveChanges();

                        transaction.Complete();
                        result = newBomNo;
                    }
                    catch (Exception e)
                    {
                        result = "";
                    }
                }
            }
            return(result);
        }