- Создан модуль calendarEventDragDrop.js с классами DragDropState и CalendarUtils
- Реализовано перетаскивание событий между календарями через модальное окно
- Добавлена кнопка 'Переместить все' для массового перемещения
- Модальное окно отображает источник и цель перемещения
- Поддержка legacy-календарей (company/department/personal)
- Добавлены стили для подсветки drop-target (папки и календари)
- Backend: исправлена обработка null значений в serializer
- Backend: добавлен endpoint list_raw для получения немодерируемых событий
- Использованы стандартные Bootstrap стили для модалов
- Исправлено всплытие событий dragover/drop (stopPropagation)
- Эмодзи иконки для типов календарей (����)
- Toast уведомления об успехе/ошибках перемещения
Проблема:
- Левая граница (корешок) событий была белой
- Не отображался цвет календаря
- border-left устанавливался без цвета в SCSS
Решение:
1. calendarWidget.js - eventDidMount:
- Вернул установку полного border-left через JS
- С цветом календаря: border-left: 4px solid <calendarColor>
- Без цвета календаря: border-left: 3px solid <eventColor>
2. _calendar-events.scss:
- Оставил только padding-left (не конфликтует с JS)
- Добавил комментарии что border-left устанавливается через JS
Результат:
✅ Корешок показывает цвет календаря (4px)
✅ Для legacy календарей - цвет события (3px)
✅ Двухцветная схема работает корректно
✅ SCSS не перезаписывает JS стили
Пример:
- Календарь отдела (красный) + событие (синее) = красный корешок + синий фон
- Legacy календарь + событие (синее) = синий корешок + синий фон
Проблемы:
- Многодневные события неправильно растягивались
- Инлайн-стили JS перезаписывали SCSS правила
- Не было четкой визуализации начала/конца/середины события
Решение:
1. Обновлён eventDidMount в calendarWidget.js:
- Убраны инлайн-стили для border-radius, padding, box-shadow
- Добавлен атрибут data-has-calendar-color для SCSS селекторов
- Упрощена логика - доверяем SCSS стилям
- Определение многодневных событий через info.isStart/isEnd
2. Улучшены SCSS стили в _calendar-events.scss:
- Добавлен width: 100% для растягивания на всю ячейку
- Раздельные border-radius для start/middle/end сегментов
- Улучшены визуальные индикаторы (‹ › с цветом)
- Явные правила для всех комбинаций fc-event-start/end
Результаты:
✅ Многодневные события корректно растягиваются
✅ Четкая визуализация начала (левый радиус) и конца (правый радиус)
✅ Средние дни без закруглений (seamless переход)
✅ Индикаторы продолжения (‹ ›) белого цвета
✅ Совместимость с двухцветной схемой (календарь + событие)
Изменения:
- 2 files changed, 48 insertions(+), 51 deletions(-)
- Компилирован app.css
Проблема:
- Многодневные события отображались странно
- Не было визуальной связи между сегментами
- Закругления и отступы были некорректными
Решение:
1. Визуальные индикаторы продолжения
- Первый день: стрелка › справа
- Средние дни: стрелки ‹ › с обеих сторон
- Последний день: стрелка ‹ слева
- Цвет стрелок: белый с opacity 0.7
2. Правильные закругления углов
- Первый день: слева закруглено, справа прямо
- Средние дни: без закруглений
- Последний день: слева прямо, справа закруглено
- Один день: закруглено со всех сторон
3. Убраны лишние отступы
- margin-left/right: 0 для соединённых сегментов
- Увеличен padding для стрелок (+2px)
- Высота увеличена до 22px для читаемости
4. Улучшенное позиционирование
- Многодневные события в отдельном слое (z-index: 2)
- Абсолютное позиционирование для пересечений
- Правильные отступы между сегментами
Результат:
✅ Многодневные события визуально связаны
✅ Понятно где начало/середина/конец
✅ Стрелки указывают направление
✅ Сегменты плотно соединены
✅ Улучшенная читаемость
- Добавлено поле Employee.username для кэширования LDAP логина
- API endpoint обновлен: поддержка кэша и force_refresh параметра
- Новый дизайн: убран blur, добавлена иконка обновления
- Автоматическая загрузка при инициализации (из кэша или LDAP)
- Визуальная индикация источника данных (cached/fresh)
- Доступно всем пользователям без ограничений
- Добавлено поле с LDAP логином (sAMAccountName) в профиле сотрудника
- Реализован blur-эффект с раскрытием по клику для безопасности
- Создан API endpoint /api/v1/employees/{id}/ldap-info/ для получения LDAP данных
- Добавлен новый пермишен employees.view_ldap_info
- Стили: SCSS компонент _ldap-login.scss с анимациями и состояниями
- JavaScript: класс LdapLoginField с AJAX запросами и обработкой ошибок
- Доступ только для staff или пользователей с правом view_ldap_info
- Данные запрашиваются из Active Directory on-demand (не хранятся в БД)
- Исправлен PollSerializer для создания опросов с опциями
- Добавлено поле read_only_fields для корректной валидации
- Реализована отправка WebSocket уведомлений при создании опроса
- Исправлен импорт serialize_message из communications.serialization
- Добавлен обработчик poll_update в UserConsumer для WebSocket событий
- Исправлен эндпоинт /results/ для возврата user_voted_option_ids
- Добавлено поле voters в PollOptionSerializer для списка проголосовавших
- Реализована инициализация poll виджетов после рендера сообщений
- Добавлено игнорирование poll_update в notification-manager
- Исправлены стили для request list badges (height, word-break, flex)
- Восстановлены стили team-wheel (.wheel-focus, .scroll-arc) из git истории
- Реализовано отображение forwarded message info в messageRendererV2
- Множественные улучшения UI и UX для опросов
Fixes: создание опросов, голосование, отображение результатов, список проголосовавших