예제 #1
0
        public static Address GetAddressByOkato(IObjectSpace objectSpace, string okato)
        {
            var address = new Address(((XPObjectSpace)objectSpace).Session);

            var kladr = Kladr.GetKladr(objectSpace, okato);

            if (kladr == null)
            {
                return(null);
            }

            switch (kladr.Level)
            {
            case 1:
                address.Level1 = kladr;
                break;

            case 2:
                address.Level2 = kladr;
                break;

            case 3:
                address.Level3 = kladr;
                break;

            case 4:
                address.Level4 = kladr;
                break;
            }

            return(address);
        }
예제 #2
0
        private Kladr SetFieldByLevel(int level, Kladr newValue)
        {
            switch (level)
            {
            case 1:
                this.level1 = newValue;
                OnChanged("Level1");
                break;

            case 2:
                this.level2 = newValue;
                OnChanged("Level2");
                break;

            case 3:
                this.level3 = newValue;
                OnChanged("Level3");
                break;

            case 4:
                this.level4 = newValue;
                OnChanged("Level4");
                break;
            }
            return(null);
        }
예제 #3
0
        private void CheckAndRefreshAddress(Kladr newValue)
        {
            if (newValue == null)
            {
                return;
            }
            if (newValue.Level == 0)
            {
                return;
            }

            // определяем какое поле было задано
            int level = newValue.Level;

            // обнуляем вышестоящие поля
            for (int i = level - 1; i > 0; i--)
            {
                var field = GetFieldByLevel(i);
                field = null;
            }

            // проставляем новые значения
            var temp = newValue.Parent;

            while (temp != null)
            {
                SetFieldByLevel(temp.Level, temp);
                temp = temp.Parent;
            }

            // проверяем, что нижестоящие поля содержатся в новом значении, если нет - обнулить значения
            var parent = newValue;

            for (int i = level + 1; i < 5; i++)
            {
                var field = GetFieldByLevel(i);
                if (field != null)
                {
                    if (field.Parent != parent)
                    {
                        SetFieldByLevel(i, null);
                    }
                    else
                    {
                        parent = field;
                    }
                }
            }

            if (Street != null && (Street.City != GetFieldByLevel(3)) && (Street.City != GetFieldByLevel(4)))
            {
                Street = null;
            }

            // обновляем критерии
            UpdateCriterias(level);
        }
예제 #4
0
        public override void AfterConstruction()
        {
            base.AfterConstruction();

            this.Country = Session.FindObject <Country>(CriteriaOperator.Parse("ShortName='РОССИЯ'"));
            this.level1  = null;
            this.level2  = null;
            this.level3  = null;
            this.level4  = null;
            this.street  = null;
        }
예제 #5
0
        public void Copy(Address address)
        {
            this.level1 = address.level1;
            this.level2 = address.level2;
            this.level3 = address.level3;
            this.level4 = address.level4;

            this.street = address.street;
            this.House  = address.House;
            this.Build  = address.Build;
            this.Flat   = address.Flat;
        }
예제 #6
0
파일: Kladr.cs 프로젝트: ewin66/Registrator
        /// <summary>
        /// Строковый формат
        /// </summary>
        /// <returns>Название объекта</returns>
        public override string ToString()
        {
            // Собираем полный адрес на основе ссылки на родительский элемент
            string result = string.Empty;
            Kladr  kladr  = this;

            if (kladr.Level != 5)
            {
                while (kladr != null)
                {
                    result = (kladr.Type != null ? kladr.Type.ShortName + " " : string.Empty) + kladr.Name +
                             (kladr != this ? ", " : string.Empty) + result;
                    kladr = kladr.Parent;
                }
            }
            else
            {
                result = (kladr.Type != null ? kladr.Type.ShortName + " " : string.Empty) + kladr.Name;
            }
            return(result);
        }
예제 #7
0
파일: Kladr.cs 프로젝트: ewin66/Registrator
        /// <summary>
        /// Получить элемент КЛАДР-а
        /// </summary>
        /// <param name="level">Уровень</param>
        /// <returns>Элемент КЛАДР-а</returns>
        public Kladr GetElementKladr(int level)
        {
            Kladr kladr = this;

            if (kladr == null)
            {
                return(null);
            }
            while (true)
            {
                if (kladr.Level == level)
                {
                    return(kladr);
                }
                kladr = kladr.Parent;
                if (kladr == null)
                {
                    return(null);
                }
            }
        }