119 Commits

Author SHA1 Message Date
aa32439e8b refactor(requests): Улучшен UX выбора получателей в стиле email-клиента
Переработан RecipientPicker компонент:
✨ Chip-based UI (как в Gmail/Outlook)
- Пользователи отображаются как chips с крестиком для удаления
- Autocomplete с живым поиском по имени/email
- Dropdown с аватарами и должностями пользователей

� Интуитивный интерфейс:
- Структура To:/CC:/Отделы: (как в почтовых клиентах)
- Получатели всегда видны (убраны collapse)
- Кнопка '+ Копия' для показа поля CC
- Inline флаг 'Всем сотрудникам'

� Улучшенная верстка:
- Модальные окна расширены до modal-lg
- Получатели перенесены в начало (как тема в email)
- Добавлены иконки для визуальной группировки
- Добавлены emoji в типы заявлений для удобства

� CSS обновлен:
- Email-style компактный дизайн
- Фокус-состояния для inputs
- Hover-эффекты для dropdown items
- Адаптивность для мобильных устройств
- Поддержка темной темы

� UX улучшения:
- Поиск с автодополнением вместо select
- Визуальные аватары пользователей (инициалы)
- Показ должности и email в dropdown
- Автофокус после добавления пользователя
- Ограничение результатов поиска до 10
2025-12-02 18:09:19 +03:00
deec86f3f9 feat(requests): Этап 5 - реализован frontend для получателей заявлений
Создан компонент RecipientPicker:
- Множественный выбор отделов (ManyToMany)
- Выбор основных получателей (recipients)
- Выбор пользователей в копии (CC users)
- Флаг "Отправить всем сотрудникам отделов"
- Динамический рендеринг выбранных пользователей
- Валидация: нельзя указать recipients с флагом sent_to_all_department

Интеграция:
- Добавлены секции получателей в модальные окна создания и редактирования
- Обновлен requestCrudHandler.js для передачи данных получателей в API
- Добавлены стили recipientPicker.css
- Подключен CSS в request_list_full.html

Функциональность:
- Загрузка списка пользователей и отделов из API
- Добавление/удаление получателей через UI
- Автоматическая очистка форм после создания
- Поддержка редактирования существующих получателей
2025-12-02 17:49:54 +03:00
d370ef678d Валидация ФИО: запрет цифр, обязательность аватара, улучшения JS live validation, фиксы паттернов для отчества 2025-12-02 14:02:10 +03:00
194286ecd5 debug: подробные логи для диагностики валидации аватара (JS, DRF, сериализатор) 2025-12-02 11:28:45 +03:00
22476a5f7a Исправлена ошибка фильтра LdapSyncState: использование model+object_pk вместо несуществующего поля employee 2025-12-02 11:11:50 +03:00
1b3076fb02 Улучшена обработка ошибок валидации: парсинг detail с извлечением имени поля и сообщения, обработка API ошибок в try-except 2025-12-02 11:07:47 +03:00
2d08c8bc56 AJAX submit для формы редактирования сотрудника, ошибки показываются inline 2025-12-02 11:05:37 +03:00
270407abf9 AJAX submit для формы редактирования сотрудника, ошибки показываются inline 2025-12-02 11:01:42 +03:00
68352580e8 Фикс: корректный placeholder для фото сотрудника при пустом avatar, форма отправляет POST на фронтовую вьюху, убрана JS-валидация и кастомный submit. 2025-12-01 15:44:02 +03:00
3562852d84 debug: добавлено детальное логирование отправки PATCH запроса 2025-12-01 15:10:02 +03:00
2749d7f0d4 debug: добавлено логирование в employeeFormHandler для отладки загрузки аватара 2025-12-01 15:06:41 +03:00
26f4bbea02 fix: устранены дубликаты сообщений, архитектура загрузки через WebSocket, исправлен poll_update для Django Channels, улучшена инициализация голосований и защита от повторов 2025-12-01 14:19:58 +03:00
7c2b6b73e3 Убраны console.warn из chatListFilter и chatListRealtime
Модули теперь тихо выходят, если не находят элементы (не на странице чатов),
вместо того чтобы засорять консоль предупреждениями на всех остальных страницах.
2025-11-30 12:21:36 +03:00
4b6c25157d Жесткая фиксация круглых аватаров чатов через important 2025-11-30 11:39:46 +03:00
81d9178ec9 Улучшена структура списков чатов: круглые аватары, поддержка изображений, названия отделов, badge 'Основной' 2025-11-30 11:29:54 +03:00
43fa0a2053 Добавлена загрузка/замена/удаление фото сотрудника с автоматическим удалением старых файлов 2025-11-30 10:50:09 +03:00
25cc0c9fca Добавлены кнопки мессенджеров (WhatsApp, Telegram, WeChat) в боковую панель чатов с переходом на соответствующие страницы 2025-11-30 10:22:47 +03:00
598f20f95a Обновление chat_list.html: улучшена фильтрация, скрытие пустых категорий и кнопок, оптимизация JS и CSS. 2025-11-30 09:44:18 +03:00
3422f18f4f fix(notifications): восстановлены типы уведомлений, тестовый скрипт и все рабочие изменения 2025-11-29 16:41:03 +03:00
3ec09a0fa7 fix(message-inputs): кнопки не переносятся на новую строку при масштабировании
КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ CSS:
- Добавлен flex-wrap: nowrap в .message-field (запрет переноса)
- Добавлен min-width: 0 в .message-input (позволяет сжиматься)
- Удален flex-wrap: wrap из mobile media query
- Улучшены mobile стили: меньшие отступы и размеры кнопок
- Поле ввода теперь корректно сжимается на мобильных
- Кнопки смайлика и отправки остаются на месте

