Преднастроенные доски из скриптового модуля приложения "Интерактивная доска" 2.4.0 — 2.7.0

Каждая интерактивная доска отображается в отдельном контенте, см. Размещение контента с приложением "Интерактивная доска" на карточке объекта.

Код контента и текст скрипта в модуле определяют настройку доски. В разделе приведено описание примеров досок, которые содержатся в скриптовом модуле.

При настройке скриптового модуля используйте коды атрибутов, соответствующие объектной модели Вашего приложения.

Доски на карточке команды

По ответственным сотрудникам

Встроенное приложение размещено в контенте с кодом teamServiceCallsByEmployeesBoard.

На доске отображаются запросы (serviceCall) сотрудников команды с разделением запросов по ответственным. Для каждого ответственного отображается отдельный столбец. В столбце "Без ответственного" находятся запросы, где не назначен конкретный сотрудник. При переносе запроса между столбцами меняется ответственный за запрос.

На плашке запроса отображается название и тема запроса, дедлайн, аватар ответственного, иконка запроса (если есть), цветовой индикатор приоритета (если задан). При наведении курсора на аватар ответственного отображается всплывающая подсказка с именем ответственного, при наведении на иконку запроса — подсказка с названием иконки, при наведении на цветовой индикатор приоритета — подсказка с названием приоритета.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams teamServiceCallsByEmployeesBoard = new KanboardParams(
    contentCode: 'teamServiceCallsByEmployeesBoard',
    columnParams: { String subjectUuid ->
        Collection<ISDtObject> members = utils.get(subjectUuid).members.grep({ !it.removed })

        return [new ColumnParam(title: 'Без ответственного', linkValues: [null])] + members.collect(
            {
                new ColumnParam(title: it.title, linkValues: [it.UUID])
            }
        )
    },
    valueToLink : { String subjectUuid, ISDtObject item -> item.responsibleEmployee?.UUID },
    attributeCodeForEditing: 'responsibleEmployee'
)

По статусам

Встроенное приложение размещено в контенте с кодом teamServiceCallsByStatesBoard.

На доске отображаются запросы (serviceCall) сотрудников команды с разделением запросов по статусам. Для каждого статуса, кроме "Закрыт" (closed), отображается отдельный столбец. При переносе запроса между столбцами меняется статус запроса.

На плашке запроса отображается название и тема запроса, дедлайн, аватар ответственного, иконка запроса (если есть), цветовой индикатор приоритета (если задан). При наведении курсора на аватар ответственного отображается всплывающая подсказка с именем ответственного, при наведении на иконку запроса — подсказка с названием иконки, при наведении на цветовой индикатор приоритета — подсказка с названием приоритета.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams teamServiceCallsByStatesBoard = new KanboardParams(
    contentCode:  'teamServiceCallsByStatesBoard'
)

По дедлайнам

Встроенное приложение размещено в контенте с кодом teamServiceCallsByDeadlinesBoard.

На доске отображаются запросы (serviceCall) сотрудников команды, разделенные по времени наступления дедлайна по столбцам:

  • "Дедлайн не задан";
  • "Дедлайн уже наступил!";
  • "Текущая дата (в формате dd.MM.yyyy)";
  • "Текущая дата + 1 день (в формате dd.MM.yyyy)";
  • "Текущая дата + 2 дня (в формате dd.MM.yyyy)";
  • "Текущая дата + 3 дня (в формате dd.MM.yyyy)";
  • "Текущая дата + 4 дня (в формате dd.MM.yyyy)";
  • "5 дней и более".

