Тип работы определяет характер выполняемых действий подразделением в определённый момент времени.
Редактор типа работы.
Категория соотносит тип работы категории. Цвет - используется в плане работ. Флаг "Учитывать в рабочих часах" - относится к генерации табеля и отображению сумм часов в графике. Обозначения в табеле - для генерации табеля.
Шаг длительности определяет размер минимального слота времени для графика дежурств. В графике допускаются типы работ с одинаковым размером слота. Способ назначения времени указывает на то, устанавливать ли время исполнения процесса на начало слота либо сдвигать время начала по мере заполнения слота.
Конфигурация определяет сколько минут занимает определённый процесс данного типа работы. Конфигурация нужна только если тип работы используется для назначения на смены с ним процессов.
В конфигурации добавляются одно или несколько правил вида:
rule.<pos>.checkExpression=<expression> rule.<pos>.duration=<duration>
Где:
- <pos> - порядковый числовой номер правила;
- <expression> - JEXL выражение проверки соответствия процесса правилу;
- <duration> - длительность в минутах.
В JEXL процессор передаются объекты:
- process - объект класса ru.bgcrm.model.process.Process - процесс;
- processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры процесса;
- processLink - объект класса ru.bgcrm.dao.expression.ProcessLinkFunction для работы с привязками процесса;
- shift - объект класса ru.bgcrm.struts.action.WorkAction.ShiftData.
Для определения сколько времени данный тип работы в данной смене будет обрабатывать конкретный процесс правила проходятся последовательно. Положительно значение длительности означает, что данный тип работы пригоден для обработки процесса.
Пример правил, в зависимости от значения спискового параметра процесса процесс может занимать разную длительность.
cnt=1 # отсеивание типов процессов отличных от 9432 (Подключение физ. лиц (Уфа) ) rule.{@inc:cnt}.checkExpression=process.getTypeId() != 9432 rule.{@cnt}.duration=0 # # подключение любых задач, кроме пакета услуг, по договорам NK rule.{@inc:cnt}.checkExpression=cu.intersection( processParam.listValueIds( 123 ), u.toIntegerSet( "1,3" ) ).size() > 0 && shift.getUserIds().size() == 1 rule.{@cnt}.duration=90 # полная бригада rule.{@inc:cnt}.checkExpression=cu.intersection( processParam.listValueIds( 123 ), u.toIntegerSet( "1,3" ) ).size() > 0 && shift.getUserIds().size() > 1 rule.{@cnt}.duration=60 # # #rule.{@inc:cnt}.checkExpression=processParam.listValueIds( 123 ).size() > 0 && shift.userIds().size() == 1 #rule.{@cnt}.duration=90 #rule.{@inc:cnt}.checkExpression=processParam.listValueIds( 123 ).size() > 0 && shift.userIds().size() > 1 #rule.{@cnt}.duration=60 # # правило по-умолчанию rule.{@inc:cnt}.checkExpression=true rule.{@cnt}.duration=120