ВЛИЯНИЕ:
- Модальное окно постов
- Чаты (messenger)
- Все формы комментариев
- Все места с .message-field компонентом

ОТКЛЮЧЕН DEBUG в postDetailModal.js
2025-11-29 16:31:06 +03:00
c96cb46b84 fix(post-modal): комментарии текущего пользователя отображаются справа
КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ ЛОГИКИ:
- Теперь справа отображаются комментарии ТЕКУЩЕГО пользователя (как в мессенджере)
- Добавлена функция getCurrentUserId() для получения ID из meta-тега
- Сравнение: commentAuthorId === currentUserId (а не postAuthorId)
- Обновлена отладка с эмодзи: ✅ МОЙ / ❌ чужой, ➡️ RIGHT / ⬅️ LEFT
- Переименованы переменные для ясности: isMyComment вместо isAuthor
2025-11-29 16:27:10 +03:00
34ddc5588f feat(comments): добавлен флаг is_post_author в API
- Добавлено поле is_post_author в CommentSerializer
- Сервер теперь явно указывает, является ли автор комментария автором поста
- Фронтенд использует этот флаг (с fallback на ручное сравнение)
- Добавлена детальная отладка для диагностики проблемы
- Это устраняет проблему с неправильным определением автора
2025-11-29 16:15:39 +03:00
f955185b91 fix(post-modal): исправлена отрисовка комментариев в модале
- Комментарии автора поста отображаются справа без бейджа
- Форма ввода комментариев теперь не накладывается на список (position: relative вместо sticky)
- Исправлена автоматическая прокрутка к низу комментариев при открытии модала (requestAnimationFrame)
- Блок комментариев использует flex-layout для правильного размещения
- Секция комментариев имеет min-height: 300px и max-height: 65vh
- Добавлена граница сверху формы ввода для визуального разделения
2025-11-29 15:57:26 +03:00
7e305bcd91 feat(comments): комментарии автора теперь отображаются справа
- Добавлен класс comment-item--own для комментариев текущего пользователя
- Комментарии автора выравниваются по правому краю
- Добавлен стиль с фоном primary для комментариев автора
- Комментарии других пользователей остаются слева с серым фоном
- Максимальная ширина комментариев 70% для лучшей читаемости
2025-11-29 15:45:23 +03:00
465ecd3074 fix(layout): фиксированная высота sidebar и rightbar без скролла страницы
- Sidebar и rightbar теперь sticky с фиксированной высотой
- Высота = 100vh - navbar - 2*layout-padding-y (12px сверху + 12px снизу)
- top = navbar + layout-padding-y
- Элементы не перемещаются с основным скроллом страницы
- Имеют собственный внутренний скролл при переполнении
- Размер определяется как высота страницы минус navbar минус 2 отступа
2025-11-29 15:42:12 +03:00
c9fa337669 fix(calendar): добавлена очистка кеша после создания/редактирования/удаления событий
- Добавлен вызов invalidateCalendarEvents() перед refetchEvents()
- Исправлена проблема с отображением событий без перезагрузки страницы
- Кеш теперь корректно очищается при всех операциях с событиями
2025-11-29 15:42:01 +03:00
dd56953e89 Исправлена разметка и стили страницы профиля
- Заменен лишний div.container на стандартный container для единообразия
- Заменен класс .card на .ios-card в секции активности для устранения конфликтов стилей
- Добавлен card-list.css в base.html для корректного отображения карточек новостей
- Добавлены CSS правила для правильного поведения .row и колонок в grid-layout
- Исправлена проблема с выходом календаря за границы страницы
- Убраны видимые скроллбары у modal-body и modal-content для чистого UI
2025-11-29 13:52:21 +03:00
38c4d3aeab Рефакторинг: добавлен DataManager и API обертки для устранения дублирования запросов
НОВОЕ:
- static/js/managers/dataManager.js - централизованное кеширование и дедупликация
- static/js/api/calendarApi.js - обертка над calendar API с кешем (TTL 30s)
- static/js/api/departmentsApi.js - обертка над departments API с кешем (TTL 60s)