На плашке запроса отображается название и тема запроса, дедлайн, аватар ответственного, иконка запроса (если есть), цветовой индикатор приоритета (если задан). При наведении курсора на аватар ответственного отображается всплывающая подсказка с именем ответственного, при наведении на иконку запроса — подсказка с названием иконки, при наведении на цветовой индикатор приоритета — подсказка с названием приоритета.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams teamServiceCallsByDeadlinesBoard = new KanboardParams(
    contentCode:  'teamTasksByDeadlinesBoard',
    columnParams: { String subjectUuid ->
        Date now = new Date()

        ArrayList<ColumnParam> result = [
            new ColumnParam(
                title: 'Дедлайн не задан',
                color: '#808080',
                matchingCondition: { ISDtObject item,
                                     String subjectUUID,
                                     Object column,
                                     Object extractor
                    ->
                    return extractor.deadline(subjectUUID, item) == null
                }
            ),
            new ColumnParam(
                title: 'Дедлайн уже наступил!',
                color: '#FF0000',
                matchingCondition: { ISDtObject item,
                                     String subjectUUID,
                                     Object column,
                                     Object extractor
                    ->
                    Date deadLineTime = extractor.deadline(subjectUUID, item)

                    return deadLineTime && COMPARE_DATE_FORMAT.format(deadLineTime) < COMPARE_DATE_FORMAT.format(now)
                }
            )
        ] + (0..4).collect {
            new ColumnParam(
                    title: PRESENTATION_DATE_FORMAT.format(now + it),
                    color: '#FFFF99',
                    matchingCondition: { ISDtObject item,
                                         String subjectUUID,
                                         Object column,
                                         Object extractor
                        ->
                        Date deadLineTime = extractor.deadline(subjectUUID, item)

                        return deadLineTime  && COMPARE_DATE_FORMAT.format(deadLineTime) == COMPARE_DATE_FORMAT.format(now + it)
                    })
        } + [new ColumnParam(
                title: '5 дней и более',
                color: '#00CC66',
                matchingCondition: { ISDtObject item,
                                     String subjectUUID,
                                     Object column,
                                     Object extractor
                    ->
                    Date deadLineTime = extractor.deadline(subjectUUID, item)

                    return deadLineTime  && COMPARE_DATE_FORMAT.format(deadLineTime) >= COMPARE_DATE_FORMAT.format(now + 5)
                }
        )]

        return result
    },
    attributeCodeForEditing: 'timeAllowanceTimer'
)

Доска-пример

Встроенное приложение размещено в контенте с кодом teamTasksByStatesExtendedExampleBoard.

На доске отображаются задачи (task) сотрудников команды в разрезе статусов по столбцам:

  • "Запланирована" (registered);
  • "Остальные открытые";
  • "Выполнена" (closed).

При переносе задачи между столбцами меняется статус задачи.

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

Иконка задачи и цветовой индикатор приоритета отображаются при выполнении условий:

  • в классе "Задача" настроены атрибуты с кодами icon и colorIndicator, к которым привязана настройка иконки и индикатора в модуле;

  • настроены справочники, на которые ссылаются атрибуты;

  • у задачи заполнены настроенные атрибуты.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams teamTasksByStatesExtendedExampleBoard = new KanboardParams(
    contentCode:  'teamTasksByStatesExtendedExampleBoard',
    /**
     * Выводим на доску все неархивные объекты класса 'Задача' (task) в ответственности
     * команды.
     */
    items: { String subjectUuid ->
        utils.find('task', ['responsible': subjectUuid, 'removed': false])
    },
    /**
     * В качестве дедлайна на доске будет выводиться значение атрибута 'Дедлайн' (deadline)
     * класса 'Задача' (task).
     */
    deadline: { String subjectUuid, ISDtObject item ->
        item.hasProperty('deadline') ? item.deadline : null
    },
    /**
     * В качестве описания на доске будет выводиться значение атрибута 'Описание' (description)
     * класса 'Задача' (task). Значение очищается от html-тегов с помощью метода api.string.htmlToText.
     */
    description: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('description') ? api.string.htmlToText(item.description) ?: '' : ''
    },
    columnParams: { String subjectUuid ->
        return [new ColumnParam(
                    /**
                     * Определяем заголовок колонки.
                     */
                    title: 'Запланирована',
                    /** Определяем статусы, задачи с которыми будут попадать в данную колонку.
                     * Может быть задано несколько кодов статусов. В этом случае, при
                     * перетаскивании в колонку, надо будет выбрать, в какой именно статус из
                     * предложенных будет произведен переход. Набор предлагаемых статусов можно
                     * урезать с помощью параметра колонки customStatesCodes.
                     */
                    linkValues: ['registered'],
                    /**
                     * Определяем цвет колонки.
                     */
                    color: '#33CCFF'
                ),
                new ColumnParam(
                    title: 'Остальные открытые',
                    linkValues: api.metainfo.getMetaClass('task').workflow.states.findResults{
                        if (!['registered', 'closed'].contains(it.code))
                        {
                            return it.code
                        }
                    },
                    color: '#808080'
                ),
                new ColumnParam(
                    title: 'Выполнена',
                    linkValues: ['closed'],
                    color: '#00CC66'
                )
        ]
    },
    /**
     * Пример настройки вывода на карточку задачи на доске иконки из справочника из атрибута с
     * кодом 'icon'. При необходимости использования какого-то другого атрибута - нужно
     * указать его код.
     */
    iconUUID: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('icon') ? item.icon?.icon?.getAt(0)?.UUID : ''
    },
    /**
     * Пример настройки названия, которое будет появляться при наведении мыши на иконку,
     * настроенную выше. При необходимости использования какого-то другого атрибута - нужно
     * указать его код.
     */
    iconTitle: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('icon') ? item.icon?.title : ''
    },
    /**
     * Пример настройки вывода на карточку задачи на доске цветового индикатора, который берется
     * из справочника из атрибута с кодом 'colorIndicator'. При необходимости использования
     * какого-то другого атрибута - нужно указать его код.
     */
    indicatorColor: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('colorIndicator') ? item.colorIndicator?.color : ''
    },
    /**
     * Пример настройки названия, которое будет появляться при наведении мыши на цветовой индикатор,
     * который берется из справочника из атрибута с кодом 'colorIndicator'. При необходимости
     * использования какого-то другого атрибута - нужно указать его код.
     */
    indicatorTitle: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('colorIndicator') ? item.colorIndicator.title : ''
    },
)

