Example #1
0
class HouseInt(Common):
    """
    Интервалы домов
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Интервал домов'
        verbose_name_plural = 'Интервалы домов'

    houseintid = UUIDField('Идентификатор записи интервала домов')
    intguid = UUIDField('Глобальный уникальный идентификатор интервала домов',
                        primary_key=True)
    aoguid = models.ForeignKey(
        AddrObj,
        verbose_name='Идентификатор объекта родительского объекта',
        help_text='(улица, город, населенный пункт и т.п.)',
        on_delete=models.CASCADE)

    intstart = models.PositiveIntegerField('Значение начала интервала')
    intend = models.PositiveIntegerField('Значение окончания интервала')

    intstatus = models.ForeignKey(IntvStat,
                                  verbose_name='Статус интервала',
                                  default=0,
                                  on_delete=models.CASCADE)

    counter = models.PositiveIntegerField('Счетчик записей домов для КЛАДР 4')
Example #2
0
class LandMark(Common):
    """
    Описание мест расположения имущественных объектов
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Место расположения имущественного объекта'
        verbose_name_plural = 'Места расположения имущественных объектов'

    landid = UUIDField('Уникальный идентификатор записи ориентира',
                       unique=True)
    landguid = UUIDField('Глобальный уникальный идентификатор ориентира',
                         primary_key=True)
    aoguid = models.ForeignKey(
        AddrObj,
        verbose_name='Идентификатор записи родительского объекта',
        help_text='(улица, город, населенный пункт и т.п.)',
        on_delete=models.CASCADE)

    location = models.TextField('Месторасположение ориентира')

    cadnum = models.CharField('Кадастровый номер',
                              max_length=100,
                              blank=True,
                              null=True)
Example #3
0
class House(June2016Update):
    """
    Сведения по номерам домов улиц городов и населенных пунктов
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Номер дома'
        verbose_name_plural = 'Номера домов'

    aoguid = models.ForeignKey(AddrObj, verbose_name='Идентификатор записи родительского объекта',
                               help_text='(улица, город, населенный пункт и т.п.)')
    houseguid = UUIDField('Глобальный уникальный идентификатор дома', primary_key=True)
    houseid = UUIDField('Уникальный идентификатор записи дома', unique=True)

    housenum = models.CharField('Номер дома', max_length=20, blank=True, null=True)
    eststatus = models.ForeignKey(EstStat, verbose_name='Признак владения', default=0)
    buildnum = models.CharField('Номер корпуса', max_length=10, blank=True, null=True)
    strucnum = models.CharField('Номер строения', max_length=10, blank=True, null=True)
    strstatus = models.ForeignKey(StrStat, verbose_name='Признак строения', default=0)

    statstatus = models.PositiveSmallIntegerField('Состояние дома')

    regioncode = models.CharField('Код региона', max_length=2, blank=True, null=True)

    counter = models.IntegerField('Счетчик записей домов для КЛАДР 4')
Example #4
0
class LandMark(Common):
    class Meta:
        app_label = 'fias'

    landid = UUIDField()
    landguid = UUIDField(primary_key=True)
    aoguid = models.ForeignKey(AddrObj)

    location = models.TextField()
Example #5
0
class House(June2016Update):
    """
    Сведения по номерам домов улиц городов и населенных пунктов
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Номер дома'
        verbose_name_plural = 'Номера домов'

    aoguid = models.ForeignKey(
        AddrObj,
        verbose_name='Идентификатор записи родительского объекта',
        help_text='(улица, город, населенный пункт и т.п.)',
        on_delete=models.CASCADE)
    houseguid = UUIDField('Глобальный уникальный идентификатор дома',
                          primary_key=True)
    houseid = UUIDField('Уникальный идентификатор записи дома', unique=True)

    housenum = models.CharField('Номер дома',
                                max_length=20,
                                blank=True,
                                null=True)
    eststatus = models.ForeignKey(EstStat,
                                  verbose_name='Признак владения',
                                  default=0,
                                  on_delete=models.CASCADE)
    buildnum = models.CharField('Номер корпуса',
                                max_length=20,
                                blank=True,
                                null=True)
    strucnum = models.CharField('Номер строения',
                                max_length=20,
                                blank=True,
                                null=True)
    strstatus = models.ForeignKey(StrStat,
                                  verbose_name='Признак строения',
                                  default=0,
                                  on_delete=models.CASCADE)

    statstatus = models.PositiveSmallIntegerField('Состояние дома')

    regioncode = models.CharField('Код региона',
                                  max_length=2,
                                  blank=True,
                                  null=True)

    counter = models.IntegerField('Счетчик записей домов для КЛАДР 4')

    def save(self,
             force_insert=False,
             force_update=False,
             using=None,
             update_fields=None):
        if self.eststatus_id is None or self.eststatus_id == '':
            self.eststatus_id = 0
        super(House, self).save(force_insert, force_update, using,
                                update_fields)
