Feature/vacation edo signing #23

Merged
gorbenko.pavel merged 27 commits from feature/vacation-edo-signing into main 2026-10-05 08:53:19 +00:00

27 Commits

Author SHA1 Message Date
gorbenko.pavel d253539d34 Слияние main в feature/vacation-edo-signing: исправление дат «только дата» в отпуске без содержания поверх перехода на «начало + количество дней»
Tests / frontend-test (pull_request) Successful in 1m25s
2026-10-05 12:49:45 +05:00
gorbenko.pavel 94b31b3a20 Заявление в ЭДО с брендированной шапкой: логотип компании вшит в DOCX (у компаний без логотипа — без шапки)
Tests / frontend-test (pull_request) Successful in 1m19s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 12:46:24 +05:00
gorbenko.pavel 03f48af48e Отпуск: последний согласующий сначала отправляет заявление в ЭДО — не ушло, решение не сохраняется и заявка остаётся на согласовании; повтор не плодит дубли
Tests / frontend-test (pull_request) Successful in 1m23s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 12:34:07 +05:00
gorbenko.pavel dcb0b2983d ЭДО: file_company_bins уходит одним полем JSON-массивом — повторяющиеся поля сервер больше не принимает
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 12:27:51 +05:00
gorbenko.pavel f1650083da Слияние main в feature/vacation-edo-signing: usePhasedRoute из main с editable-исполнителями, экспорты useRouteExecutors сохранены
Tests / frontend-test (pull_request) Successful in 1m25s
2026-10-05 12:16:27 +05:00
gorbenko.pavel f7209faf19 Логотипы шапки печати: PNG уменьшены с ~150 КБ до ~25 КБ и вшиты в бандл data-URI — шапка не подгружается по сети ни на экране, ни в окне печати
Tests / frontend-test (pull_request) Successful in 1m20s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 12:10:20 +05:00
gorbenko.pavel 74de2b441e Отпуск и отпуск без содержания: без даты окончания — начало и количество дней; EndDate убрана из провижининга, кода и SharePoint (из типа контента и представления)
Tests / frontend-test (pull_request) Successful in 1m36s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 11:49:37 +05:00
gorbenko.pavel af5a91c092 Заявление на отпуск: без даты окончания — продолжительность и начало, без возни с праздниками и выходными
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 11:39:59 +05:00
gorbenko.pavel 68424cd6f6 Заявка 1С: исполнители пишутся через executorsToWrite (нумерация шагов исполнения с 1)
Tests / frontend-test (pull_request) Successful in 5m4s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 09:23:07 +05:00
gorbenko.pavel 69a62cfacb Мердж origin/main в feature/vacation-edo-signing: Ticket1C берём версию main (plannerHandoff, submitStatus)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 09:20:12 +05:00
gorbenko.pavel e51d2fd98c ЭДО: портал называет себя «Портал заявок» (service_initiator_name)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:15:13 +05:00
gorbenko.pavel 16a478053c ЭДО: сертификат компании нужен только для mTLS, портал больше не разбирает awaiting_certificate
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 17:36:03 +05:00
gorbenko.pavel 7aacc1730f Отпуск: без исполнителя в маршруте инициатора нет, initiator_email не передаётся 2026-10-02 17:23:29 +05:00
gorbenko.pavel cdb7408dda Отпуск: зелёное сообщение об отправке в ЭДО без подробностей — ответ 200 значит принято
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 17:17:52 +05:00
gorbenko.pavel 1fd759732e Отпуск: инициатор в ЭДО — исполнитель заявки (первый в фазе исполнения), а не сотрудник
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 17:16:23 +05:00
gorbenko.pavel 911ccfbcf4 Отпуск: документы компаний без сертификата Sigex сохраняются в ЭДО и ждут его загрузки, сообщение об этом в «Решение сохранено»
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 17:00:43 +05:00
gorbenko.pavel 5fd8bfe453 fix: заявление на отпуск не уходило в ЭДО, если в маршруте есть исполнитель
Отправка срабатывала только на статус «Согласовано», а при исполнителе в маршруте последний
согласующий переводит заявку сразу в «Выполнение» — запрос в ЭДО не шёл вообще. Теперь отправка
срабатывает на решение, завершившее фазу согласования (isApprovalPhaseCompleted: «На согласовании»
→ «Согласовано»/«Выполнение»/«Закрыта»); решение исполнителя повторно её не запускает.

В зелёное сообщение «Решение сохранено» дописывается «Документы отправлены на подписание в ЭДО…»
(onDecided панели решения может вернуть строку).