Доски на карточке сотрудника

По статусам

Встроенное приложение размещено в контенте с кодом employeeServiceCallsByStatesBoard.

На доске отображаются запросы (serviceCall) сотрудника с разделением запросов по статусам. Для каждого статуса, кроме "Закрыт" (closed), отображается отдельный столбец. При переносе запроса между столбцами меняется статус запроса.

На плашке запроса отображается название и тема запроса, дедлайн, иконка запроса (если есть), цветовой индикатор приоритета (если задан). Аватар ответственного не отображается. При наведении курсора на иконку запроса отображается всплывающая подсказка с названием иконки, при наведении на цветовой индикатор приоритета — подсказка с названием приоритета.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams employeeServiceCallsByStatesBoard = new KanboardParams(
    contentCode:  'employeeServiceCallsByStatesBoard',
    assigneeUUID: { String subjectUuid, ISDtObject item -> null },
    assigneeTitle: { String subjectUuid, ISDtObject item -> null },
    assigneeAvatarUUID: { String subjectUuid, ISDtObject item -> null }
)

По дедлайнам

Встроенное приложение размещено в контенте с кодом employeeServiceCallsByDeadlinesBoard.

На доске отображаются запросы (serviceCall) сотрудника, разделенные по времени наступления дедлайна по столбцам:

  • "Дедлайн не задан";
  • "Дедлайн уже наступил!";
  • "Текущая дата (в формате dd.MM.yyyy)";
  • "Текущая дата + 1 день (в формате dd.MM.yyyy)";
  • "Текущая дата + 2 дня (в формате dd.MM.yyyy)";
  • "Текущая дата + 3 дня (в формате dd.MM.yyyy)";
  • "Текущая дата + 4 дня (в формате dd.MM.yyyy)";
  • "5 дней и более".

На плашке запроса отображается название и тема запроса, дедлайн, иконка запроса (если есть), цветовой индикатор приоритета (если задан). Аватар ответственного не отображается. При наведении курсора на иконку запроса отображается всплывающая подсказка с названием иконки, при наведении на цветовой индикатор приоритета — подсказка с названием приоритета.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams employeeServiceCallsByDeadlinesBoard = new KanboardParams(
    contentCode:  'employeeServiceCallsByDeadlinesBoard',
    assigneeUUID: { String subjectUuid, ISDtObject item -> null},
    assigneeTitle: { String subjectUuid, ISDtObject item -> null},
    assigneeAvatarUUID: { String subjectUuid, ISDtObject item -> null},
    columnParams: { String subjectUuid ->
        Date now = new Date()

        ArrayList<ColumnParam> result = [
            new ColumnParam(
                title: 'Дедлайн не задан',
                color: '#808080',
                matchingCondition: { ISDtObject item,
                                     String subjectUUID,
                                     Object column,
                                     Object extractor
                    ->
                    return extractor.deadline(subjectUUID, item) == null
                }
            ),
            new ColumnParam(
                title: 'Дедлайн уже наступил!',
                color: '#FF0000',
                matchingCondition: { ISDtObject item,
                                     String subjectUUID,
                                     Object column,
                                     Object extractor
                    ->
                    Date deadLineTime = extractor.deadline(subjectUUID, item)
                    return deadLineTime && COMPARE_DATE_FORMAT.format(deadLineTime) < COMPARE_DATE_FORMAT.format(now)
                })
        ] + (0..4).collect {
            new ColumnParam(
                    title: PRESENTATION_DATE_FORMAT.format(now + it),
                    color: '#FFFF99',
                    matchingCondition: { ISDtObject item,
                                         String subjectUUID,
                                         Object column,
                                         Object extractor
                        ->
                        Date deadLineTime = extractor.deadline(subjectUUID, item)

                        return deadLineTime  && COMPARE_DATE_FORMAT.format(deadLineTime) == COMPARE_DATE_FORMAT.format(now + it)
                    })
        } + [new ColumnParam(
                title: '5 дней и более',
                color: '#00CC66',
                matchingCondition: { ISDtObject item,
                                     String subjectUUID,
                                     Object column,
                                     Object extractor
                    ->
                    Date deadLineTime = extractor.deadline(subjectUUID, item)
                    return deadLineTime && COMPARE_DATE_FORMAT.format(deadLineTime) >= COMPARE_DATE_FORMAT.format(now + 5)
                }
        )]

        return result
    },
    attributeCodeForEditing: 'timeAllowanceTimer'
)