Example #6
0
class HouseInt(Common):
    class Meta:
        app_label = 'fias'

    houseintid = UUIDField()
    intguid = UUIDField(primary_key=True)
    aoguid = models.ForeignKey(AddrObj)

    intstart = models.PositiveIntegerField()
    intend = models.PositiveIntegerField()

    intstatus = models.PositiveIntegerField()

    counter = models.PositiveIntegerField()
Example #7
0
class Common(models.Model):
    class Meta:
        abstract = True

    ifnsfl = models.CharField('Код ИФНС ФЗ',
                              max_length=4,
                              blank=True,
                              null=True)
    terrifnsfl = models.CharField('Код территориального участка ИФНС ФЛ',
                                  max_length=4,
                                  blank=True,
                                  null=True)
    ifnsul = models.CharField('Код ИФНС ЮЛ',
                              max_length=4,
                              blank=True,
                              null=True)
    terrifnsul = models.CharField('Код территориального участка ИФНС ЮЛ',
                                  max_length=4,
                                  blank=True,
                                  null=True)

    okato = models.CharField('ОКАТО', max_length=11, blank=True, null=True)
    oktmo = models.CharField('ОКТМО', max_length=11, blank=True, null=True)

    postalcode = models.CharField('Почтовый индекс',
                                  max_length=6,
                                  blank=True,
                                  null=True)

    updatedate = models.DateField('Дата время внесения записи')
    startdate = models.DateField('Начало действия записи')
    enddate = models.DateField('Окончание действия записи')
    normdoc = UUIDField('Внешний ключ на нормативный документ',
                        blank=True,
                        null=True)
Example #8
0
class House(Common):
    class Meta:
        app_label = 'fias'

    aoguid = models.ForeignKey(AddrObj)

    housenum = models.CharField(max_length=20, blank=True, null=True)
    eststatus = models.BooleanField()
    buildnum = models.CharField(max_length=10, blank=True, null=True)
    strucnum = models.CharField(max_length=10, blank=True, null=True)
    strstatus = models.PositiveSmallIntegerField()
    houseguid = UUIDField(primary_key=True)
    houseid = UUIDField()

    statstatus = models.PositiveSmallIntegerField()

    counter = models.IntegerField()
Example #9
0
class AddrObjIndex(models.Model):
    class Meta:
        app_label = 'fias'

    aoguid = UUIDField()
    aolevel = models.PositiveSmallIntegerField()
    scname = models.TextField()
    fullname = models.TextField()
    item_weight = models.PositiveSmallIntegerField(default=64)
