示例#1
0
        private static TerritorialUsluga FindParent(DevExpress.ExpressApp.IObjectSpace objSpace, string code)
        {
            TerritorialUsluga parent = null;

            // если ищем категорию услуги с длиной кода 6
            if (code.Length > 5)
            {
                parent = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", code.Substring(0, 5)));
                if (parent != null)
                {
                    return(parent);
                }
            }

            // если не найден родитель в категории с кодами, длина которых = 5
            // или ищем категорию для подкатегории (длина 5)
            if (code.Length > 4)
            {
                parent = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", code.Substring(0, 4)));
                if (parent != null)
                {
                    return(parent);
                }
            }

            // если не найден родитель в категории с кодами, длина которых = 4 или 5
            // или ищем категорию для подкатегории (длина 4 или 5)

            if (code.Length > 3)
            {
                parent = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", code.Substring(0, 3)));
                if (parent != null)
                {
                    return(parent);
                }
            }

            // родитель не найден
            return(null);
        }
示例#2
0
        /// <summary>
        /// Добавляет в базу классификаторы из файла XML
        /// </summary>
        /// <param name="updater">Пространство объектов ObjectSpace</param>
        /// <param name="xmlPath">Путь до файла классификатора</param>
        public static void UpdateDbFromXml(DevExpress.ExpressApp.IObjectSpace objSpace, string xmlPath)
        {
            List <TerrUslTemp> list = TerritorialUsluga.GetListFromXML(xmlPath);

            /*
             * Длина кода услуги различается (есть 3, 4, 5 и 6-и значные коды)
             * Услуга с меньшим кодом является категорией других, 4х, 5-и значные - подкатегории
             */

            var cat3 = list.Where(t => t.Code.Length == 3);
            var cat4 = list.Where(t => t.Code.Length == 4);
            var cat5 = list.Where(t => t.Code.Length == 5);
            var cat6 = list.Where(t => t.Code.Length == 6);

            int createdCount = 0;

            foreach (var cat in cat3)
            {
                var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code));
                if (terrUsl == null)
                {
                    terrUsl = objSpace.CreateObject <TerritorialUsluga>();
                    terrUsl.CopyValueFrom(cat);
                    createdCount++;
                }
            }

            if (createdCount != 0)
            {
                objSpace.CommitChanges();
            }

            createdCount = 0;
            foreach (var cat in cat4)
            {
                var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code));
                if (terrUsl == null)
                {
                    terrUsl = objSpace.CreateObject <TerritorialUsluga>();
                    terrUsl.CopyValueFrom(cat);
                    createdCount++;

                    var parent = TerritorialUsluga.FindParent(objSpace, cat.Code);
                    if (parent != null)
                    {
                        terrUsl.parent = parent;
                        parent.children.Add(terrUsl);
                    }
                }
            }

            if (createdCount != 0)
            {
                objSpace.CommitChanges();
            }

            createdCount = 0;
            foreach (var cat in cat5)
            {
                var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code));
                if (terrUsl == null)
                {
                    terrUsl = objSpace.CreateObject <TerritorialUsluga>();
                    terrUsl.CopyValueFrom(cat);
                    createdCount++;

                    var parent = TerritorialUsluga.FindParent(objSpace, cat.Code);
                    if (parent != null)
                    {
                        terrUsl.parent = parent;
                        parent.children.Add(terrUsl);
                    }
                }
            }

            if (createdCount != 0)
            {
                objSpace.CommitChanges();
            }

            createdCount = 0;
            foreach (var cat in cat6)
            {
                var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code));
                if (terrUsl == null)
                {
                    terrUsl = objSpace.CreateObject <TerritorialUsluga>();
                    terrUsl.CopyValueFrom(cat);
                    createdCount++;

                    var parent = TerritorialUsluga.FindParent(objSpace, cat.Code);
                    if (parent != null)
                    {
                        terrUsl.parent = parent;
                        parent.children.Add(terrUsl);
                    }
                }
            }

            if (createdCount != 0)
            {
                objSpace.CommitChanges();
            }
        }