public CostDbItemSearchMaterial(string q, int categoryID0, int categoryID1, int categoryID2)
        {
            Values = new List <MyKeyValuePair>();
            if (categoryID0 == 0 && q.Length < 3)
            {
                return;
            }

            var db = new SpecificationDbEntities();
            var qs = new QueryStringForMaterialSearch(q);
            List <Model.Material> materials;

            if (categoryID0 > 0)
            {
                materials = db.Materials.Where(x => x.CategoryID0 == categoryID0 &&
                                               (categoryID1 == 0 | x.CategoryID1 == categoryID1) &&
                                               (categoryID2 == 0 | x.CategoryID2 == categoryID2))
                            .ToList();
            }
            else
            {
                materials = db.Materials.Where(x => x.MaterialCategory1.CategoryName.Contains(qs.Q0)).ToList();
            }

            Values = GetMaterialsFilteredByQueryString(qs, materials);
        }
        private List <MyKeyValuePair> GetStandardItemsFilteredByQueryString(QueryStringForMaterialSearch qString, IEnumerable <EST_Cost_Template> options)
        {
            var values = new List <MyKeyValuePair>();

            foreach (var opt in options)
            {
                var name = opt.Name;
                var b0   = true;
                var b1   = true;
                var b2   = true;

                if (qString.QLength >= 1)
                {
                    if (!name.ToUpper().Contains(qString.Q0))
                    {
                        b0 = false;
                    }
                }
                if (qString.QLength >= 2)
                {
                    if (!name.ToUpper().Contains(qString.Q1))
                    {
                        b1 = false;
                    }
                }
                if (qString.QLength >= 3)
                {
                    if (!name.ToUpper().Contains(qString.Q2))
                    {
                        b2 = false;
                    }
                }
                if (!(b0 & b1 & b2))
                {
                    continue;
                }

                var value = new MyKeyValuePair()
                {
                    Value = name + "--" + 0.ToString("C2") + "/" + "EA",
                    Key   = opt.TemplateID,
                };
                values.Add(value);
            }
            return(values);
        }
        private List <MyKeyValuePair> GetMaterialsFilteredByQueryString(QueryStringForMaterialSearch qString, IEnumerable <Model.Material> materials)
        {
            var values = new List <MyKeyValuePair>();

            foreach (var m in materials)
            {
                var name = MaterialCommon.GetMaterialName(m);
                var b0   = true;
                var b1   = true;
                var b2   = true;

                if (qString.QLength >= 1)
                {
                    if (!name.ToUpper().Contains(qString.Q0))
                    {
                        b0 = false;
                    }
                }
                if (qString.QLength >= 2)
                {
                    if (!name.ToUpper().Contains(qString.Q1))
                    {
                        b1 = false;
                    }
                }
                if (qString.QLength >= 3)
                {
                    if (!name.ToUpper().Contains(qString.Q2))
                    {
                        b2 = false;
                    }
                }
                if (!(b0 & b1 & b2))
                {
                    continue;
                }
                var value = new MyKeyValuePair()
                {
                    Value = name + "--" + m.Price.ToString("C2") + "/" + m.MaterialPriceUnit.UnitName,
                    Key   = m.MaterialID,
                };
                values.Add(value);
            }
            return(values);
        }
        public CostDbItemSearchStandardItem(string q, int estItemID)
        {
            var db        = new SpecificationDbEntities();
            var quoteItem = db.EST_Item.Find(estItemID);
            var productID = quoteItem.ProductID;
            var options   = db.EST_Cost_Template.Where(x => x.ProductID == productID).ToList();

            if (MyConvert.IsNullString(q))
            {
                Values = options.Select(x => new MyKeyValuePair()
                {
                    Value = x.Name + "--" + 0.ToString("C2") + "/" + "EA",
                    Key   = x.TemplateID,
                }).ToList();
            }
            else
            {
                var qs = new QueryStringForMaterialSearch(q);
                Values = GetStandardItemsFilteredByQueryString(qs, options);
            }
        }