#### Работа с резолюциями {#sec.workflow_resolution}

Для создания резолюции пользователь нажимает на кнопку "Резолюция" -
открывается экран резолюции (илл. «Экран резолюции»).

> **Примечание**
> 
> В случае, если в РКК документа работы настроена валидация его полей 
> перед отправкой, то по нажатию на кнопку резолюции, кроме варианта 
> просмотра принятой резолюции (см. ниже), действие не произойдет 
> (экран "Резолюция" не откроется либо меню с пунктами не отобразится) 
> с ошибкой (-ами):
> 
> `Данный тип документа требует указание дела. Выберите его в карточке и 
> отправьте повторно. Если список пуст, обратитесь к методологу`
> 
> `Данный тип документа требует определения исполнителя. Выберите его в 
> карточке и отправьте повторно`

![Экран резолюции](resources/img/workflow/resolution.png)

![Экран резолюции](resources/img/workflow/iOS/resolution_ios.png)

Вверху экрана отображаются:

-   кнопка "Добавить пункт" (с идентификатором NOT_PREFERRED), по
    нажатию которой открывается экран редактирования пункта резолюции
    (илл. «Экран редактирования пункта резолюции»);

-   флажок "Является контрольным" (по умолчанию, выключен).

Далее отображаются панели пунктов резолюции в режиме просмотра. Каждая
панель содержит информацию в следующем порядке:

-   *'Полная_формулировка_пункта_резолюции'*

-   Ответственный: *Фамилия И.О.*

-   Исполнители: *Фамилия И.О., Фамилия И.О.* и т.д.

-   Завершение: *ДД месяц ГГГГ ЧЧ:ММ*

-   Тип работы: *'Тип_работы'*

-   Форма завершения: *'Форма_завершения'*

> **Примечания:**
> 
> Если "Ответственный" или "Исполнители" содержат пустое значение, после
> двоеточего ничего не должно отображаться.
> 
> Если значение поля "Форма завершения" = "Результат работы", то данная
> строчка в панели пункта резолюции не должна отображаться.

Далее отображаются управляющие кнопки. Для новой резолюции это кнопки
"Принять" (с идентификатором PREFERRED) и "Сохранить" (с идентификатором
NOT_PREFERRED).

Управляющие кнопки внизу экрана имеют фиксированное положение, остальные
поля и кнопки данного экрана не имеют фиксированного положения,
прокручиваются (если все поля вмещаются в экран, то управляющие кнопки
должны быть внизу экрана, а не сразу за контентом).

1.  Для еще не принятой резолюции в результате нажатия по плашке пункта
    резолюции открывается экран редактирования данного пункта резолюции
    (илл. «Экран редактирования пункта резолюции») с заполненными
    данными. Если пользователь в этом случае на экране редактирования
    пункта резолюции нажимает на кнопку "Назад", мобильный клиент
    возвращает экран резолюции в том состоянии, которое было до вызова
    данного экрана.

2.  Для еще не принятой резолюции в результате долгого нажатия по плашке
    запрашивается подтверждение удаления с сообщением "Вы действительно
    хотите удалить данный пункт резолюции?" Если пользователь
    подтверждает удаление, плашка удаляется из списка, при неуспешном
    удалении отображается сообщение об ошибке.

3.  Если пользователь на экране резолюции (илл. «Экран резолюции»)
    нажимает на кнопку "Назад", мобильный клиент возвращает экран
    информации о работе в том состоянии, которое было до вызова данного
    экрана.

*Экран редактирования пункта резолюции.*

![Экран редактирования пункта резолюции](resources/img/workflow/edit_resolution_punkt.png)

![Экран редактирования пункта резолюции](resources/img/workflow/iOS/edit_resolution_punkt.png)

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

Параметры пункта резолюции:

+---------------------+--------------------------------------------------------------------+
| Параметр            | Описание                                                           |
+=====================+====================================================================+
| Формулировка пункта | Вводится полное название пункта резолюции (автоматический подбор   |
|                     | по совпадениям, как в платформе, не поддерживается).               |
+---------------------+--------------------------------------------------------------------+
| Ответственный       | Открывается экран "Пользователи" (илл. «Экран "Пользователи" со    |
|                     | скрытыми тегами»), параметры:                                      |
|                     |                                                                    |
|                     | *   выбор одного пользователя;                                     |
|                     |                                                                    |
|                     | *   если значение настройки "разрешено ли добавлять соисполнителей |
|                     |     к работам, не являющихся подчиненными" = true, отображать всех |
|                     |     пользователей, иначе - только подчиненных.                     |
|                     |                                                                    |
|                     | Поле должно автоматически очиститься и стать неактивным            |
|                     | (независимо от его заполненности), если выключается флажок.        |
+---------------------+--------------------------------------------------------------------+
| Исполнители         | Открывается экран "Пользователи" (илл. «Экран "Пользователи" со    |
|                     | скрытыми тегами»), параметры:                                      |
|                     |                                                                    |
|                     | *   множественный выбор пользователей;                             |
|                     |                                                                    |
|                     | *   если значение настройки "разрешено ли добавлять соисполнителей |
|                     |     к работам, не являющихся подчиненными" = true, отображать всех |
|                     |     пользователей, если false:                                     |
|                     |                                                                    |
|                     |     *   для значения настройки "ставить ли работы исполнителям от  |
|                     |         имени ответственного" = true, отображать подчиненных       |
|                     |         ответственного (если таковой выбран);                      |
|                     |                                                                    |
|                     |     *   иначе (для значения настройки "ставить ли работы           |
|                     |         исполнителям от имени ответственного" = false либо если    |
|                     |         не был выбран ответственный) - отображать подчиненных      |
|                     |         данного пользователя.                                      |
|                     |                                                                    |
|                     | Поле должно автоматически очиститься, если сменили ответственного. |
+---------------------+--------------------------------------------------------------------+
| Изменить срок       | Открывается системное окно ввода даты / времени.                   |
+---------------------+--------------------------------------------------------------------+
| Тип работы          | Открывается список из возможных значений (полученных при загрузке  |
|                     | приложения).                                                       |
+---------------------+--------------------------------------------------------------------+
| Форма завершения    | Открывается список из возможных значений (полученных при загрузке  |
|                     | приложения) и значения "Результат работы", значение "Результат     |
|                     | работы" должно быть в списке первым. Если список форм завершения   |
|                     | пуст, поле не должно быть отображено.                              |
+---------------------+--------------------------------------------------------------------+