Заодно пять чужих предупреждений линтера: eqeqeq в SubmitActions, явные типы возврата
в approverOrgInfo и useSkudRoute, зависимость эффекта в ServiceRequestView, null → undefined
в ячейках календаря СКУД.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 16:39:06 +05:00
gorbenko.pavel cce4dfa4b3 feat: справочник компаний кэшируется в localStorage на 4 часа
Раньше он жил только пока открыта страница и загружался заново при каждой перезагрузке.
Теперь между перезагрузками API не дёргается 4 часа; просроченный, битый или записанный
«из будущего» кэш игнорируется и удаляется, недоступное хранилище кэш не ломает.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 14:59:12 +05:00
gorbenko.pavel 7f5f59fc81 feat: заявление на отпуск — по файлу на каждую компанию совместителя одним запросом в ЭДО
Сотрудник заполняет заявку один раз, а в ЭДО уходит по документу на каждую компанию, где он
работает: своя шапка (компания, должность) и свой БИН в массиве file_company_bins. Подписант один —
сам сотрудник, от имени физлица. Запрос один на все файлы: принимается целиком или отклоняется
целиком, повтор безопасен. Компания без БИН в справочнике пропускается и показывается в сообщении.

Удалять согласующих при составлении может редактор маршрута (во всех формах, не только в трёх).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 14:48:33 +05:00
gorbenko.pavel 8cdee83496 fix: таблица организаций без дублирующей подписи «Организация»
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 14:00:23 +05:00
gorbenko.pavel 9e6c56c2e7 fix: у редактируемых исполнителей не было кнопки удаления
Матрица рисует корзину только при заданном canRemoveRow — для исполнителей его не передали.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 13:59:32 +05:00
gorbenko.pavel 58e4d3c868 feat: отпуск — должность и подразделение из справочника, таблица организаций с подразделением
Убраны редактируемые поля «Должность» и «Подразделение». Должность и подразделение
подтягиваются из Employee/ByEmail и показываются таблицей «Организация · Должность ·
Подразделение» — своё подразделение на каждую организацию. В скалярные колонки
Position/Department/DepartmentId пишется основная (первая) запись — их читают документ и ЭДО.
Должность больше не обязательное поле формы.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 13:56:59 +05:00
gorbenko.pavel 2009535f1a fix: поиск сотрудника не находил, если после имени или фамилии стоит пробел
PeoplePicker шлёт введённый текст в SharePoint как есть. Теперь в запросе поиска
пробелы по краям обрезаются, а двойные внутри схлопываются.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 13:50:57 +05:00
gorbenko.pavel d2d2f9f647 feat: редакторы маршрута добавляют и удаляют исполнителей при составлении заявки
canEditExecutors: те же люди, что в canEditRoute (в т.ч. gorbenko.pavel), могут править
матрицу «Исполнение» во всех формах с фазой исполнения; блок виден им и пустым.
Остальным исполнители по-прежнему только для чтения. Реестр особых прав обновлён.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 13:41:45 +05:00
gorbenko.pavel 3337aeda6c feat: таблица исполнителей во всех формах — при заполнении и просмотре, если они есть в маршруте
Общие useFormExecutors/useViewExecutors и ExecutorsMatrix вместо копирования
в каждой форме. Подключены в формах без фазы исполнения: ConcreteRequest,
Dismissal, EmployeeTransfer, ServiceRequest, Ticket1C, UnpaidLeave, Vacation.
Исполнители теперь пишутся в маршрут при подаче; таблица согласующих
грузит только фазу согласования, чтобы не смешиваться с исполнением.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 12:58:34 +05:00
gorbenko.pavel 80caa59301 feat: удалять согласующих при составлении заявки во всех формах — для редакторов маршрута
Редактор маршрута (canEditRoute) теперь может удалить любого согласующего при подаче или
правке заявки во всех формах с маршрутом согласования, а не только в трёх рекрутинговых.
В список редакторов добавлен Павел Горбенко. Реестр особых прав обновлён.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 17:08:06 +05:00
gorbenko.pavel bed190835e feat: заявление на отпуск уходит на подпись в ЭДО после финального согласования
Когда последний согласующий согласовывает заявку на отпуск, заявление собирается в браузере
как DOCX и отправляется в ЭДО (POST /api/v1/integration/signing-requests). Подписывает сотрудник
из заявки, его же почта передаётся как initiator_email. ИИН берётся из Employee/ByEmail,
БИН компании — из Dictionary/Companies. Неудача отправки не отменяет согласование и
показывается сообщением с кнопкой повтора.

Свойство веб-части «С каким ЭДО работать»: стейдж (https://10.0.1.225:8443) или локальный
бэкенд (https://localhost:7016). jszip объявлен зависимостью явно (раньше был транзитивным).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 16:46:43 +05:00