Структура модуля "Управление правами доступа"
========================================================================


.. contents:: Содержание
   :depth: 3
 
   
Основные сущности  
------------------------------------

Все объекты конфигурации модуля "Управления обращениями":

*  Формы: Заявка на права доступа, Роли, Права доступа
*  Реестры: Заявка на права доступа, Роли, Реестр прав доступа
*  Блокирующие процессы

Заявка на права доступа
------------------------------------

Код: ``itsm_form_access_order``

.. warning::

    Менять код формы, а также коды ключевых полей на форме настоятельно не рекомендуется. Это может повлечь за собой ошибки в процессах, заявязанных на данных полях.

Структура Формы 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Основные поля:

* Номер заявки 
* Дата регистрации - заполняется датой создания
* Статус заявки - указывается ответственным вручную
* Система - система, для которой выдают или отзывают права. Ссылка на реестр "Конфигурационные единицы".
* Руководитель (с кем согласовать) - ответственный, которому будет направлено согласование заявки.
* Действие - добавить или отозвать права доступа
* Роль - ссылка на реестр "Роли"
* Пользователь - автор заявки
* Должность - должность автора заявки

Структура Маршрута обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Основной условный переход
* Условный переход при завершении

.. _incident_status:

Что такое статус обращения?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

В терминологии продука Synergy ITSM статус - это набор следующий объектов и настроек:

* Значение справочника статусов
* Шаблон маршрута
* Переход в условном переходе маршрут реестра
* При необходимости: дополнительные поля ФЗ и логика их копирования в процессе event.blocking.interpreter.completion

Диаграмма состояний обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. note::
    
    На данной диаграмме отображается перечень статусов и переходов между ними настроенный по-умолчанию, но может быть изменен при внедрении решения по потребностям конкретного проекта.

.. figure:: _static/Incident_statechart.png

        Рис. 


Список блокирующих процессов
------------------------------------

event.blocking.interpreter.counter.reopen
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП используется для получения данных о том, сколько раз обращение было направлено повторно от пользователя при оценке решения обращения. Он увеличивает значение поля ``itsm_form_incident_count_reopen`` на 1 единицу, если статус обращения является "Направлено повторно". 


event.blocking.interpreter.counter.wrongway
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для получения данных о том, сколько раз обращение было неверно направлено на очередь операторами первой линии. Он увеличивает значение поля ``itsm_form_incident_count_wrongway`` на 1 единицу, если статус обращения является "Неверно направлено". 

event.blocking.interpreter.incident.auto_assignment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данное БП используется для автоматического назначения обращения исполнителям для услуг, у которых в карточке включена опция "Автоматическое назначение". Список исполнителей при этом берется из карточки сервиса из поля "Группа, ответственная за поддержку услуги". БП устанавливает статус обращения "На очереди" и направляет обращение в работу ответственным исполнителям.  Если у сервиса по обращения не включена опция "Автоматического назначения", то обращение идет дальше по маршруту на первую линию. 

event.blocking.interpreter.incident.durationOfWork
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для подсчета времени нахождения на первой линии, на второй линии, у внешних поставщиков. Он заполняет поля в скрытой таблице на обращении, а точнее следующие поля:
* Первая линия:
    *   Время решения в минутах
    *   Время решения в часах
    *   Просрочено ли?
* Вторая линия:
    *   Время решения в часах
    *   Просрочено ли?
* Внешние поставщики:
    *   Время решения в часах
    *   Просрочено ли?
* Суммарное время решения в часах

В дальнейшем эти данные используются для отчетов, дашбордов, для ведения статистики. 


event.blocking.interpreter.responsible.duration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для получения данных о продолжительности работы по обращению для исполнителя. Он по сервису обращения находит карточку данного сервиса и в таблице данных по SLA находит к какой группе относится автор обращения. По приоритету обращения БП получает продолжительность времени разрешения запроса для данного пользователя и заполняет его в поле Продолжительность ``itsm_form_incident_responsible_duration`` для исполнителя.

event.blocking.interpreter.timer.date
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП  к текущей дате добавляет 16 рабочих часов по рабочему календарю и полученную дату заполняет поле  "Дата таймера" ``itsm_form_incident_timerDate``. Эта дата в дальнейшем при отправлении обращения на оценку инициатору используется как дата запуска таймера. Данный таймер запускает маршрут, который завершает работу инициатора по оценке и переводит обращение в статус "Закрыто". 

event.blocking.interpreter.incident.relations.ci
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП используется для копирования данных о массовом обращении в затрагиваемые конфигурационные единицы. Если обращение является массовым, БП получает все затронутые конфигурационные единицы и в карточку каждой КЕ в таблицу "Массовые инциденты" в разделе "Связанные сущности" добавляет ссылку на данное обращение.

event.blocking.interpreter.incident.close_child
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данные БП переводит все дочерние обращения в статусе "Ожидает закрытия массового инцидента" массового инцидента в статус "Закрыто" и заполняет данные по решению обращения.

event.blocking.interpreter.mass_incident
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП записывает ссылку текущего обращения в поле ``itsm_form_incident_child`` в карточку массового инцидента, закрытия которого он ожидает для решения обращения. В дальнейшем при закрытии обращения по массовому инциденту, все обращения в поле ``itsm_form_incident_child`` будут автоматически закрыты.