ИЗМЕНЕНО:
- calendarWidget.js теперь использует getCalendarEvents() и getMyDepartments()
- Убрано 3x дублирование запроса /api/v1/departments/my-departments/
- Убрано 2-3x дублирование запросов календаря

РЕЗУЛЬТАТ:
- Вместо 10+ API запросов теперь будет 3-4 (с кешем)
- Автоматическая дедупликация одновременных запросов
- Логирование Cache HIT/MISS для отладки
2025-11-28 14:24:26 +03:00
6ca8bf6602 Исправлен порядок обработки ping в notification-manager
- Ping проверяется ДО логирования
- Убрано предупреждение 'Unknown message type: ping'
2025-11-28 14:02:37 +03:00
a2ceba626c Добавлен механизм keepalive для WebSocket соединений
- Добавлен ping каждые 20 секунд в ChatConsumer
- Добавлен ping каждые 20 секунд в ChatListConsumer
- Добавлен ping каждые 20 секунд в NotificationConsumer
- Клиенты игнорируют ping сообщения
- Создан WEBSOCKET_KEEPALIVE_FIX.md с инструкциями для nginx
- Исправляет проблему закрытия соединений через 27 секунд
2025-11-28 13:57:59 +03:00
1127af354e Улучшения UI чата: круглые кнопки, emoji-picker, исправление WebSocket переподключения
- Сделаны круглыми кнопки отправки и прокрутки вниз
- Убран фон у поля ввода сообщений
- Добавлен emoji-picker-element с поддержкой категорий
- Скрыта кнопка выбора тона кожи в emoji picker
- Изменена иконка кнопки отправки на ракету
- Исправлена бесконечная перезагрузка при падении WebSocket
- Добавлено умное переподключение WebSocket с 5 попытками
- Улучшена анимация кнопки прокрутки вниз
2025-11-28 13:07:17 +03:00
c1a907cd60 feat(ui): restyle message composers 2025-11-28 11:56:47 +03:00
70d0260919 Fix: подключение ChatComposer.js и очистка шаблона 2025-11-28 10:09:23 +03:00
f7f6308953 Fix: исправлены цвета файлов и двойная отправка сообщений 2025-11-28 08:34:36 +03:00
af23136a6d Fix: убраны рамки у файлов, исправлены цвета текста, откачены проблемные изменения видео 2025-11-28 08:26:06 +03:00
91bc8386a1 Fix: исправлена загрузка видео и стилизация вложений
Исправление видео:
- Видео элементы создаются с уникальными ID
- src устанавливается после добавления в DOM через requestAnimationFrame
- Используется preload='auto' вместо 'metadata' для немедленной загрузки
- video.load() вызывается после установки src

