private void Initial()
        {
            using (var db = new TimeContext())
            {
                List <FixtureTB> fixture = db.Fixtures.Where(item => item.FxCode == this.fixtureCode).ToList();
                List <ProdTB>    product = db.Prod.Where(item => item.ProdCode == this.productCode).ToList();
                List <ProdFamTB> prodfam = db.ProdFam.Where(item => item.FamCode == this.ProdFamCode).ToList();



                foreach (var workcenter in product)
                {
                    ProdTime[workcenter.WorkCenter.ToString()] = 0;
                }
                foreach (var workcenter in fixture)
                {
                    ProdTime[workcenter.WorkCenter.ToString()] = 0;
                }
                foreach (var workcenter in prodfam)
                {
                    ProdTime[workcenter.WorkCenter.ToString()] = 0;
                }
            }
        }
        public ProductClass(string ProductCode)
        {
            var DriveWorkdb = new AXISAutomation.Tools.DBConnection.AXIS_AutomationEntities();

            this.BOM = new _BOM(ProductCode, DriveWorkdb);
            bool morepage;
            var  BO = UD30BO.GetRows(string.Format("Key1 = 'PRODUCTID' and key2 = '{0}'", this.BOM.GetselectedproductID_Category), "", 0, 0, out morepage);

            this.productCode = BO.UD03[0]["Key2"].ToString();
            this.fixtureCode = BO.UD03[0]["Character03"].ToString();
            this.ProdFamCode = BO.UD03[0]["Key3"].ToString();


            string optic           = this.BOM.GetSelectedOpticsDirect_Category.ToString();
            string mounting        = this.BOM.GetSelectedMounting_Category.ToString();
            string driver          = this.BOM.GetSelectedDriver_Category;
            string defaultMounting = "-";
            var    x      = (this.BOM.GetSelectedLength_Category.ToString()).Replace("'", "");
            int    length = Int32.Parse(x);

            lengthParam.Add(null);



            List <string> sectionType = new List <string>();

            if (length < 12)
            {
                lengthParam.Add(length);
                sectionType.Add("Complete Section");
                using (var db = new TimeContext())
                {
                    int dummy;
                    var lengthtest = db.Options.Where(r => r.OptionName == "Length" && r.sectionLength == length).FirstOrDefault();
                    var cartridge  = (from row in lengthtest.Params where !int.TryParse(row.ParamValue, out dummy) select row.ParamValue).ToList();
                    sectionType.AddRange(cartridge);
                }
            }
            else
            {
                using (var db = new TimeContext())
                {
                    int        dummy;
                    var        lengthtest = db.Options.Where(r => r.OptionName == "Length" && r.sectionLength == length).FirstOrDefault();
                    var        cartridge  = (from row in lengthtest.Params where !int.TryParse(row.ParamValue, out dummy) select row.ParamValue).ToList();
                    List <int> Length     = (from row in lengthtest.Params where int.TryParse(row.ParamValue, out dummy) select Int32.Parse(row.ParamValue)).ToList();
                    sectionType.AddRange(cartridge);
                    var newList = Length.Select(i => (int?)i).ToList();
                    lengthParam.AddRange(newList);
                }
            }


            ParamValue.AddRange(new List <string>
            {
                optic,
                mounting,
                defaultMounting,
                driver, //Driver
            });
            ParamValue.AddRange(sectionType);
            this.Initial();
            this.retrieveTime();
        }
        private void retrieveTime()
        {
            for (int i = 0; i < this.lengthParam.Count; i++)
            {
                if (this.lengthParam[i] <= 4)
                {
                    this.lengthParam[i] = 4;
                }
                else if (this.lengthParam[i] <= 8)
                {
                    this.lengthParam[i] = 8;
                }
                else
                {
                    this.lengthParam[i] = 12;
                }
            }


            foreach (var length in this.lengthParam)
            {
                using (var db = new TimeContext())
                {
                    List <FixtureTB> fixture = db.Fixtures.Where(item => item.FxCode == this.fixtureCode).ToList();
                    List <ProdTB>    product = db.Prod.Where(item => item.ProdCode == this.productCode).ToList();
                    List <ProdFamTB> prodfam = db.ProdFam.Where(item => item.FamCode == this.ProdFamCode).ToList();

                    var ParamNames = db.Params.Select(m => m.ParamName).Distinct().ToList();
                    this.ParamNames = ParamNames;


                    foreach (var workcenter in product)
                    {
                        List <string> usedOption = new List <string>();

                        foreach (var item in workcenter.Options.Where(item => !usedOption.Contains(item.OptionName) &&
                                                                      item.sectionLength == length))
                        {
                            if (item.Params.Count == 0)
                            {
                                usedOption.Add(item.OptionName);
                                ProdTime[workcenter.WorkCenter.ToString()] += item.ProdTime;
                                continue;
                            }


                            var check = item.Params.Where(r => this.ParamNames.Contains(r.ParamName) && ParamValue.Contains(r.ParamValue)).ToList();
                            if (check.Count > 0)
                            {
                                usedOption.Add(item.OptionName);
                                ProdTime[workcenter.WorkCenter.ToString()] += item.ProdTime;
                            }
                        }
                    }

                    foreach (var workcenter in fixture)
                    {
                        List <string> usedOption = new List <string>();

                        foreach (var item in workcenter.Options.Where(item => !usedOption.Contains(item.OptionName) &&
                                                                      item.sectionLength == length))
                        {
                            var check = item.Params.Where(r => this.ParamNames.Contains(r.ParamName) && ParamValue.Contains(r.ParamValue)).ToList();
                            if (check.Count > 0)
                            {
                                usedOption.Add(item.OptionName);
                                ProdTime[workcenter.WorkCenter.ToString()] += item.ProdTime;
                            }
                        }
                    }

                    foreach (var workcenter in prodfam)
                    {
                        List <string> usedOption = new List <string>();

                        foreach (var item in workcenter.Options.Where(item => !usedOption.Contains(item.OptionName) &&
                                                                      item.sectionLength == length))
                        {
                            var check = item.Params.Where(r => this.ParamNames.Contains(r.ParamName) && ParamValue.Contains(r.ParamValue)).ToList();
                            if (check.Count > 0)
                            {
                                usedOption.Add(item.OptionName);
                                ProdTime[workcenter.WorkCenter.ToString()] += item.ProdTime;
                            }
                        }
                    }
                }
            }
        }