Example #10
0
class Stead(June2016Update):
    """
    Сведения о земельных участках
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Земельный участок'
        verbose_name_plural = 'Земельные участки'

    steadguid = UUIDField(
        'Глобальный уникальный идентификатор адресного объекта (земельного участка)',
        primary_key=True)
    parentguid = UUIDField('Идентификатор объекта родительского объекта',
                           blank=True,
                           null=True,
                           db_index=True)
    steadid = UUIDField('Уникальный идентификатор записи', unique=True)
    previd = UUIDField(
        'Идентификатор записи связывания с предыдушей исторической записью',
        blank=True,
        null=True)
    nextid = UUIDField(
        'Идентификатор записи  связывания с последующей исторической записью',
        blank=True,
        null=True)

    number = models.CharField('Номер земельного участка',
                              max_length=120,
                              blank=True,
                              null=True)
    regioncode = models.CharField('Код региона', max_length=2)

    operstatus = models.ForeignKey(
        OperStat,
        verbose_name='Статус действия над записью – причина появления записи',
        default=0,
        on_delete=models.CASCADE)
    livestatus = models.BooleanField('Признак действующего адресного объекта',
                                     default=False)
    counter = models.IntegerField(null=True)

    def __str__(self):
        return self.number
Example #11
0
class NormDoc(models.Model):
    class Meta:
        app_label = 'fias'

    normdocid = UUIDField(primary_key=True)
    docname = models.TextField(blank=True)
    docdate = models.DateField(blank=True, null=True)
    docnum = models.CharField(max_length=20, blank=True, null=True)
    doctype = models.PositiveIntegerField()
    docimgid = models.PositiveIntegerField(blank=True, null=True)
Example #12
0
class HouseBase(IFNS):
    class Meta:
        abstract = True

    postalcode = models.PositiveIntegerField(blank=True, null=True)

    housenum = models.CharField(max_length=20, blank=True, null=True)
    eststatus = models.BooleanField()
    buildnum = models.CharField(max_length=10, blank=True, null=True)
    strucnum = models.CharField(max_length=10, blank=True, null=True)
    strstatus = models.PositiveSmallIntegerField()
    houseguid = UUIDField()
    houseid = UUIDField(primary_key=True)

    startdate = models.DateField()
    enddate = models.DateField()

    statstatus = models.PositiveSmallIntegerField()
    normdoc = UUIDField(blank=True, null=True)

    counter = models.IntegerField()
Example #13
0
class Room(models.Model):
    """
    Классификатор помещений
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Помещение'
        verbose_name_plural = 'Помещения'

    houseguid = models.ForeignKey(House, verbose_name='Идентификатор родительского объекта (дома)', on_delete=models.CASCADE)
    roomguid = UUIDField('Глобальный уникальный идентификатор адресного объекта (помещения)', primary_key=True)
    roomid = UUIDField('Уникальный идентификатор записи.', unique=True)
    previd = UUIDField('Идентификатор записи связывания с предыдушей исторической записью', blank=True, null=True)
    nextid = UUIDField('Идентификатор записи  связывания с последующей исторической записью', blank=True, null=True)
    flatnumber = models.CharField('Номер помещения или офиса', max_length=50)
    flattype = models.IntegerField('Тип помещения')
    roomnumber = models.CharField('Номер комнаты', max_length=50, blank=True, null=True)
    roomtype = models.IntegerField('Тип комнаты', blank=True, null=True)
    regioncode = models.CharField('Код региона', max_length=2)
    postalcode = models.PositiveIntegerField('Почтовый индекс', blank=True, null=True)
    updatedate = models.DateField('Дата  внесения записи')

    startdate = models.DateField('Начало действия записи')
    enddate = models.DateField('Окончание действия записи')

    livestatus = models.BooleanField('Признак действующего адресного объекта', default=False)

    normdoc = UUIDField('Внешний ключ на нормативный документ', blank=True, null=True)

    operstatus = models.ForeignKey(OperStat, verbose_name='Статус действия над записью – причина появления записи',
                                   default=0, on_delete=models.CASCADE)

    cadnum = models.CharField('Кадастровый номер помещения', max_length=100, blank=True, null=True)
    roomcadnum = models.CharField('Кадастровый номер комнаты в помещении', max_length=100, blank=True, null=True)

    def __str__(self):
        return self.flatnumber
