intra_monitor/CHANGELOG.md
2026-03-23 22:54:13 +03:00

56 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
## [sync2 vibe] — 2026-03-23
### Новое: «Служебный статус в интре» — двусторонняя синхронизация
#### Колонка в таблице заявок
- Добавлена новая колонка **«Служ. статус в интре»** (`servstatus`) — отображает значение дополнительного поля `addfield_2f6eaa2vnutrennij_statusSingleSelect` из IntraDesk
- Колонка интерактивная: при наведении открывается выпадающий пикер с полным списком внутренних статусов (аналогично колонке «Статус»)
- Текущее значение подсвечивается цветом соответствующего внутреннего статуса (если совпадает по label)
- Есть пункт «— очистить» для сброса значения в IntraDesk
#### Синхронизация IntraDesk → наш статус (входящая)
- При каждом обновлении задачи в ходе инкрементального или полного сканирования проверяется значение доп. поля
- Если значение доп. поля совпадает с label одного из активных внутренних статусов — этот статус автоматически выставляется через `setExclusiveMark` (без участия пользователя)
- Управляется настройкой `sync_addfield_status` (по умолчанию выключена)
#### Синхронизация наш статус → IntraDesk (исходящая)
- При смене внутреннего статуса через `POST /api/marks` значение нового статуса (его `label`) автоматически записывается в доп. поле IntraDesk через `PUT /changes/v3/tasks/`
- Если статус снимается без замены — доп. поле очищается (`null`)
- Работает только при включённом `sync_addfield_status`
#### Прямое редактирование из UI
- Новый эндпоинт `POST /api/tasks/:taskId/intra-addfield` — позволяет записать произвольное значение в доп. поле IntraDesk напрямую, независимо от внутреннего статуса
- После успешной записи локальный кеш задачи обновляется немедленно (без ожидания следующего сканирования)
- SSE-событие `intra_addfield` рассылается всем подключённым клиентам — обновление отображается в реальном времени на других вкладках/у других пользователей
- Тост-уведомление показывается другим пользователям при изменении
#### Настройки
- Новая настройка **«Синхронизировать служебный статус с доп. полем IntraDesk (двусторонняя)»** в панели администратора → Status Automation
- Ключ: `sync_addfield_status`, булева строка `'0'`/`'1'`
#### Запуск локально
- Добавлен `docker-compose.local.yml` — compose-файл для локальной сборки из исходников (вместо пулла готового образа из registry), данные хранятся в `./data`
- Добавлен `start-local.bat` — батник для запуска локального Docker одним двойным кликом
---
### Затронутые файлы
| Файл | Изменения |
|---|---|
| `refresh-service.js` | Константа алиаса доп. поля; извлечение `_addfield_status` при fetch; `updateIntraAdditionalField()`; inbound-синхронизация в `applyStatusAutomationForChangedTasks`; `sync_addfield_status` в `normalizeSettings` |
| `server.js` | Outbound-вызов после `POST /api/marks`; новый эндпоинт `POST /api/tasks/:taskId/intra-addfield`; настройка `sync_addfield_status` в `ALLOWED_SETTINGS` и `GET/POST /api/settings` |
| `public/js/ui.js` | Колонка `servstatus` в `ALL_COLS`; функции `_addfieldBadgeHtml`, `intraAddfieldPickerHtml`, `setIntraAddfield` |
| `public/js/sse.js` | Обработчик события `intra_addfield` |
| `public/js/auth.js` | Загрузка/сохранение чекбокса `sync_addfield_status` |
| `public/index.html` | Чекбокс настройки в панели Status Automation |
| `docker-compose.local.yml` | Новый файл — compose для локальной разработки |
| `start-local.bat` | Новый файл — скрипт запуска локального Docker |