Виджет КЛАДР (ФИАС)

Привет, сообщество Odoo!

Последнее время внимательно присматриваемся к форуму. Видим, что не все готовы делиться своими разработками. Что ж. Наша компания верит в свободные технологии. Посему начинаем цикл небольших статей о том, что удалось.

Сразу предупреждаем, большинство публикуемых модулей писались под конкретные проекты и применялись в альфа 8ой версии. Поэтому сильно на код не ругайтесь, а лучше давайте вместе работать над OpenERP… в смысле Odoo!

Первый пост — о модуле КЛАДР, одной из самых обсуждаемых плюшек среди тайных поклонников 1С будущих пользователей корпоративной системы. Наши заказчики, по крайней мере, требуют её в обязательном порядке. Может, и вам пригодится.

Что такое модуль КЛАДР и с чем его едят
Ключевая цель модуля — облегчить ввод и снизить количество ошибок при заполнении адресов за счёт автоматизации. Автоматические подсказки и автоматическая подстановка, однако, невозможны без надёжного классификатора. Требования же по актуальности делают прямой импорт в Odoo неразумным. Выход из ситуации — внешний API. Тем более, что добрые люди предлагают такой сервис абсолютно бесплатно. Он и был взят за основу.

Для использования API созданы виджеты (папка web_kladr_widget):
  • Регион
    kladr_region
  • Город
    kladr_city
  • Район
    kladr_district
  • Улица
    kladr_street
  • Дом
    kladr_house
  • Индекс
    kladr_zip

Для правильной работы виджетов, были переделаны классы, в которых встречаются адреса (res_partner — папка partner_kladr_address; crm_lead — папка kladr_crm):
  • Добавлены поля:
    Район
    district
    Дом
    house
    Квартира/офис
    office
  • Добавлено поле регион типа char
    state_id_kladr
    Здесь нужно быть внимательным, т. к. на стандарном поле state типа many2one виджет работать не будет
  • Дополнительно добавлены юридический и почтовые адреса (по аналогии с основным адресом)
  • Все адреса генерятся функциями в строку

Отображения также были изменены:
  • Спрятана вторая улица и стандартный регион. Так что, для применения к действующей базе, данные придётся переносить отдельно
  • Поля расположены в порядке, удобном для заполнения с автоматическими подсказками
  • Адрес заключен в контейнер класса
    kladr_address
    для тех случаев, когда на форме несколько однотипных виджетов
В итоге получаем такой вид:
Отображение адреса в КЛАДР

Как видно, первым заполняется город, который подставляет район/область (кроме городов федерального значения). По улицам и домам добавляются подсказки, а при их использовании автоматически появляется индекс.
Пример формирования подсказки

Модули доступны на GitHub

P.S. По последнему скриншоту (2 строка подсказки) можно судить об актуальности базы=)