Стилизация вложений:
- Убран bg-light у ссылок на файлы
- Добавлены стили .message-attachments для прозрачного фона
- Для bubble-me используется rgba(255,255,255,0.15) фон
- Для обычных сообщений используется rgba(0,0,0,0.05) фон
- Добавлены hover эффекты
- Файлы теперь соответствуют цвету сообщения
2025-11-28 08:19:15 +03:00
eae685eacf Fix: улучшена загрузка видео и сделан текст необязательным
Исправления видео:
- Видео элементы теперь создаются программно через createElement
- Удалён setTimeout, добавлена прямая замена placeholder'ов
- video.load() вызывается сразу после создания элемента
- Исправлен доступ к правильному контейнеру вложения

Текст необязателен при файлах:
- Удалён атрибут required у textarea
- Добавлена валидация: должен быть либо текст, либо файлы
- При отправке файла без текста отправляется пустая строка
- Показывается alert если нет ни текста, ни файлов
2025-11-28 08:14:08 +03:00
116547621b Fix: исправлена загрузка видео в чате
- Добавлен атрибут preload='metadata' для video элементов
- Добавлен текст-заглушка 'Ваш браузер не поддерживает видео'
- Добавлена принудительная загрузка video.load() после добавления в DOM
- Исправлено как в шаблоне, так и в JavaScript для WebSocket сообщений

Теперь видео загружается сразу после отправки без перезагрузки страницы
2025-11-28 08:10:19 +03:00
d7139f7f84 Feature: реализована отправка файлов в чате
Backend:
- Добавлен API endpoint /communications/api/upload-message/ для загрузки сообщений с файлами
- Обновлён consumers.py: добавлена сериализация вложений в serialize_message()
- Поддержка 4 типов файлов: image, video, audio, file
- Автоопределение типа по MIME

Frontend:
- Обновлён chat_detail.html: отправка файлов через fetch API вместо alert
- Добавлено отображение вложений в шаблоне (изображения, аудио, видео, документы)
- Обновлён chatMessageTemplates.js: рендеринг вложений для WebSocket сообщений
- Добавлена функция formatFileSize() для отображения размера файлов

Модель MessageAttachment уже существовала, миграции применены
2025-11-27 18:12:09 +03:00
b0f0fdb516 Fix: убрана полоска прокрутки у поля ввода чата и улучшена обработка вложений
- Убрана полоска скролла у textarea (overflow-y: hidden, scrollbar-width: none)
- Исправлена логика обработки вложений: теперь файлы хранятся в массиве
- Улучшено удаление отдельных файлов из превью
- Добавлена обработка отправки формы с файлами (подготовка к API)
- Пока отправка файлов показывает предупреждение о будущей реализации
2025-11-27 17:59:24 +03:00
edc1b578ee Redesign: современный интерфейс чата в стиле мессенджеров
Изменения в chat_detail.html:
- Убрана кнопка с фотографией из композера
- Кнопка вложений встроена в строку ввода с выпадающим меню
- Добавлено выпадающее меню с опциями: Документ, Фото/видео, Камера, Аудио
- Добавлены скрытые input для каждого типа файлов
- Реализовано превью прикрепленных файлов
- Добавлен JavaScript для обработки выбора и отображения файлов

