Настройка получения точек на карте
Описание
Методы, определяющие логику формирования точек для отображения картах, настраиваются в mapParams — клиентском скриптовом модуле встроенного приложения "Карта".
Карты могут размещаться на карточках объектов разных классов.
Набор методов
В модуле mapParams используются:
- методы создания групп подвижных точек и присваивающие точкам группу, например, serviceCallGroups
- методы получения списка подвижных и неподвижных точек, например, employeesByServiceCall
- методы формирования отображения неподвижного объекта в списке на боковой панели, например, createServiceCallPoint
- методы формирования отображения подвижного объекта в списке на боковой панели, например, createEmployeePoint
Использование модуля в настройках
При размещении контента со встроенным приложением "Карта" на карточке объекта:
- обязательно указывается конкретный метод получения точек (параметр "Название метода получения точек");
- дополнительно указывается метод группировки неподвижных точек (параметр "Название метода группировки неподвижных точек")
Подробное описание приводится в разделе Параметры приложения "Карта".
Примеры методов
Метод возвращает в качестве неподвижной точки адрес контрагента запроса, в качестве подвижных точек ответственного сотрудника или участников ответственной команды.
Сигнатура метода:
/**
* Метод возвращает список из
* - подвижных точек - участников команды, ответственной за запрос, или ответственного сотрудника;
* - неподвижной точки с адресом контрагента запроса.
* Этот метод можно использовать как метод получения точек для ВП на карточке запроса.
*/
def employeesByServiceCall(def serviceCall, def user)
{
def points = []
// Добавляем на карту статическую точку с данными Запроса
points += createServiceCallPoint(serviceCall)
// Добавляем на карту динамические точки с данными сотрудников
if (serviceCall.responsibleEmployee)
{
points += createEmployeePoint(serviceCall.responsibleEmployee, user)
}
else
{
for (def employee : serviceCall.responsibleTeam.members)
{
points += createEmployeePoint(employee, user)
}
}
return points
}
Метод формирует неподвижную точку запроса.
Сигнатура метода:
/**
* Метод формирует неподвижную точку Заявки
*/
private def createServiceCallPoint(def serviceCall)
{
def clientOU = serviceCall.clientOU
// в метод createStaticPoint передается бизнес объект, для которого выводится точка, в данном случае - запрос
return modules.mapRest.createStaticPoint(serviceCall)
// заголовок: тип запроса + номер
.setHeader(api.metainfo.getMetaClassTitle(serviceCall.metaClass) + '-' + serviceCall.number)
// геопозиция отдела-контрагента
.setGeoposition(clientOU?.latitude, clientOU?.longitude)
// тема запроса;
// представление для отображения: на всю ширину
.addOption('Тема', "${serviceCall?.shortDescr}", modules.mapRest.presentation.fullLength())
// статус заявки;
// представление для отображения: справа от названия
.addOption('Статус', api.metainfo.getStateTitle(serviceCall), modules.mapRest.presentation.rightOfLabel())
// контактное лицо по запросу;
// представление для отображения: под названием
.addOption('Контактное лицо', "${serviceCall.clientName}", modules.mapRest.presentation.underLabel())
// телефон контактного лица, если он указан;
// представление для отображения: под названием
.addOption('Телефон', "${serviceCall?.clientPhone ?: 'телефон не указан'}", modules.mapRest.presentation.underLabel())
// перейти по ссылке, в данном случае - на карточку запроса
.addAction(modules.mapRest.action.openLink('Перейти на карточку', api.web.open(serviceCall)))
// открыть форму смены ответственного
.addAction(modules.mapRest.action.changeResponsible('Сменить ответственного'))
// открыть форму смены статуса, на форме будет доступен переход в статусы "В работе", "Закрыт"
.addAction(modules.mapRest.action.changeState('Сменить статус', ['inprogress', 'closed']))
}
Если в addAction при настройке подвижной или неподвижной точки не передается аргумент представления (PresentationType), то представление по умолчанию = "Справа от названия".
Если в addAction передается только значение (без первого и третьего параметров), то атрибут отображается в представлении "Без названия (по всей ширине)".
Метод формирует подвижную точку сотрудника.
Сигнатура метода:
/**
* Метод формирует подвижную точку Сотрудника
*/
private def createEmployeePoint(def employee, def user)
{
// по умолчанию в заголовок выводится ФИО сотрудника,
// координаты метки на карте - последняя геопозиция сотрудника
def point = modules.mapRest.createDynamicPoint(employee)
// телефон сотрудника, если он указан;
// представление для отображения: под названием
.addOption('Телефон', employee.mobilePhoneNumber ?: 'Телефон не указан', modules.mapRest.presentation.underLabel())
// перейти по ссылке, в данном случае - на карточку Сотрудника
.addAction(modules.mapRest.action.openLink('Перейти на карточку', api.web.open(employee)))
// метка времени последней геопозиции сотрудника;
// представление для отображения: на всю ширину
point.addOption('Последняя геопозиция', modules.mapRest.formatDate(user, point.geoposition?.date, 'dd.MM.yyyy HH:mm'), modules.mapRest.presentation.underLabel())
return point
}
Метод возвращает группы неподвижных точек запроса и определяет принадлежность точки к группе.
Сигнатура метода:
/**
* Возвращает группы для статических точек запросов.
* Если вы хотите группировать заявки на карте, то укажите название этого метода в параметре контента с ВП "Название метода группировки неподвижных точек"
*/
def serviceCallGroups()
{
return [
// при создании группы задается функция, который определяет принадлежность точки к группе,
// point - бизнес объект, переданный в createStaticPoint при создании точки,
// в данном случае - при создании точки Заявки
modules.mapRest.createGroup({ point -> point.responsibleEmployee == null })
// название группы
.setName('Без ответственного')
// код группы, обязательный для работы ВП
.setCode('red')
// цвет группы
.setColor('#EB5757'),
// функция определяющая принадлежность к группе
modules.mapRest.createGroup({ point -> point.responsibleEmployee != null })
// название группы
.setName('С ответственным')
// код группы, обязательный для работы ВП
.setCode('green')
// цвет группы
.setColor('#21B45E'),
]
}