Настройка получения точек на карте

Описание

Методы, определяющие логику формирования точек для отображения картах, настраиваются в mapParams — клиентском скриптовом модуле встроенного приложения "Карта".

Карты могут размещаться на карточках объектов разных классов.

Набор методов

В модуле mapParams используются:

  • методы создания групп подвижных точек и присваивающие точкам группу, например, serviceCallGroups
  • методы получения списка подвижных и неподвижных точек, например, employeesByServiceCall
  • методы формирования отображения неподвижного объекта в списке на боковой панели, например, createServiceCallPoint
  • методы формирования отображения подвижного объекта в списке на боковой панели, например, createEmployeePoint

Использование модуля в настройках

При размещении контента со встроенным приложением "Карта" на карточке объекта:

  • обязательно указывается конкретный метод получения точек (параметр "Название метода получения точек");
  • дополнительно указывается метод группировки неподвижных точек (параметр "Название метода группировки неподвижных точек")

Подробное описание приводится в разделе Параметры приложения "Карта".

Примеры методов

employeesByServiceCall

Метод возвращает в качестве неподвижной точки адрес контрагента запроса, в качестве подвижных точек ответственного сотрудника или участников ответственной команды.

Сигнатура метода:

Copy
/**
* Метод возвращает список из
* - подвижных точек - участников команды, ответственной за запрос, или ответственного сотрудника;
* - неподвижной точки с адресом контрагента запроса.
* Этот метод можно использовать как метод получения точек для ВП на карточке запроса.
*/
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
}

createServiceCallPoint

Метод формирует неподвижную точку запроса.

Сигнатура метода:

Copy
/**
* Метод формирует неподвижную точку Заявки
*/
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 передается только значение (без первого и третьего параметров), то атрибут отображается в представлении "Без названия (по всей ширине)".

createEmployeePoint

Метод формирует подвижную точку сотрудника.

Сигнатура метода:

Copy
/**
* Метод формирует подвижную точку Сотрудника
*/
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
}

serviceCallGroups

Метод возвращает группы неподвижных точек запроса и определяет принадлежность точки к группе.

Сигнатура метода:

Copy
/**
* Возвращает группы для статических точек запросов.
* Если вы хотите группировать заявки на карте, то укажите название этого метода в параметре контента с ВП "Название метода группировки неподвижных точек"
*/
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'),
    ]
}