feat: полная интеграция селектора календарей в создание событий

Реализовано:
1. Селектор календаря в форме создания события
   - Заменил статический текст 'Календарь: Компания' на <select>
   - Показывает legacy календари (Компания, Личный, Отделы)
   - Показывает новые Calendar записи из БД
   - Разделитель между legacy и новыми календарями

2. Функция populateCalendarSelector()
   - Динамическое заполнение селектора при открытии формы
   - Использует window.calendarIntegration.calendars
   - Фильтрует legacy календари (startsWith('legacy-'))
   - Устанавливает значение по умолчанию по state.type

3. Обновлена логика создания/редактирования событий
   - Убран старый код с state.type (personal/dept/company)
   - Новая логика читает target_calendar из формы:
     * 'company' → без доп. параметров (общие события)
     * 'personal' → employee_id из meta[name='user-id']
     * 'dept-{id}' → department_id
     * numeric ID → calendar_id (новые календари)
   - Поддержка смешанных ID (string для legacy, int для новых)
   - Работает как для POST (создание), так и для PATCH (редактирование)

4. При редактировании события
   - Автоматическое определение календаря из data:
     * data.calendar_id → numeric ID
     * data.employee_id → 'personal'
     * data.department_id → 'dept-{id}'
     * иначе → 'company'
   - Селектор устанавливается в правильное положение

Результат:
✅ События можно создавать в любом календаре (legacy + новые)
✅ События можно редактировать и перемещать между календарями
✅ Сохранение calendar_id в БД для новых календарей
✅ Обратная совместимость с legacy системой (employee_id/department_id)
✅ UI с иконками � для новых календарей
This commit is contained in:
admin i 2026-02-11 12:41:43 +03:00
parent 899d8156d7
commit 417fda790d
2 changed files with 611 additions and 390 deletions

File diff suppressed because it is too large Load Diff

View File

@ -119,9 +119,14 @@
</div>
</div>
<small class="text-secondary d-block mt-2">
Календарь: <span id="eventTargetLabel">Компания</span>
</small>
<div class="mt-3">
<label class="form-label">Календарь</label>
<select class="form-select" name="target_calendar" id="targetCalendarSelect">
<option value="company" selected>Компания (общие события)</option>
<option value="personal">Личный календарь</option>
</select>
<div class="form-text">События создаются в выбранном календаре</div>
</div>
</div>
<div class="modal-footer">