Example #14
0
class NormDoc(models.Model):
    """
    Сведения по нормативному документу,
    являющемуся основанием присвоения адресному элементу наименования
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Нормативный документ'
        verbose_name_plural = 'Нормативные документы'

    normdocid = UUIDField(primary_key=True, verbose_name='Идентификатор нормативного документа')
    docname = models.TextField('Наименование документа', blank=True, null=True)
    docdate = models.DateField('Дата документа', blank=True, null=True)
    docnum = models.CharField('Номер документа', max_length=250, blank=True, null=True)
    doctype = models.ForeignKey(NDocType, verbose_name='Тип документа', default=0, on_delete=models.CASCADE)
    docimgid = models.UUIDField('Идентификатор образа (внешний ключ)', blank=True, null=True)
Example #15
0
class Common(models.Model):
    class Meta:
        abstract = True

    ifnsfl = models.PositiveIntegerField(blank=True, null=True)
    terrifnsfl = models.PositiveIntegerField(blank=True, null=True)
    ifnsul = models.PositiveIntegerField(blank=True, null=True)
    terrifnsul = models.PositiveIntegerField(blank=True, null=True)

    okato = models.BigIntegerField(blank=True, null=True)
    oktmo = models.BigIntegerField(blank=True, null=True)

    postalcode = models.PositiveIntegerField(blank=True, null=True)

    updatedate = models.DateField()
    startdate = models.DateField()
    enddate = models.DateField()
    normdoc = UUIDField(blank=True, null=True, auto=False)
Example #16
0
class AddrObjBase(IFNS):
    class Meta:
        abstract = True
        index_together = (
            ('aolevel', 'shortname'),
            ('shortname', 'formalname'),
        )
        ordering = ['aolevel', 'formalname']

    aoguid = UUIDField(primary_key=True)
    parentguid = UUIDField(blank=True, null=True, db_index=True)
    aoid = UUIDField(db_index=True, unique=True)
    previd = UUIDField(blank=True, null=True)
    nextid = UUIDField(blank=True, null=True)

    startdate = models.DateField()
    enddate = models.DateField()

    formalname = models.CharField(max_length=120, db_index=True)
    offname = models.CharField(max_length=120, blank=True, null=True)
    shortname = models.CharField(max_length=10, db_index=True)
    aolevel = models.PositiveSmallIntegerField(db_index=True)
    postalcode = models.PositiveIntegerField(blank=True, null=True)

    #KLADE
    regioncode = models.CharField(max_length=2)
    autocode = models.CharField(max_length=1)
    areacode = models.CharField(max_length=3)
    citycode = models.CharField(max_length=3)
    ctarcode = models.CharField(max_length=3)
    placecode = models.CharField(max_length=3)
    streetcode = models.CharField(max_length=4)
    extrcode = models.CharField(max_length=4)
    sextcode = models.CharField(max_length=3)

    #KLADR
    code = models.CharField(max_length=17, blank=True, null=True)
    plaincode = models.CharField(max_length=15, blank=True, null=True)

    actstatus = models.BooleanField()
    centstatus = models.PositiveSmallIntegerField()
    operstatus = models.PositiveSmallIntegerField()
    currstatus = models.PositiveSmallIntegerField()

    normdoc = UUIDField(blank=True, null=True)
    livestatus = models.BooleanField()

    def __unicode__(self):
        return '{} {}'.format(self.shortname, self.formalname)
Example #17
0
class AddrObj(June2016Update):
    """
    Классификатор адресообразующих элементов
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Адресообразующий элемент'
        verbose_name_plural = 'Адресообразующие элементы'
        index_together = (
            ('aolevel', 'shortname'),
            ('shortname', 'formalname'),
        )
        ordering = ['aolevel', 'formalname']

    aoguid = UUIDField('Глобальный уникальный идентификатор адресного объекта',
                       primary_key=True)
    parentguid = UUIDField('Идентификатор объекта родительского объекта',
                           blank=True,
                           null=True,
                           db_index=True)
    aoid = UUIDField('Уникальный идентификатор записи',
                     db_index=True,
                     unique=True)
    previd = UUIDField(
        'Идентификатор записи связывания с предыдушей исторической записью',
        blank=True,
        null=True)
    nextid = UUIDField(
        'Идентификатор записи  связывания с последующей исторической записью',
        blank=True,
        null=True)

    formalname = models.CharField('Формализованное наименование',
                                  max_length=120,
                                  db_index=True)
    offname = models.CharField('Официальное наименование',
                               max_length=120,
                               blank=True,
                               null=True)
    shortname = models.CharField('Краткое наименование типа объекта',
                                 max_length=10,
                                 db_index=True)
    aolevel = models.PositiveSmallIntegerField('Уровень адресного объекта',
                                               db_index=True)

    # KLADE
    regioncode = models.CharField('Код региона', max_length=2)
    autocode = models.CharField('Код автономии', max_length=1)
    areacode = models.CharField('Код района', max_length=3)
    citycode = models.CharField('Код города', max_length=3)
    ctarcode = models.CharField('Код внутригородского района', max_length=3)
    placecode = models.CharField('Код населенного пункта', max_length=3)
    plancode = models.CharField('Код элемента планировочной структуры',
                                max_length=4)
    streetcode = models.CharField('Код улицы', max_length=4)
    extrcode = models.CharField(
        'Код дополнительного адресообразующего элемента', max_length=4)
    sextcode = models.CharField(
        'Код подчиненного дополнительного адресообразующего элемента',
        max_length=3)

    # KLADR
    code = models.CharField(
        'Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0',
        max_length=17,
        blank=True,
        null=True)
    plaincode = models.CharField(
        'Код адресного объекта из КЛАДР 4.0 одной строкой',
        help_text='Без признака актуальности (последних двух цифр)',
        max_length=15,
        blank=True,
        null=True)

    actstatus = models.BooleanField(
        'Статус исторической записи в жизненном цикле адресного объекта',
        default=False)
    centstatus = models.ForeignKey(CenterSt,
                                   verbose_name='Статус центра',
                                   default=0,
                                   on_delete=models.CASCADE)
    operstatus = models.ForeignKey(
        OperStat,
        verbose_name='Статус действия над записью – причина появления записи',
        default=0,
        on_delete=models.CASCADE)
    currstatus = models.ForeignKey(CurentSt,
                                   verbose_name='Статус актуальности КЛАДР 4',
                                   help_text='последние две цифры в коде',
                                   default=0,
                                   on_delete=models.CASCADE)

    livestatus = models.BooleanField('Признак действующего адресного объекта',
                                     default=False)

    # gnedoy
    parent_address = models.CharField(
        'Полный адрес родителя',
        blank=True,
        default='',
        max_length=150,
        help_text=
        'Сохранненный  в виде текстовой строки адрес родителей из ФИАС')

    def full_name(self, depth=None, formal=False):
        assert isinstance(depth, six.integer_types), 'Depth must be integer'

        if not self.parentguid or self.aolevel <= 1 or depth <= 0:
            if formal:
                return self.get_formal_name()
            return self.get_natural_name()
        else:
            parent = AddrObj.objects.get(pk=self.parentguid)
            return '{0}, {1}'.format(parent.full_name(depth - 1, formal), self)

    def get_formal_name(self):
        return '{0}. {1}'.format(self.shortname, self.formalname)

    def full_name_rus(self, min_level=2):
        names_list = [self.get_natural_name()]
        try:
            parent = self
            while True:
                parent = AddrObj.objects.get(pk=parent.parentguid)
                if parent.aolevel < min_level:
                    break
                names_list.append(parent.get_natural_name())  # без Республики
        except:
            pass
        name = names_list[len(names_list) - 1]
        for i in range(len(names_list) - 2, -1, -1):
            name += ', ' + names_list[i]
        return name

    def full_address(self):
        return self.full_name(5)

    def get_natural_name(self):
        if self.shortname == 'р-н' or self.shortname == 'км':
            return '{0} {1}'.format(self.formalname, self.shortname)
        if self.shortname in ['ул', 'г', 'с', 'пер', 'тер', 'ш']:
            return '{0}. {1}'.format(self.shortname, self.formalname)
        return '{0} {1}'.format(self.shortname, self.formalname)

    def get_parent_natural_address(self):
        parents_natural_name = ''
        try:
            parent = AddrObj.objects.get(pk=self.parentguid)
            parents_natural_name = parent.get_natural_name()
            while True:
                parent = AddrObj.objects.get(pk=parent.parentguid)
                # name = name + ', ' + parent.get_natural_name()  # c Республикой
                if parent.aolevel == 1:
                    break
                parents_natural_name += ', ' + parent.get_natural_name(
                )  # без Республики
        except:
            pass
        return parents_natural_name

    def get_natural_address(self):
        return '{}, {}'.format(self.get_natural_name(),
                               self.get_parent_natural_address())

    def __str__(self):
        return '{}, {}'.format(self.get_natural_name(), self.parent_address)

    # gnedoy
    def save(self,
             force_insert=False,
             force_update=False,
             using=None,
             update_fields=None):
        if not update_fields or 'parent_address' not in update_fields:
            self.parent_address = ''
            if self.parentguid is not None:
                try:
                    self.parent_address = str(
                        AddrObj.objects.get(pk=self.parentguid))
                except:
                    pass
            super(AddrObj, self).save(force_insert, force_update, using,
                                      update_fields)
            # change all children addresses
            parent_address = self.__str__()
            for addr in AddrObj.objects.filter(parentguid=self.aoguid):
                addr.parent_address = parent_address
                addr.save(update_fields=['parent_address'])
        else:
            super(AddrObj, self).save(force_insert, force_update, using,
                                      update_fields)