Изменения в chat-detail.css:
- Обновлен стиль композера под современные мессенджеры
- Круглые кнопки вложений и отправки (40px)
- Поле ввода с закругленными углами (border-radius: 20px)
- Анимации hover для кнопок (scale 1.05)
- Стили для превью вложений
- Улучшенное выпадающее меню с иконками и transition эффектами
2025-11-27 17:55:02 +03:00
dc4e983a74 Fix: чаты и LDAP
- Добавлен CSRF токен в модальные окна (createDepartmentModal, createChatModal)
- Исправлена работа групповых чатов (group/channel/announcement):
  * Добавлена проверка доступа через ChatMembership в views и consumers
  * Групповые чаты теперь отображаются в списке
  * WebSocket подключается корректно без бесконечных перезагрузок
- API create_chat теперь читает JSON вместо POST данных
- Изменена отправка сообщений: Enter вместо Ctrl+Enter, Shift+Enter для переноса строки
- Добавлен сертификат LDAP (corp-ca.pem)
- Отключен LDAP в локальном .env для разработки (USE_SQLITE=True, LDAP_ENABLED=False)
2025-11-27 17:23:13 +03:00
4cf6828536 Fix CSRF token missing error in department creation modal 2025-11-27 15:08:00 +03:00
35f365a1b0 feat: Add department-based document distribution with department picker in UI
- Added departments ManyToMany field to Document model
- Implemented department selection in document create/edit modals
- Added automatic notification creation for all department employees
- Fixed document filtering to include uploaded documents in 'My Documents'
- Fixed acknowledgements API to include department recipients
- Added bulk notification support with configurable threshold
- Removed acknowledge button, added visual highlighting for unread documents
- Implemented server-side acknowledgment flow with redirect to file
- Fixed mobile responsive layout for document actions
- Removed temporary test files and documentation
2025-11-21 12:46:43 +03:00
ddf22c47da fix: автоматическое обновление JWT токенов
- ApiClient теперь обрабатывает 401 и 403 ошибки для обновления токена
- Добавлен JWTRefreshMiddleware для проактивного обновления токенов за 5 минут до истечения
- Добавлена настройка JWT_REFRESH_THRESHOLD_MINUTES (по умолчанию 5)
- Исправлена проблема с периодическими 403 ошибками после истечения access token
2025-11-20 18:52:29 +03:00
eb5fb926a1 Исправлена фильтрация новых сотрудников и центрирование карусели
- Добавлен фильтр created_at__gte в EmployeeViewSet API
- Исправлен параметр is_active -> active в запросе к API
- Добавлено центрирование карусели новых сотрудников (justify-content: center)
- Обновлена документация API endpoints
2025-11-20 12:54:01 +03:00
5cda78b49b Add modal for department creation
- Create modal_create_department.html component with simple form (name, description)
- Create createDepartmentModal.js handler for form submission via API
- Update department_list.html to use modal instead of link
- Modal integrates with API v1/departments/ endpoint
- Includes validation, error handling, and success notifications
- Now both employees and departments use consistent modal creation pattern
2025-11-20 09:52:34 +03:00
d078b2f50b Merge master and ldap-writeback: added LDAP optional mode, refactored templates and JavaScript modules 2025-11-20 09:00:55 +03:00
fb49f4e2b6 refactor(js): Extract calendar widget to separate module
- Created calendarWidget.js (1002 lines)
- Reduced rightbar_calendar.html from 996 to 237 lines (76% reduction)
- Supports: FullCalendar integration, company/department calendars, recurring events
- Features: week list view, event CRUD, color picker, responsive design
- Export initCalendarWidget() function for reusability
- Updated components/index.js to export calendar widget (v1.1.0)
2025-10-28 10:59:05 +03:00
83cb1f067c docs(css): Update README with Phase 6 architecture
- Documented common.css (245 lines of shared classes)
- Explained dependency hierarchy: variables → common → feed-cards → components
- Added import order guidelines (critical for correct rendering)
- Documented naming conventions: BEM-like with prefixes
- Listed all eliminated duplication (.btn-icon, .badge-status, .chip, etc.)
- Added maintenance checklists and troubleshooting
- Preserved old README as README_OLD.md

Architecture now clear for all developers:
- Check common.css first before creating new classes
- Use variables.css for all sizing/colors
- Follow import order: variables → common → components
- 0% duplication, 100% maintainability
2025-10-28 10:40:00 +03:00