9 Commits

Author SHA1 Message Date
28e2f1615f feat: реализован drag & drop для перемещения событий между календарями
- Создан модуль calendarEventDragDrop.js с классами DragDropState и CalendarUtils
- Реализовано перетаскивание событий между календарями через модальное окно
- Добавлена кнопка 'Переместить все' для массового перемещения
- Модальное окно отображает источник и цель перемещения
- Поддержка legacy-календарей (company/department/personal)
- Добавлены стили для подсветки drop-target (папки и календари)
- Backend: исправлена обработка null значений в serializer
- Backend: добавлен endpoint list_raw для получения немодерируемых событий
- Использованы стандартные Bootstrap стили для модалов
- Исправлено всплытие событий dragover/drop (stopPropagation)
- Эмодзи иконки для типов календарей (����)
- Toast уведомления об успехе/ошибках перемещения
2026-02-12 15:59:53 +03:00
b18802e563 fix: вернуть цветной корешок для событий календаря
Проблема:
- Левая граница (корешок) событий была белой
- Не отображался цвет календаря
- 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 календарь + событие (синее) = синий корешок + синий фон
2026-02-11 13:33:28 +03:00
f311d27dad fix: улучшить стили многодневных событий календаря
Проблемы:
- Многодневные события неправильно растягивались
- Инлайн-стили 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
2026-02-11 13:31:20 +03:00
2332680d31 fix: улучшена визуализация многодневных событий календаря
Проблема:
- Многодневные события отображались странно
- Не было визуальной связи между сегментами
- Закругления и отступы были некорректными

Решение:

1. Визуальные индикаторы продолжения
   - Первый день: стрелка › справа
   - Средние дни: стрелки ‹ › с обеих сторон
   - Последний день: стрелка ‹ слева
   - Цвет стрелок: белый с opacity 0.7

2. Правильные закругления углов
   - Первый день: слева закруглено, справа прямо
   - Средние дни: без закруглений
   - Последний день: слева прямо, справа закруглено
   - Один день: закруглено со всех сторон

3. Убраны лишние отступы
   - margin-left/right: 0 для соединённых сегментов
   - Увеличен padding для стрелок (+2px)
   - Высота увеличена до 22px для читаемости

4. Улучшенное позиционирование
   - Многодневные события в отдельном слое (z-index: 2)
   - Абсолютное позиционирование для пересечений
   - Правильные отступы между сегментами

Результат:
✅ Многодневные события визуально связаны
✅ Понятно где начало/середина/конец
✅ Стрелки указывают направление
✅ Сегменты плотно соединены
✅ Улучшенная читаемость
2026-02-11 13:00:03 +03:00
db2be4b469 refactor: компактное отображение событий календаря через SCSS
Проблемы:
- События накладывались друг на друга
- Пилюли событий были раздуты
- CSS вместо SCSS
- Inline styles захламляли JS

Решение:

1. Новый SCSS модуль _calendar-events.scss
   - Компактные события: 10px шрифт, 2px padding, 18px min-height
   - Двухцветная схема через data-атрибуты
   - Управление стеком: max-height 72px (~4 события)
   - Hover, анимации, адаптивность
   - Кастомные scrollbar для popover

2. Упрощённый JavaScript
   - Только цвета через inline styles
   - Всё остальное через SCSS (padding, border, shadow)
   - Data-атрибуты: [data-has-calendar-color], [data-recurrence]
   - Убраны все inline hover-листенеры

3. Оптимизация FullCalendar
   - dayMaxEvents: true - автоматически '+N еще'
   - dayMaxEventRows: 4 - максимум 4 строки
   - eventMaxStack: 3 - до 3 в стеке
   - Ячейка дня: min-height 80px
   - События: max-height 72px контейнера

4. Компактный дизайн
   - Граница календаря: 3px (было 4px)
   - Padding: 2px 4px (было 6px 4px)
   - Font-size: 10px (было 11px)
   - Line-clamp: 2 строки (было 3)
   - Margin: 1px 2px (плотнее)

5. Производительность
   - will-change для GPU ускорения
   - Убраны лишние event listeners
   - CSS animations вместо JS
   - Transition только на hover

Результат:
✅ События компактные и не накладываются
✅ Читаемость сохранена (белый текст + тень)
✅ Двухцветная схема работает (граница + фон)
✅ +N еще при >4 событиях в день
✅ SCSS архитектура (не inline CSS)
✅ Быстрые hover эффекты через CSS
2026-02-11 12:57:07 +03:00
3e4137daa4 feat(ldap): добавлено кэширование LDAP логина с возможностью обновления
- Добавлено поле Employee.username для кэширования LDAP логина
- API endpoint обновлен: поддержка кэша и force_refresh параметра
- Новый дизайн: убран blur, добавлена иконка обновления
- Автоматическая загрузка при инициализации (из кэша или LDAP)
- Визуальная индикация источника данных (cached/fresh)
- Доступно всем пользователям без ограничений
2026-02-06 15:33:48 +03:00
c6cd2ba20d feat(employees): добавлен функционал отображения LDAP логина в профиле
- Добавлено поле с 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 (не хранятся в БД)
2026-02-06 14:24:31 +03:00
da7bf54c6c feat: Реализация полной функциональности опросов в чатах
- Исправлен 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: создание опросов, голосование, отображение результатов, список проголосовавших
2026-01-22 01:33:42 +03:00
8363cbd541 feat: Complete CSS to SCSS migration (100%)
- Migrated all 28 CSS components to SCSS architecture
- Deleted 29 source CSS files (kept only compiled app.css & bootstrap-custom.css)
- Created 30 SCSS component modules in scss/components/
- Cleaned 24 templates from duplicate CSS links
- Updated main.scss with new imports (layout-spacing, spacing-utils, rightbar-calendar)
- Filled empty _navbar.scss with content
- Refactored css/ folder: removed obsolete files, updated README.md
- Created comprehensive documentation (migration complete, quick reference, reports)

Migration Statistics:
- Components migrated: 28 (~4,768 lines SCSS)
- CSS files deleted: 29
- Templates cleaned: 24
- app.css size: 95 KB (compiled from SCSS)
- bootstrap-custom.css: 301 KB
- Total: 396 KB

Phase 6 Complete: 100% SCSS architecture achieved ✅
2026-01-15 13:48:11 +03:00