Доска-пример

Встроенное приложение размещено в контенте с кодом employeeTasksByStatesExtendedExampleBoard.

На доске отображаются задачи (task) сотрудников команды в разрезе статусов по столбцам:

  • "Запланирована" (registered);
  • "Остальные открытые";
  • "Выполнена" (closed).

При переносе задачи между столбцами меняется статус задачи.

На плашке задачи отображается название задачи, описание, дедлайн.

Иконка задачи и цветовой индикатор приоритета отображаются при выполнении условий:

  • в классе "Задача" настроены атрибуты с кодами icon и colorIndicator, к которым привязана настройка иконки и индикатора в модуле;
  • настроены справочники, на которые ссылаются атрибуты;
  • настроенные атрибуты заполнены у задачи.

Аватар ответственного не отображается.

Код скрипта для доски в модуле kanboardParams:

Copy
final KanboardParams employeeTasksByStatesExtendedExampleBoard = new KanboardParams(
    contentCode:  'employeeTasksByStatesExtendedExampleBoard',
    /**
     * Выводим на доску все неархивные объекты класса 'Задача' (task) в ответственности сотрудника.
     */
    items: { String subjectUuid ->
        utils.find('task', ['responsible': subjectUuid, 'removed': false])
    },
    /**
     * В качестве дедлайна на доске будет выводиться значение атрибута 'Дедлайн' (deadline)
     * класса 'Задача' (task).
     */
    deadline: { String subjectUuid, ISDtObject item ->
        item.hasProperty('deadline') ? item.deadline : null
    },
    /**
     * В качестве описания на доске будет выводиться значение атрибута 'Описание' (description)
     * класса 'Задача' (task). Значение очищается от html-тегов с помощью метода api.string.htmlToText.
     */
    description: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('description') ? api.string.htmlToText(item.description) ?: '' : ''
    },
    columnParams: { String subjectUuid ->
        return [new ColumnParam(
                    /**
                     * Определяем заголовок колонки.
                     */
                    title: 'Запланирована',
                    /** Определяем статусы, задачи с которыми будут попадать в данную колонку.
                     * Может быть задано несколько кодов статусов. В этом случае, при
                     * перетаскивании в колонку, надо будет выбрать, в какой именно статус из
                     * предложенных будет произведен переход. Набор предлагаемых статусов можно
                     * урезать с помощью параметра колонки customStatesCodes.
                     */
                    linkValues: ['registered'],
                    /**
                     * Определяем цвет колонки.
                     */
                    color: '#33CCFF'
                ),
                new ColumnParam(
                    title: 'Остальные открытые',
                    linkValues: api.metainfo.getMetaClass('task').workflow.states.findResults {
                        if (!['registered', 'closed'].contains(it.code))
                        {
                            return it.code
                        }
                    },
                    color: '#808080'
                ),
                new ColumnParam(
                    title: 'Выполнена',
                    linkValues: ['closed'],
                    color: '#00CC66'
                )
        ]
    },
    /**
     * Пример настройки вывода на карточку задачи на доске иконки из справочника из атрибута с
     * кодом 'icon'. При необходимости использования какого-то другого атрибута - нужно
     * указать его код.
     */
    iconUUID: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('icon') ? item.icon?.icon?.getAt(0)?.UUID : ''
    },
    /**
     * Пример настройки названия, которое будет появляться при наведении мыши на иконку,
     * настроенную выше. При необходимости использования какого-то другого атрибута - нужно
     * указать его код.
     */
    iconTitle: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('icon') ? item.icon?.title : ''
    },
    /**
     * Пример настройки вывода на карточку задачи на доске цветового индикатора, который берется
     * из справочника из атрибута с кодом 'colorIndicator'. При необходимости использования
     * какого-то другого атрибута - нужно указать его код.
     */
    indicatorColor: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('colorIndicator') ? item.colorIndicator?.color : ''
    },
    /**
     * Пример настройки названия, которое будет появляться при наведении мыши на цветовой
     * индикатор, который берется из справочника из атрибута с кодом 'colorIndicator'.
     * При необходимости использования какого-то другого атрибута - нужно указать его код.
     */
    indicatorTitle: { String subjectUuid, ISDtObject item
        ->
        item.hasProperty('colorIndicator') ? item.colorIndicator.title : ''
    },
    assigneeUUID: { String subjectUuid, ISDtObject item -> null },
    assigneeTitle: { String subjectUuid, ISDtObject item -> null },
    assigneeAvatarUUID: { String subjectUuid, ISDtObject item -> null }
)