Example #18
0
class AddrObj(June2016Update):
    """
    Классификатор адресообразующих элементов
    """
    class Meta:
        app_label = 'fias'
        verbose_name = 'Адресообразующий элемент'
        verbose_name_plural = 'Адресообразующие элементы'
        index_together = (
            ('aolevel', 'shortname'),
            ('shortname', 'formalname'),
        )
        ordering = ['aolevel', 'formalname']

    aoguid = UUIDField('Глобальный уникальный идентификатор адресного объекта',
                       primary_key=True)
    parentguid = UUIDField('Идентификатор объекта родительского объекта',
                           blank=True,
                           null=True,
                           db_index=True)
    aoid = UUIDField('Уникальный идентификатор записи',
                     db_index=True,
                     unique=True)
    previd = UUIDField(
        'Идентификатор записи связывания с предыдушей исторической записью',
        blank=True,
        null=True)
    nextid = UUIDField(
        'Идентификатор записи  связывания с последующей исторической записью',
        blank=True,
        null=True)

    formalname = models.CharField('Формализованное наименование',
                                  max_length=120,
                                  db_index=True)
    offname = models.CharField('Официальное наименование',
                               max_length=120,
                               blank=True,
                               null=True)
    shortname = models.CharField('Краткое наименование типа объекта',
                                 max_length=10,
                                 db_index=True)
    aolevel = models.PositiveSmallIntegerField('Уровень адресного объекта',
                                               db_index=True)

    # KLADE
    regioncode = models.CharField('Код региона', max_length=2)
    autocode = models.CharField('Код автономии', max_length=1)
    areacode = models.CharField('Код района', max_length=3)
    citycode = models.CharField('Код города', max_length=3)
    ctarcode = models.CharField('Код внутригородского района', max_length=3)
    placecode = models.CharField('Код населенного пункта', max_length=3)
    plancode = models.CharField('Код элемента планировочной структуры',
                                max_length=4)
    streetcode = models.CharField('Код улицы', max_length=4)
    extrcode = models.CharField(
        'Код дополнительного адресообразующего элемента', max_length=4)
    sextcode = models.CharField(
        'Код подчиненного дополнительного адресообразующего элемента',
        max_length=3)

    # KLADR
    code = models.CharField(
        'Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0',
        max_length=17,
        blank=True,
        null=True)
    plaincode = models.CharField(
        'Код адресного объекта из КЛАДР 4.0 одной строкой',
        help_text='Без признака актуальности (последних двух цифр)',
        max_length=15,
        blank=True,
        null=True)

    actstatus = models.BooleanField(
        'Статус исторической записи в жизненном цикле адресного объекта',
        default=False)
    centstatus = models.ForeignKey(CenterSt,
                                   verbose_name='Статус центра',
                                   default=0,
                                   on_delete=models.CASCADE)
    operstatus = models.ForeignKey(
        OperStat,
        verbose_name='Статус действия над записью – причина появления записи',
        default=0,
        on_delete=models.CASCADE)
    currstatus = models.ForeignKey(CurentSt,
                                   verbose_name='Статус актуальности КЛАДР 4',
                                   help_text='последние две цифры в коде',
                                   default=0,
                                   on_delete=models.CASCADE)

    livestatus = models.BooleanField('Признак действующего адресного объекта',
                                     default=False)

    def full_name(self, depth=None, formal=False):
        assert isinstance(depth, six.integer_types), 'Depth must be integer'

        if not self.parentguid or self.aolevel <= 1 or depth <= 0:
            if formal:
                return self.get_formal_name()
            return self.get_natural_name()
        else:
            parent = AddrObj.objects.get(pk=self.parentguid)
            return '{0}, {1}'.format(parent.full_name(depth - 1, formal), self)

    def get_natural_name(self):
        if self.aolevel == 1:
            return '{0} {1}'.format(self.formalname, self.shortname)
        return self.get_formal_name()

    def get_formal_name(self):
        return '{0} {1}'.format(self.shortname, self.formalname)

    def __str__(self):
        return self.get_natural_name()

    def full_address(self):
        return self.full_name(5)
