Модуль Drupal 7. Передача показаний приборов учета

    Предлагаю ознакомиться с модулем Transfer meter readings. Этот модуль узко специализированный и большинству читателей, возможно, будет неинтересен. Модуль позволяет жителю многоквартирного дома передавать показания индивидуальных приборов учета в удобной форме на сайте управляющей организации, а управляющей организации в полуавтоматическом режиме обрабатывать эти данные.



    Форма выбора адреса



    Пользовательская часть


    Сначала жителю предлагается заполнить адрес и номер лицевого счета. При правильном соответствии адреса и лицевого счета пользователь переходит на форму ввода показаний:


    Если по одному из счетчиков новые показания не были указаны, снова появится форма, но при этом ранее введенные значения уже не будут доступны для редактирования:


    Когда по всем счетчикам переданы показания, отображается соответствующее уведомление:


    Административная часть




    У администратора есть возможность:
    1. Настроить формат импортируемого файла (файл с основными данными):
      • Последовательность соответствий полей в базе данных и в файле;
      • Указать разделители полей, символы экранирования и т.д.;
    2. Настроить формат экспортируемого файла(с переданными показаниями);
    3. Разблокировать или заблокировать любое введенное показание счетчика;


    Список обязательных полей, которые должны присутствовать в файле с основными данными:


    Хочу обратить внимание, что поля «обязательные» не для галочки, если одно из полей будет недоступно или пустым, то строка с этим полем не попадет в таблицу с общими данными. Пример как должен выглядеть правильный файл с основными данными(для импорта):
    "2014-05-01";"7200008701";"1";"ул. Циолковского ";"12345";"5";"7";"Петров Иван Сидорович";1;8702;"Водомер ХВ";25
    "2014-05-01";"7200008701";"1";"ул. Циолковского ";"12345";"5";"7";"Петров Иван Сидорович";2;8703;"Водомер ГВ";10
    

    Учитывайте, что для каждого счетчика должна быть отдельная строка с данными об адресе, месяцем учета, номером ЛС.
    В месяце учета важны только месяц и год, день может быть любой(в пределах месяца). Например, значение «2014-05-12» вполне подходит.

    Импорт/экспорт

    На данный момент импорт и экспорт данных проходит только через текстовые файлы с разделителями. Экспорт показаний счетчиков производится в формате CSV. Для импорта подойдет любой текстовый файл с разделителями.

    Алгоритм работы

    • Внесенные показания блокируются для изменения пользователями. Код блокировки 1;
    • По умолчанию экспортируются показания с кодом блокировки 1;
    • После экспорта показания помечаются как «выгруженные». Код блокировки 2;


    Модуль находится под лицензией BSD.
    Исходный код можно посмотреть на GitHub. На Drupal.org опубликую в песочнице в ближайшее время.

    Приму любые замечания по коду и переводу модуля.

    Спасибо за внимание.

    UPD 1 от 03 сент. 2014 02:40
    В hook_permission() была ошибка из-за чего у пользователей не было доступа к форме. Если вдруг уже установили себе потестить, нужно обновиться.

    UPD 2 от 20.03.2015
    Version 1.0.2
    Share post

    Comments 43

      +1
      Думаю `$arrFileEncode` лучше вынести в функцию. В глобальном пространстве обычно держат только константы.
        0
        Да, так будет однозначно лучше. Собирал модуль из нескольких других старых наработок, поэтому кое-где могли остаться, такие вот «детские» куски кода.
          0
          Исправил.
        0
        Взгляд со стороны пользователя услуг ;)
        — Не ясно, за какой месяц передаются показания. Учитывая что управляющие компании принимают показания с 15 по 21-25 число месяца, и попал ли я в этот промежуток, или нет — не понятно.
        — Предыдущие показания — тоже не видно, когда были переданы, не помешает указать месяц, а еще лучше — историю показаний за все время.
        — Редактирование ошибочно переданных значений так же не предусмотрено, хотя до момента выгрузки (формирования счетов) никто не мешает их изменить
        — С авторизацией отдельный вопрос — предполагаю, что номер лицевого счета можно угадать, и устроить соседу веселую жизнь
        — Можно передать показания на тысячу кубов израсходованной воды, и по ним будет выставлен счет?

        Посмотрите реализацию на pgu.mos.ru — там эти вопросы решены в той и или иной степени

        P.S.: Для pgu.mos.ru я писал скрипт автоматизации передачи показаний (вдруг у кого умный дом, или просто консоль привычнее браузера), если у вас была бы возможность неинтерактивной передачи данных (REST), думаю нашлись бы желающие ей воспользоваться

          0
          — Не ясно, за какой месяц передаются показания. Учитывая что управляющие компании принимают показания с 15 по 21-25 число месяца, и попал ли я в этот промежуток, или нет — не понятно.

          На само деле управляющие организации, хоть везде и пишут, что принимают только в определенный период, готовы принимать их в любой день и час. Это не просто догадки, а реальный взгляд изнутри. За какой месяц передаются показания тоже не важно, потому что человек мог не подавать показания полгода, за какой месяц тогда ему передавать? Чтобы не было из-за этого путаницы сделано так, что пользователю нужно передавать текущее показание.
          — Предыдущие показания — тоже не видно, когда были переданы, не помешает указать месяц, а еще лучше — историю показаний за все время.

          Тут палка о двух концах, чем больше нужно данных на сайте, тем больше «порог вхождения» для использования модуля. Я старался сделать максимально простой и удобный модуль. Как для пользователя, так и для УК.
          — С авторизацией отдельный вопрос — предполагаю, что номер лицевого счета можно угадать, и устроить соседу веселую жизнь
          Если номера ЛС идут по-порядку, тогда да, можно. Но кому это сейчас нужно?
          Редактирование ошибочно переданных значений так же не предусмотрено, хотя до момента выгрузки (формирования счетов) никто не мешает их изменить
          Житель может обратиться в УК, администратор разблокирует эти показания и житель сможет исправить ошибочные данные.
          — Можно передать показания на тысячу кубов израсходованной воды, и по ним будет выставлен счет?
          Специально на этот случай в настройках можно указать максимально допустимую разницу.
          0
          Один в один как у нас в городе. Но там вроде Джумла.
            0
            Там нужен уникальный код, поэтому дальше первого шага пройти не смог. А было бы интересно посмотреть.
              0
              Уникальный код это ЛС, могу в личку кинуть, но выглядит со стороны пользователя один-в-один
                0
                Просто форма ввода показаний самая простая и очевидная, поэтому неудивительно, что кому-то еще пришла идея сделать в таком же виде. И вот видите у вас нужно ввести только номер ЛС и никто особо не задается вопросом о троллях. Значит схема работает вполне удачно, иначе бы обязательно ввели какую-нибудь авторизацию.
                  0
                  Ну если хочешь кому-то поднасрать, то нужно знать его ЛС. А если на рандоме это делать, то смысла не вижу.
              0
              Хе хе, у нас в городе тоже система с похожим функционалом и таким же интерфейсом для ввода показаний. Называется «АИС ГОРОД».
              Для того чтобы воспользоваться нужно сначала сходить в ЖКО и написать заявление указав свой мобильный номер телефона (это будет впоследствии логином). Там же выдадут 4-хзначный цифровой пароль.
              Судя по всему система самописная. За год наблюдений за ней я уже многое повидал — error 500, отсутствие подключения к серверу, баги в UI/верстке… Но видно что систему пилят.

              P.S. Перед написанием поста зашел в свой личный кабинет — оказывается появились еще и собственные приложения для IOS/Android
              0
              Эх, неготово наше общество к такому… Сам некогда делал нечто подобное, только проще — просто переделенная форма обратной связи, данные после отправки пересылались на специальный e-mail. За пару месяцев, не смотря на объявления на подъездах, ни один человек не воспользовался этой формой — все по старинке бросали бумажки в специальный ящик. Хоть я живу я в маленьком городке, но вменяемым интернетом по оптоволокну и ADSL обеспечены все желающие.

              Но если отбросить грустные мысли и предположить, что информационная отсталость — это локальная проблема моей местности, то вопрос:
              Если по одному из счетчиков новые показания не были указаны, снова появится форма, но при этом ранее введенные значения уже не будут доступны для редактирования:
              А если ошибся? Или сосед-идиот перепутал номер квартиры? Или в соседнем подъезде завелся малолетний тролль? Тут только поход в офис УК со всеми вытекающими. И соответствие номера ЛС и адреса от тролля не спасут — наверняка они идут по порядку номеров квартир. Да и сферический сосед-идиот может ошибиться в двух полях — этим тоже не стоит пренебрегать. Мне кажется здесь необходима авторизация по ЛС и паролю, чтобы подающий показания человек был идентифицирован, а адрес квартиры заполнялся только однажды — при регистрации.
                0
                Если ящик в подъезде это одно, а если к этому ящику ехать через полгорода… Но все равно остается старшее поколение которое не пересилишь.

                Посмотрите выше по ссылке как у нас в городе, тоже может зайти любой и подать что угодно. Другое дело что до того как вы это написали у меня таких мыслей не было.
                  0
                  А вообще, если подумать, то вся эта передача показаний ИПУ — жуткий каменный век, уже давным давно существуют приборы учета с возможностью дистанционного съема показаний и информационные системы для автоматического приема, обработки и хранения данных о показаниях, но вот финансировать переход на них никто не торопится…
                    0
                    Мне кажется здесь необходима авторизация по ЛС и паролю, чтобы подающий показания человек был идентифицирован

                    Показания можно передать и по телефону. Как там идентифицировать?
                      0
                      Никак, и это плохо. И через ящик тоже никак, и это тоже плохо.
                        0
                        На самом деле ничего страшного. Если система биллинга грамотная, она ведёт анализ расхода на основе среднемесячного за какой-то период. Если текущий расход не коррелирует с ним, то эти ЛС передаются оператору на проверку. Дальше может быть обзвон/обход проблемных абонентов, либо показания тупо отбрасываются.
                      0
                      Эх, неготово наше общество к такому
                      Как показывает моя практика, уже готово.
                      А если ошибся? Или сосед-идиот перепутал номер квартиры?
                      Только номер квартиры перепутать не получиться, нужно еще перепутать и номер ЛС.
                      Мне кажется здесь необходима авторизация по ЛС и паролю, чтобы подающий показания человек был идентифицирован, а адрес квартиры заполнялся только однажды — при регистрации.
                      Пройти первичную авторизацию, тоже иногда проблема. Человеку нужно прийти в УК, написать заявление и ждать ответа. Либо на сайте можно регистрироваться с пре-модерацией, опять же нужны человеческие ресурсы для работы с пользователями на сайте.
                      0
                      Почему забыли о кодинг стандартах Drupal и используете хаотичное оформление?
                        0
                        Если вы про оформление кода, то вроде оно не хаотичное. Для отступов использую TAB, т.к. в Geany очень удобно убирать/добавлять отступы([TAB]/Shift+[TAB]). В чем именно заключается хаотичность? Я готов исправиться.
                          0
                          У вас везде разное форматирование — где табы, где пробелы их их разные количества. Как пример: github.com/servekon/drupal7-transfer-meter-readings/blob/master/transfer_meter_readings.admin.inc#L50-L52

                          Совет: почитайте о кодинг стандартах Drupal и используйте для проверки CodeSniffer (или MessDetector). Отчет с ошибками форматирования будет большой.

                          P.S. Отступы в сорцах Drupal — 2 пробела.
                            0
                            Мдаа. На Github код смотрится ужасно, в Geany всё красиво. Надо будет переделать все на 2 пробела или на все на TAB. Стандарты эти читал, знаю. Я все понимаю, но мне больше нравится использовать ТАБы.
                              0
                              А знаете, с пробелами код тоже смотрится неплохо. Обновил на Github.
                                0
                                Смотрится — это одно. Мне, например, в том же PSR не нравится отступ в 4 пробела, в Drupal — перенос блочных операторов (if — else, try — catch) на новую строку и много других правил… Тут важно понимать, что они были приняты и одобрены тысячами довольно не глупых людей со всего мира не просто так. Если ты используешь какую-то систему, то обязан следовать тем правилам, которые заложены в ее идеологии. Иначе же — должно разрабатываться собственное решение (CMS/CMF/Framework), собственные стандарты и правила.

                                Хотя есть, правда, еще один выход — контрибьютинг — предложение своих, обоснованных, идей и их реализацию сообществу разработчиков (если open source, как в случае с Drupal).
                          +1
                          Для отступов использую TAB, т.к. в Geany очень удобно убирать/добавлять отступы([TAB]/Shift+[TAB]).

                          С пробелами Geany точно так же умеет работать.
                            0
                            UPD 1 от 03 сент. 2014 02:40
                            В hook_permission() была ошибка из-за чего у пользователей не было доступа к форме. Если вдруг уже установили себе потестить, нужно обновиться.
                              0
                              Я такое на webform делал.
                              Конечно возможностей по экспорту меньше, но работает… :)
                                0
                                Всегда хорошо, когда квалификация позволяет сделать хотя бы на WebForm. Подобные модули рассчитаны на персонал, который мало что понимает в «сайтах». Здесь достаточно установить модуль. И без особых телодвижений начать работу.
                                  0
                                  Наверное, если потоковое решение, то да. У меня разовое было.

                                  ps: Хотя и настройки webform можно через features тиражировать.
                                0
                                Обновил до версии 1.0.2
                                  0
                                  Как решается вопрос поверки/замены/просрочки счётчиков?
                                  Есть ли возможность уведомлений пользователя о необходимости поверки с блокировкой ввода показаний и перехода на среднемесячные в соответствии с действующим законодательством?
                                    0
                                    Эти вопросы ПО в котором вы делаете расчет данных. На сайт вы должны выгружать корректные данные. При импорте старые данные удаляются, кроме показаний, которые передали пользователи, а новые добавляются.
                                      0
                                      Это-то понятно. Но почему бы не расширить функционал модуля? Хотя бы уведомление (+ настраиваемая блокировка) для пользователя, вводящего данные?
                                        0
                                        Этот функционал уже относится к полноценной системе биллинга, а там не всё так просто (я с ними без малого 10 лет работаю), а тут просто интерфейс для сбора данных. Хороший, честно говоря, но отследить просрочку ПУ без связи с основной БД не получится.
                                          0
                                          Разве привязать к счётчику дату окончания действия сложно?
                                          Ещё одно поле в БД и одно ветвление в коде.
                                          Без синхронизации с БД биллинга.
                                            0
                                            Проще передать тупо абонентов, точнее пометить, у которых заканчивается срок действия, выгрузив их из БД биллинга.
                                              0
                                              Дело в том, пользователь может передавать показания даже после того, как у него «вышла» дата поверки. Но при расчете эти данные уже не должны учитываться. Если житель увидит, что переданные им данные не учитывается, то он сразу должен будет обратиться в УК. И уже тогда будет уведомлен о том, что ему нужно либо заменить счетчик, либо провести поверку.
                                                0
                                                Получается не клиент-ориентированная, а УК-ориентированная система. :)
                                                Вы думаете, люди помнят о дате поверки приборов?
                                                Я, как жилец, предпочёл бы уведомление о поверке за месяц, чем получить отказ в приёме показаний по квитанции постфактум.
                                                Опять же — жильцу надо следить, чтобы в квитанции показания совпали с переданными, проблему можно обнаружить не сразу…
                                                Пусть пользователь сможет передать показания, но увидит уведомление о надвигающейся поверке (так сделано в ЛК Мосэнергосбыта).
                                                  0
                                                  Так это же простой модуль для передачи показаний, а вы требуете от него функций, которые в него не заложены. Еще раз повторяю, что лучше использовать инструменты по назначению. Информация о поверке счетчика должна печататься на квитанции. Либо, если на сайте используется полноценный ЛК для жителя, то вы можете сделать что угодно. Этот же модуль закрывает потребности узко-специализированной ниши.
                                                    0
                                                    Я, как жилец, предпочёл бы уведомление о поверке за месяц, чем получить отказ в приёме показаний по квитанции постфактум.
                                                    Вообще-то они печатаются на квитанции заранее, как раз сбытовой компанией, как раз из полноценной системы, где их рассчитывают и формируют.
                                                      0
                                                      У нас на квитанции такого нет, видимо существуют разные системы биллинга.
                                                        0
                                                        Естественно, в каждом регионе свои. У нас вообще самописная, делали её три с половиной человека (один из них перед вами), обслуживает треть миллиона, со всеми плюшками. Но дальше начались проблемы, которые озвучивать не хочу, если интересно — в лс.
                                            0
                                            А если заменили счётчик, как обнулить показания, не залезая в БД?

                                        Only users with full accounts can post comments. Log in, please.