event.blocking.interpreter.incident.supplier.duration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для заполнения продолжительности работы внешнего поставщика по заявке и даты завершения работы внешнего поставщика по SLA. Для получения этих данных процесс, используя сервис и приоритет обращения, переходит в карточку внешнего поставщика и в таблице с данными по SLA находит продолжительность времени разрешении в соотвествии с сервисом и приоритетом обращения. При помощи продолжительности БП высчитывает дату завершения работы внешнего поставщика с учетом рабочего времени по рабочему календарю.

event.blocking.interpreter.notification.supplier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП отправляет внешнему поставщику на указанный на обращении почтовый адрес уведомление  о назначении обращения в работу. Шаблон уведомления настраивается в реестре "Настройки уведомлений".

event.blocking.interpreter.incident.add_to_problem
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП используется при направлении обращения в статус "Ожидает закрытия проблемы". При этом указывается проблема, решение которой необходимо для данного обращения. БП записывает обращение в поле "Инциденты" на карточке проблемы.

event.blocking.interpreter.incident.index.tagcloud
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП добавляет в индекс для визуализации "Облако тегов" слова из темы и описания обращения, при этом убирая слова-исключения и заменяя на слова-синонимы. Список слов-исключений и слов-синонимов берется из реестра синонимов и реестра исключений.


event.blocking.interpreter.completion
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает ход выполнения по обращению
2. Определяет последнюю завершенную работу
3. Определяет файл по форме завершения в папке Прочие для этой работы
4. Копирует данные с найденного файла формы завершения на форму обращения (меняет статус и записывает значения группы полей статуса)

event.blocking.interpreter.email
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает id записи реестра Контакты, выбранного в поле  Автор
2. Копирует данные с найденной записи реестра Контакты на форму обращения


event.blocking.itsm.send.rate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает email с формы обращения (таблица контактов автора)
2. Получает формат уведомления для статуса Ожидает оценки пользователя
3. Отправляет на найденный email уведомление о необходимости подтвердить завершение решения с двумя ссылками "Отправлен повторно", "Завершение подтверждено"
*Прим. После отправки процесс разблокируется. По нажатию на ссылку завершится текущая на тот момент работа "Ожидание оценки". Подробнее - в разделе статуса)*

event.blocking.incident.calc.status.1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает из формы SLA время решения и время реакции по параметрам данного обращения
2. Записывает их на форму обращения
3. Рассчитывает плановую дату завершения с учетом рабочего календаря
4. Записывает плановые даты завершения на форму обращения


Дополнительные механизмы
------------------------------------

Переназначение обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Получает ход выполнения по обращению
2. Завершает текущую работу по обращению
3. Создает новую работу по обращению для указанного пользователя со статусом "В процессе"

*Прим. Функция переназначения работ позволяет оператору завершить работу, в которой он не является ни исполнмтелем, ни автором*

Для отображения кнопки у пользователя, данного пользователя необходимо добавить в группу *itsm_group_reassign_access* . Кнопка "Переназначить" доступна для статусов обращений: "На очереди", "В процессе", "Информация предоставлена". При необходимости в скрипте можно добавить требующиеся статусы.

Операции над фильтрами
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Для всех обращений в указанном преднастроенном фильтре:

1. Завершает текущую работу с формой завершения с заполненными полями статус и группа полей статуса


Операции над выборкой
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Реестр "Операции над выборкой" доступен из клиентской части Synergy в Хранилище -> Реестры. На АРМ для вызова записи реестра необходимо на основной таблице выбрать несколько обращений, отметив галочкой в начале строки, и в меню "Действия" над таблицей выбрать нужный статус. Для всех обращений произвольной выборки завершается текущая работа с формой завершения с заполненными полями указанного статуса и группы полей статуса.



Создание проблемы из обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Для создания проблемы из обращения отображается кнопка "В проблему". По нажатию на нее создается запись реестра "Проблемы" и поле "Источник" заполняется ссылкой на обращение. Также дополнительно копируются данные из обращения в проблему.

Данная кнопка становится доступной только после активации записи реестра обращения и для определенных статусов. Список статусов, при которых отображается данная кнопка на АРМ, настраивается в записи реестра "Настройки АРМ". 


.. figure:: _static/armSettings.png

        Рис. Настройки АРМ

Отображение кнопки в клиентской части Synergy настраивается в скрипте на статусе обращения (``itsm_form_incident_status``). Текст скрипта:  


::
    
    if(window.location.href.indexOf('Synergy') !== -1) {
        let buttonProblem = $(`[document_id="${getDocID()}"]`).closest('tbody').find('[data-button="APPROVE"]:contains("В проблему")').closest('tr');
        if([3].indexOf(Number(val)) === -1) {
            buttonProblem.hide();
          } else {
            buttonProblem.show();
      }      
    }   

При необходимости указания дополнительных статусов кроме статуса "В процессе", в массив через запятую нужно добавить порядковые номера других статусов из справочника "Статусы инцидента". Например: if([3, 7, 6].indexOf(Number(val)) === -1). 

По умолчанию, кнопка "В проблему" доступна для статуса "В процессе".

Создание запроса на изменение из обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Доступна возможность создания запросов на изменение из обращений. Для этого отображается кнопка "Запрос на изменение", по нажатию на которую создается запрос на изменение на основе обращения и поле "Ссылка на обращение" заполняется ссылкой на документ, в поле "Источник" указывается "Обращение". Также дополнительно копируются данные из обращения в запрос на изменение. 

Данная кнопка доступна для пользователей группы ``itsm_group_button_rfc`` на статусах обращений "Зарегистрировано", "Информация предоставлена", "На очереди", "В процессе". При необходимости в скрипте можно добавить или убрать нужные статусы, а также данные копируемые из обращения в запрос на изменение.


   
