C80Push
Добавляет функционал дилеров и офисов продаж. Это ActiveAdmin plugin. Использует Bootstrap и Bootstrap Select: как во frontend, так и в backend.
Содержит модели:
- Регион (habtm Dealers)
- Дилер (has_many Offices)
- Офис (belongs_to Dealer)
Добавляет пункт меню:
- Дилеры
- Список дилеров
- Регионы
Usage
Available helpers:
-
c80_push_render_page_dealers: отрисует js-компонент с yandex картой и фильтруемым, кликабельным списком офисов слева.
Installation
Add this line to your application's Gemfile:
gem 'c80_push'And then execute:
$ bundle
$ rake db:migrate
$ rails generate c80_push:install
$ rake db:seed:c80_push_02_fill_presetsAdd this line to host app's application_controller.rb:
helper C80Push::Engine.helpersAdd these lines to host app's active_admin.js.coffee:
#= require bootstrap
#= require bootstrap-select
#= require c80_push_backendAdd these lines to host app's 'application.js.coffee':
#= require bootstrap
#= require bootstrap-select
#= require c80_pushAdd these lines to host app's 'application.scss':
@import "bootstrap-sprockets";
@import "bootstrap";
@import "bootstrap-select";
@import "c80_push";Customization
Т.к. исходя из ТЗ было не ясно, есть ли у Офисов такие поля, как
сайт, email и регион, они были добавлены (на всякий случай), и поля
сделаны необязательными. И их можно "отключить", добавив в host app
такой файл app/assets/stylesheets/custom/backend/c80_push/dealers.scss:
/* у Офисов скроем неиспользуемые поля */
body.admin_dealers {
&.edit, &.new {
li[id*='dealer_offices_attributes_'] {
&[id*='site_input'] {
display: none;
}
&[id*='email_input'] {
display: none;
}
&[id*='regions_input'] {
display: none;
}
}
}
}А сам файл подключить в active_admin.scss:
@import "custom/backend/**/*";TODO
-
Добавить валидацию поля
gpsмодели Office.- Попробовать подключить к
backendclient side validation.
- Попробовать подключить к
-
Реализовать функционал цветных маркеров.
- Внутри
bootstrap selectpickerдолжны рисоваться цветные прямоугольники:- Исходный код класса /formtastic/inputs/select_input.rb,
- Stackoverflow просвящает по сабжу bootstrap selectpicker: option with data-content
- Внутри
-
ymaps: реализовать кластеризацию (пример из документации).
-
Вынести
*.rbфайлы, подлежащие кастомизации вtemplates(предварительно определив, что может еще быть кастомизировано), наваять инсталлятор, отметить это вREADME.- seeds
Процесс разработки JS функционала
Теперь пора заняться js.
-
Прикрутить
selectpicker: выводить туда только те регионы, в которых есть дилеры, у которых есть офисы. -
Вставить заголовок "Выберите Регион".
-
При первом входе на карту: должны отражаться все офисы.
- Должен рассчитываться
bounding rectangleи все точки должны быть видны на рабочей области (никто не должен выходить за рамки)
- Должен рассчитываться
-
При наведении/клике на точку на карте:
- должен появляться хинт с деталями офиса
- слева должен подсвечиваться соответствующий
.li_office.
-
При наведении/клике на
.li_office- должна подсвечиваться соответствующая точка на карте. -
Реализовать функционал цветных маркеров.
-
Когда меняется регион:
- Должны отобразиться релевантные
.li_office - Должны отобразиться релевантные точки на карте.
- Должны отобразиться релевантные
Процесс добавления функционала "Цвет маркеров дилеров"
-
добавляем таблицу
Presetsс полямиpreset_nameиcolor, причёмcolorя должен забить руками с помощью color picker со страницы докуметации Яндекс.карты (colorиспользуется только в админке для иллюстрации "что такое preset"). -
Таблица
Presetsдолжна быть habtm-связана с таблицей:dealers -
Таблицу заполнить содержимым с помощью seed файла, пункт в админке не делать.
-
при сборке хеша для Яндекс.карт - собираем в него свойства меток
- Если цвет не задан - по-умолчанию добавляем голубой
-
в админке:
- в форме редактирования/создания: у каждого дилера должен быть селект, в котором видно как
и название
preset-а, так и его цвет
- на индексной странице: должен быть столбец, в котором выводится название
preset-aи его цвет
- в форме редактирования/создания: у каждого дилера должен быть селект, в котором видно как
и название
Цитата из ТЗ
Данный раздел представляет собой список компаний, у которых указаны адреса офисов продаж и другие контактные данные.
Эти данные пользователь видит на интерактивной карте (от GoogleMaps или Яндекс. Карты - на выбор).
Попадая на данную страницу, пользователь сначала видит интерактивную карту (на которой отмечены все адреса офисов продаж и дилеров) и селект, с помощью которого можно выбрать один из регионов.
Выбрав тот или иной регион, пользователь видит слева от интерактивной карты список компаний, а также адреса их офисов продаж.
Офисы продаж компании и копании-дилеры (и адреса их офисов продаж) разграничены на интерактивной карте маркерами разного цвета.
В списке слева от интерактивной карты сначала отображаются офисы продаж компании, а затем список компаний-дилеров (и адресов их офисов продаж).
С помощью инструментов панели управления сайтом можно создавать редактировать и удалять компании, задавать/изменять/удалять адреса офисов продаж и другие характеристики характеристики:
- Название*
- Офисы продаж (как минимум один):
- Название*
- Адрес*
- gps*
- Телефон*
- Сайт
- Принадлежность к региону (офиса)
- Принадлежность к региону (дилера)
По клику на один из пунктов в списке слева пользователю на карте демонстрируется только один маркер, который соответствует данному пункту.
На странице присутсвует возможность фильтрации по региону. Выбрав регион пользователь видит в списке слева и на интерактивной карте только те офисы продаж/склады и дилеров, которые соответствую данному региону. Каждая компания имеет заранее предопределенное свойство "id".