Проблемы:
- Многодневные события неправильно растягивались
- Инлайн-стили 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: создание опросов, голосование, отображение результатов, список проголосовавших