> *Примечания к таблице:*
> 
> Подписи к недоступным полям должны выделяться серым цветом (#7f7f7f).
> 
> Для включенного флажка поле "Ответственный" обязательно для
> заполнения, для выключенного - обязательно для заполнения поле
> "Исполнители".

Если пользователь на экране редактирования пункта резолюции нажимает на
кнопку "Назад", мобильный клиент возвращает экран резолюции в том
состоянии, которое было до вызова данного экрана.

После ввода всех необходимых параметров пункта резолюции пользователь
нажимает на кнопку "Готово". Сохранение локальное. Действие выполняется
при выполнении следующих условий:

-   для типа "Работа": название, ответственный / исполнители и сроки
    обязательны для заполнения, форма завершения доступна для выбора;

-   для типов "Согласование" / "Утверждение" / "Ознакомление": название,
    исполнители и сроки обязательны для заполнения, ответственный и
    форма завершения недоступны для выбора;

-   для типа "Резолюция": название, ответственный / исполнители и сроки
    обязательны для заполнения, форма завершения недоступна для выбора;

-   для типа "Отправка документа": название и исполнители обязательны
    для заполнения, ответственный, сроки и форма завершения недоступны
    для выбора.

Возможно выполнение альтернативных потоков событий 1-3.

*Альтернативный поток №1.* При наличии незаполненных обязательных полей 
необходимо выдавать сообщение:

`Заполните все поля`

и не выполнять действие.

*Альтернативный поток №2.* Если дата завершения пункта резолюции меньше 
текущей даты, то необходимо выдавать сообщение:

`Дата завершения некоторых элементов меньше текущей даты`

и не выполнять действие, иначе - действие выполнять.

*Альтернативный поток №3.* Если значение настройки "разрешено ли 
ставить работы по резолюции, завершающиеся позже документа" = false, 
то для даты завершения в пунктах резолюции > даты завершения документа 
необходимо выдавать сообщение:

`Дата завершения каждого из пунктов резолюции не должна превышать 
срок документа`

и не выполнять действие, иначе - действие выполнять.

**Сохранение резолюции.**

Для сохранения черновика резолюции пользователь нажимает на кнопку
"Сохранить". Сохранение с отправкой данных сервер. Действие выполняется, 
только если создан хотя бы один пункт резолюции, иначе выполняется 
альтернативный поток событий 4.

При успешном сообщается "Данные сохранены", экран резолюции закрывается, 
открывается экран информации о работе.

*Альтернативный поток №4.* При сохранении резолюции без единого пункта 
необходимо выдавать сообщение:

`Резолюция должна содержать хотя бы один элемент`

и не выполнять действие.

**Редактирование черновика резолюции.**

Если у пользователя есть право редактирования черновика резолюции, то
чтобы редактировать черновик резолюции, он в окне информации о работе
нажимает на кнопку "Резолюция" - открывается экран резолюции с плашками
сохраненных пунктов резолюции и кнопками "Принять" и "Сохранить".
Возможные действия аналогичны описанным выше 1-3.

*Альтернативный поток №5.* Если любая плашка / любой пункт черновика 
резолюции содержит тип работы, удаленный из соответствующего 
справочника системы, то тип все еще является значением компонента, но 
при этом отсутствует в выпадающем списке. При попытке сохранить (как на 
экране редактирования пункта, так и всей резолюции) либо принять 
резолюцию с таким типом работы необходимо не выполнять действие и 
выдавать ошибку:

`Выбранный тип работы по резолюции отсутствует в справочнике. 
Выберите другое значение.`

**Принятие резолюции.**

Для принятия резолюции пользователь нажимает на кнопку "Принять".

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

Возможно исполнение альтернативных потоков событий, аналогичных при 
сохранении резолюции (см. выше). При неуспешном принятии отображается 
сообщение об ошибке, пользователь остается на экране резолюции. При 
успешном сообщается "Резолюция принята", экран резолюции закрывается, 
открывается экран информации о работе.

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

**Просмотр принятой резолюции.**

Если у пользователя нет права редактирования принятой резолюции (только
просмотр), то чтобы просмотреть принятую резолюцию, он в окне информации
о работе нажимает на кнопку "Резолюция" - открывается экран резолюции с
плашками принятых пунктов резолюции, в котором:

-   отсутствует кнопка "Сохранить";

-   недоступны для нажатия кнопки "Добавить пункт" и "Принять", а также
    флажок "Является контрольным";

-   отсутствуют действия нажатия по плашке (редактирование пункта
    резолюции) и долгого нажатия по плашке (удаление пункта резолюции).

**Редактирование принятой резолюции.**

Если у пользователя есть право редактирования принятой резолюции, то
чтобы редактировать принятую резолюцию, он в окне информации о работе
нажимает на кнопку "Резолюция" - открывается экран резолюции с плашками
принятых пунктов резолюции. Управляющая кнопка для принятой резолюции
одна - "Принять" (с идентификатором PREFERRED).

При добавлении новых пунктов резолюции возможные действия с ними
аналогичны описанным выше 1-3.

1.  Для принятой резолюции в результате нажатия по плашке пункта
    резолюции открывается экран редактирования данного пункта резолюции
    (илл. «Экран редактирования пункта резолюции») с заполненными
    данными. Поля ответственного и типа работы недоступны на
    редактирование, остальные доступны.
    
    > Примечание:
    > Если любая плашка / любой пункт принятой резолюции содержит тип 
    > работы, удаленный из соответствующего справочника системы, то он 
    > продолжает отображаться в качестве типа работы безо всяких 
    > ошибок.
    
    Если пользователь в этом случае на экране редактирования пункта
    резолюции нажимает на кнопку "Назад", мобильный клиент возвращает
    экран резолюции в том состоянии, которое было до вызова данного
    экрана.

2.  Для принятой резолюции в результате долгого нажатия по плашке
    запрашивается подтверждение удаления с сообщением "Вы действительно
    хотите удалить данный пункт резолюции?" Если пользователь
    подтверждает удаление, плашка удаляется из списка, при неуспешном
    удалении отображается сообщение об ошибке.

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

**Создание нескольких резолюций на документ.**

> **Примечание**
> 
> Работает, только если значение настройки "разрешено ли накладывать
> дополнительные резолюции" = true.

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

![Меню пунктов резолюции](resources/img/workflow/resolution_menu.png)

![Меню пунктов резолюции](resources/img/workflow/iOS/resolution_menu_ios.png)

Далее идут пункты, соответствующие уже наложенным на документ резолюциям
в порядке их создания, в формате *"Резолюция от Фамилия И.О."* По
нажатию на один из пунктов выполняется действие подразделов "Просмотр
принятой резолюции" либо "Редактирование принятой резолюции" (в
зависимости от прав).

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

> **Примечание**
> 
> Метод получения информации о резолюции описан в javadoc:
> 
> kz.arta.synergy.server.api.rest.docs#getResolutions.
> 
> Метод сохранения и принятия резолюции описан в javadoc:
> 
> kz.arta.synergy.server.api.rest.docs#saveResolutionRoute.