Example #19
0
class AddrObj(Common):

    class Meta:
        app_label = 'fias'
        index_together = (
            ('aolevel', 'shortname'),
            ('shortname', 'formalname'),
        )
        ordering = ['aolevel', 'formalname']

    aoguid = UUIDField(primary_key=True)
    parentguid = UUIDField(blank=True, null=True, auto=False, db_index=True)
    aoid = UUIDField(db_index=True, unique=True)
    previd = UUIDField(blank=True, null=True, auto=False)
    nextid = UUIDField(blank=True, null=True, auto=False)

    formalname = models.CharField(max_length=120, db_index=True)
    offname = models.CharField(max_length=120, blank=True, null=True)
    shortname = models.CharField(max_length=10, db_index=True)
    aolevel = models.PositiveSmallIntegerField(db_index=True)

    #KLADE
    regioncode = models.CharField(max_length=2)
    autocode = models.CharField(max_length=1)
    areacode = models.CharField(max_length=3)
    citycode = models.CharField(max_length=3)
    ctarcode = models.CharField(max_length=3)
    placecode = models.CharField(max_length=3)
    streetcode = models.CharField(max_length=4)
    extrcode = models.CharField(max_length=4)
    sextcode = models.CharField(max_length=3)

    #KLADR
    code = models.CharField(max_length=17, blank=True, null=True)
    plaincode = models.CharField(max_length=15, blank=True, null=True)

    actstatus = models.BooleanField()
    centstatus = models.PositiveSmallIntegerField()
    operstatus = models.PositiveSmallIntegerField()
    currstatus = models.PositiveSmallIntegerField()

    livestatus = models.BooleanField()

    def full_name(self, depth=None, formal=False):
        assert isinstance(depth, six.integer_types), 'Depth must be integer'

        if not self.parentguid or self.aolevel <= 1 or depth <= 0:
            if formal:
               return self.get_formal_name()
            return self.get_natural_name()
        else:
            parent = AddrObj.objects.get(pk=self.parentguid)
            return '{0}, {1}'.format(parent.full_name(depth-1, formal), self)

    def get_natural_name(self):
        if self.aolevel == 1:
            return '{0} {1}'.format(self.formalname, self.shortname)
        return self.get_formal_name()

    def get_formal_name(self):
        return '{0} {1}'.format(self.shortname, self.formalname)

    def __unicode__(self):
        return self.get_natural_name()

    def full_address(self):
        return self.full_name(5)