lizerk
d55657f7c3
feat(finance): expand payroll management and projections
2026-07-20 17:12:42 +03:00
lizerk
716c8337de
feat(finance): add native payroll management
2026-07-20 14:00:15 +03:00
lizerk
1f18ab7848
feat(finance): simplify payroll administration for pilot
2026-07-18 00:00:54 +03:00
lizerk
bb1694c584
feat(finance): add payroll core and management workspace
2026-07-17 23:35:29 +03:00
lizerk
df2377431d
feat: expand documents tasks and procurement workflows
2026-07-17 14:09:06 +03:00
lizerk
b9598c2731
feat(tasks): add notifications and wide board mode
2026-07-16 17:22:43 +03:00
lizerk
786987efe5
Stabilize Celery background jobs
2026-07-16 13:59:50 +03:00
lizerk
cb5b520e01
feat: add task board module
2026-07-06 13:47:03 +03:00
lizerk
cd3e52e1e9
feat: complete guest module
2026-06-22 15:01:28 +03:00
lizerk
dc35680156
feat: add guest module backend
2026-06-20 12:20:52 +03:00
lizerk
32500e3037
chore: checkpoint current project changes
2026-06-20 10:47:00 +03:00
lizerk
2b8e02e1f7
Update auth flows and chat pending messages
2026-05-28 19:12:05 +03:00
lizerk
fce272d352
procurement: add processing department workflow
2026-05-22 13:46:53 +03:00
lizerk
da218db805
Add attendance auto sync settings
2026-04-22 18:26:43 +03:00
lizerk
625468090b
Add persisted LogStorm attendance integration
2026-04-22 10:21:44 +03:00
lizerk
d5e4f6d577
Add LogStorm attendance client
2026-04-21 13:40:29 +03:00
lizerk
a46f040801
fix: refine pwa notifications and brand name
2026-04-16 21:17:51 +03:00
lizerk
f5a908e443
feat(auth): restore password reset flow and polish auth UI
2026-04-12 02:05:13 +03:00
lizerk
7dcf84dcd1
feat(auth): add session management and settings integration
2026-04-11 23:31:14 +03:00
lizerk
0833eb13ce
Исправил падение старта ASGI/JWT: перестроил порядок инициализации Django в ASGI и убрал ранние Django/SimpleJWT импорты из middleware.
2026-03-31 20:28:18 +03:00
lizerk
6ee32111db
chore: configure vscode flake8 and commit lint cleanup
2026-03-31 19:17:56 +03:00
lizerk
2815efe069
chore: finalize backend lint cleanup
2026-03-31 17:53:29 +03:00
lizerk
3f59f8ebb9
Add backend OpenAPI docs and clean test suite
2026-03-31 17:05:31 +03:00
lizerk
f88d90230b
refactor: clean architecture, align tests to current API contracts, all tests green [deploy-ready]
2026-03-30 04:27:18 +03:00
lizerk
bdd6e48c46
фикс мидлвари на регу
2026-03-30 02:23:59 +03:00
lizerk
4c5ea98743
админка+
2026-03-20 14:44:41 +03:00
lizerk
75662ec7ea
feat(ldap): Полная миграция на django-ldapdb ORM с миксинами и Django Admin
...
LDAP ORM модели (orm_models.py):
================================
✅ Применены миксины ModifyDnMixin и LdapSyncStateMixin ко всем моделям
✅ LdapUser - поддержка modify_dn + автоуправление LdapSyncState
✅ LdapGroup - поддержка modify_dn для перемещения групп
✅ LdapOrganizationalUnit - поддержка modify_dn для реорганизации
Миксины (mixins.py) - НОВЫЙ ФАЙЛ:
=================================
✅ ModifyDnMixin - автоматический modify_dn при изменении base_dn
• Отслеживает изменения base_dn
• Выполняет LDAP modify_dn с newsuperior
• Обновляет _saved_dn для корректного последующего save()
• Использование: user.base_dn = new_dn; user.save()
✅ LdapSyncStateMixin - автоуправление LdapSyncState
• Автоматически создает/обновляет LdapSyncState при save()
• Автоматически удаляет LdapSyncState при delete()
• Настройки: _sync_model_name, _sync_pk_field
Django Admin для LDAP (admin.py) - НОВЫЙ ФАЙЛ:
==============================================
✅ LdapUserAdmin - полноценная админка для LDAP пользователей
• List display: CN, SAM, email, Django Employee link, sync status
• Search: по CN, SAM, email, имени, фамилии
• Filters: по userAccountControl
• Actions синхронизации:
- sync_from_ldap_to_django (LDAP → Django)
- sync_from_django_to_ldap (Django → LDAP)
- show_sync_diff (сравнение данных)
• Fieldsets: идентификация, персональные данные, контакты, UAC, группы
• DN форматирование с подсветкой компонентов
• Sync status indicators с иконками
Django Admin для Employee (employees/admin.py):
===============================================
✅ Добавлены зеркальные actions синхронизации:
• sync_from_django_to_ldap - создание/обновление в LDAP
- Автоматическое создание LDAP пользователя если не существует
- Генерация временного пароля
- Установка is_ldap_managed = True
• sync_from_ldap_to_django - обновление из LDAP
• show_sync_diff - сравнение Django ↔ LDAP
✅ Импорт django.contrib.messages для уведомлений
Сервисы LDAP (services/):
=========================
✅ UserService - полная миграция на ORM для UPDATE операций
✅ GroupService - использование ORM для модификаций
✅ DepartmentService - ORM для обновления OU
✅ PositionService - ORM для групп позиций
Тесты (tests/unit/):
===================
✅ test_user_service.py - обновлены под ORM
✅ test_group_service.py - обновлены под ORM
✅ test_position_service.py - обновлены под ORM
✅ conftest.py - добавлены фикстуры для ORM моделей
Authentication (auth_backends.py):
=================================
✅ EmailOrPhoneBackend - добавлено подробное debug логирование
• Логирование email/phone lookup
• Логирование is_active проверки
• Логирование password check с hash prefix
✅ SuperuserOnlyBackend - добавлено debug логирование
• Логирование parent auth результата
• Логирование is_superuser проверки
API (api/auth/serializers.py):
==============================
✅ PhoneOrEmailTokenObtainPairSerializer - исправлен KeyError
• Добавлена проверка credentials перед super().validate()
• Явный AuthenticationFailed при отсутствии учетных данных
Middleware (middleware.py):
===========================
✅ Очистка от устаревшего кода (305 → 102 строки)
• ❌ Удалена EmailVerificationMiddleware (не используется)
• ❌ Удалена RegistrationIPRestrictionMiddleware (не используется)
• ❌ Удалены все ссылки на namespace 'auth_front'
• ✅ Возврат 403 для неавторизованных вместо редиректа
Settings (settings.py):
=======================
✅ LOGIN_URL изменен с 'auth_front:login' на '/admin/login/'
✅ Добавлено DEBUG логирование для:
• django.contrib.auth
• eusrr_backend.auth_backends
Миграции:
=========
✅ Удалены старые миграции LDAP моделей (0042, 0043)
✅ Добавлена миграция LdapSyncQueue (0042_ldapsyncqueue.py)
Документация:
=============
✅ ADMIN_GUIDE.md - руководство по использованию LDAP Admin
✅ docs/guides/ldap-orm-mixins-usage.md - usage guide для миксинов
✅ docs/completed/ldap-orm-create-support.md - документация ORM миграции
✅ docs/in-progress/LDAP_ORM_MIGRATION_PLAN.md - план миграции
Инфраструктура (__init__.py):
=============================
✅ Добавлен импорт admin для авторегистрации
✅ Экспорт ORM моделей (LdapUser, LdapGroup, LdapOrganizationalUnit)
ИТОГО:
======
• Полная миграция с ldap3 на django-ldapdb ORM для UPDATE/MOVE/DELETE
• Унификация: один подход для всех LDAP операций через модели
• Автоматизация: синхронизация состояния и перемещения через миксины
• UI: полноценный Django Admin для управления LDAP объектами
• Отладка: расширенное логирование аутентификации
• Чистота: удален устаревший код middleware и миграций
• Тесты: 29 passed, 0 failed, 18 skipped
Breaking Changes: НЕТ - обратная совместимость сохранена
2026-03-19 22:33:06 +03:00
lizerk
f15e8aca3f
feat(ldap): add LDAP sync retry queue with Celery
...
- Add LdapSyncQueue model for deferred LDAP operations
- Add Celery tasks: process_ldap_queue_item, process_ldap_queue
- Refactor all LDAP signals (employee, department, group, position)
to enqueue operations on DirectoryLdapError/DirectoryServiceError
- Add _queue.py helper for enqueuing with automatic Celery dispatch
- Add Celery Beat periodic task (every 60s) for queue processing
- Add management command: ldap_queue (status/retry/cleanup)
- Add migration 0043_ldap_sync_queue
- Add 18 tests covering model, tasks, signals, and enqueue logic
- Include LDAP services refactoring (base_service, constants,
user_login_service, user_mapper_service, user_password_service,
phone_utils)
2026-03-19 15:07:34 +03:00
lizerk
0539f50233
refactor: переход на строгий AD-only LDAP, регистрация + верификация email
...
- Удалён LDAP_SERVER_TYPE и все OpenLDAP ветки кода
- user_service.py: только AD (sAMAccountName, UAC, microsoft.modify_password)
- auth_backends.py: AD фильтры и атрибуты (objectCategory, objectGUID)
- Удалён server_configs.py (больше не нужен)
- Удалён OpenLDAP Docker окружение (docker-compose.ldap.yml, ldap/, QUICKSTART_LDAP.md)
- Фронтенд: мульти-шаговая регистрация, AvatarCropper 3:4, verify-email страница
- Убран CSRF для JWT API, IP-ограничения работают независимо
- Полевые ошибки регистрации с красной подсветкой на фронте
2026-03-19 00:48:13 +03:00
lizerk
2eb2da4c5a
feat(ldap): интеграция django-ldapdb ORM в employees/ldap/
...
Добавлена поддержка django-ldapdb для упрощения работы с LDAP через Django ORM.
Ключевые изменения:
- Установлен django-ldapdb==1.5.1 в requirements.txt
- Созданы LDAP ORM модели (LdapUser, LdapGroup, LdapOrganizationalUnit) в employees/ldap/orm_models.py
- Реализованы ORM сервисы для CRUD операций в employees/ldap/orm_services.py
- Настроен database router в eusrr_backend/db_routers.py
- Добавлена LDAP database конфигурация в settings.py
- Создана документация ORM_INTEGRATION.md
Архитектура:
✅ GET → Employee (PostgreSQL) - быстро
✅ POST/PUT/DELETE → LdapUser (django-ldapdb ORM) - просто
Преимущества:
- Django ORM вместо низкоуровневого ldap3
- Автоматическая валидация через Django fields
- Унифицированный CRUD API
- Меньше кода, больше удобства
Файлы:
+ employees/ldap/orm_models.py - LDAP ORM модели (LdapUser, LdapGroup, LdapOrganizationalUnit)
+ employees/ldap/orm_services.py - ORM сервисы (LdapOrmUserService, LdapOrmGroupService, LdapOrmDepartmentService)
+ employees/ldap/ORM_INTEGRATION.md - документация по интеграции
+ eusrr_backend/db_routers.py - database router для LDAP моделей
~ requirements.txt - добавлен django-ldapdb==1.5.1
~ eusrr_backend/settings.py - настроена LDAP database и router
2026-03-18 13:42:32 +03:00
lizerk
c5a8455421
feat: автоматическое создание EmployeeAction из заявок
...
- Добавлены сигналы в employees/signals.py для автоматизации создания кадровых событий
- Реализованы стратегии: немедленные (transfer, dismissal) и отложенные (vacation, sick_leave)
- Добавлены Celery tasks для отложенного создания событий и авто-возврата
- Настроен periodic task для очистки пропущенных возвратов
- Архитектура: employees (ядро) обрабатывает события из requests_app (модуль)
2026-03-17 20:34:14 +03:00
lizerk
6e566b1dee
фикс уведомлений через почту
2026-03-13 12:17:40 +03:00
lizerk
3910079223
фикс селоери
2026-03-13 12:09:20 +03:00
lizerk
9462f08825
оптимизация веб сокет
2026-03-12 00:42:10 +03:00
lizerk
51aecacf09
feat(communications): Refactor Chat model to universal GenericForeignKey
...
BREAKING CHANGES (backward compatible with data migration):
- Add context_object (GenericFK) to replace department FK
- Add flags (JSONField) to replace is_main boolean
- Add extra_data (JSONField) for extensibility
- Rename include_all_employees → include_all_users
NEW FEATURES:
- Generic context support (Department, Project, Team, etc.)
- Flexible flags system without migrations
- Settings-based participant resolver callback
- Zero data loss migrations (4 migrations)
MIGRATIONS:
- 0031: Add new fields (context_object, flags, extra_data)
- 0032: Migrate department → context_object (15 chats)
- 0033: Migrate is_main → flags['is_primary'] (15 chats)
- 0034: Rename include_all_employees → include_all_users
FILES CHANGED:
- models.py: Refactored Chat.get_participants() with callback support
- employees/utils.py: Added resolve_chat_participants() callback
- settings.py: Added COMMUNICATIONS_PARTICIPANT_RESOLVER setting
- verify_chat_migration.py: Command to verify data integrity
TESTED:
✅ All 32 chats migrated successfully
✅ Legacy department FK still works
✅ Context-based chats work (GenericFK)
✅ Global/private/announcement chats work
✅ Participants resolver callback works
2026-03-11 14:21:57 +03:00
lizerk
b6ad3c3469
fix: исправлен паттерн роутинга Celery задач уведомлений
...
Изменено: notifications.tasks.* → notifications.*
Проблема: задачи регистрируются как 'notifications.send_*',
а не 'notifications.tasks.send_*', поэтому старый паттерн
не совпадал и задачи шли в дефолтную очередь 'celery'.
Теперь задачи корректно роутятся в очередь 'notifications',
которую worker слушает с флагом -Q celery,notifications
2026-03-11 09:58:53 +03:00
lizerk
2bf1079280
фикс селери
2026-03-11 09:53:55 +03:00
lizerk
96e375cd6f
---------------------
2026-03-10 17:00:51 +03:00
lizerk
b0e88e8e8b
refactor(backend): migrate calendar_app to scheduling app
...
- Rename calendar_app → scheduling (integration app for django-scheduler)
- Move schedule_patch.py → scheduling/patch.py with improved logging
- Create scheduling.notifications system for django-scheduler events
- Add scheduling.rules for django-rules integration
- Remove unused calendar_app models and API (not registered in urls)
- Remove backend/api/v1/calendar/ (dead code)
- Remove old tests for calendar_app
- Add comprehensive documentation in scheduling/README.md
- Update settings.py: calendar_app.apps.CalendarAppConfig → scheduling.apps.SchedulingConfig
- Clean api/apps.py: remove schedule_patch import (now in scheduling.apps)
The scheduling app provides:
- Patches for django-scheduler bugs (byweekday fix)
- Notification system for calendar events
- Access rules via django-rules
- Auto-applies on Django startup
Closes integration of django-scheduler for EUSRR calendar system.
2026-03-10 15:21:28 +03:00
lizerk
4d985990f5
cleanup: удалить упоминания bots и hikcentral из settings.py
...
- Удалены logger для 'bots' и 'aiogram' (telegram bot библиотека)
- Почищены пустые папки bots/ и hikcentral/ оставшиеся после merge
- Все остальные упоминания уже удалены в feature ветке
Merge прошел корректно, просто git не удаляет пустые директории автоматически.
2026-03-10 14:28:01 +03:00
lizerk
d9a8e71e3a
refactor(notifications): сделать приложение полностью самодостаточным
...
Проблема:
- Service Worker файл (sw.js) находился в корне backend/
- Hardcoded пути к иконкам в sw.js и push.py (/static/img/logo-192.png)
- Функция serve_service_worker() в главном urls.py проекта
- Зависимость от project-specific структуры
- Невозможность переиспользовать приложение без изменений
Решение:
Service Worker на месте:
- backend/notifications/static/notifications/sw.js
- backend/notifications/views.py - serve_service_worker()
- backend/notifications/urls.py - добавлен endpoint sw.js
- backend/eusrr_backend/urls.py - импорт view из notifications
Удаление hardcoded путей:
- sw.js: убрана константа icon='/static/img/logo-192.png'
- senders/push.py: убран hardcoded 'icon': '/static/img/logo.png'
- config.py: добавлены PUSH_DEFAULT_ICON, PUSH_DEFAULT_BADGE (None = browser default)
- README.md: документация по настройке через NOTIFICATIONS_CONFIG
Изменения:
- Создан: notifications/views.py с serve_service_worker()
- Создан: notifications/static/notifications/sw.js
- Изменен: notifications/urls.py - добавлен path('sw.js')
- Изменен: notifications/config.py - настройки иконок
- Изменен: notifications/senders/push.py - использование config
- Изменен: notifications/README.md - документация
- Упрощен: eusrr_backend/urls.py - удалена функция, добавлен импорт
- Удалены: backend/sw.js, backend/static/sw.js, backend/communications/sw.js
Преимущества:
- ✅ Полностью автономное приложение
- ✅ Нет зависимостей от структуры проекта
- ✅ Конфигурируемые иконки через settings.py
- ✅ Browser defaults если иконки не указаны
- ✅ Легко переносить между проектами
- ✅ Единообразие архитектуры (SRP)
Верификация:
- python manage.py check - успешно
2026-03-10 13:58:53 +03:00
lizerk
0be01476fa
очень много лишнего удалил в частности ботов и хикцентрал
2026-03-10 13:42:45 +03:00
lizerk
0f8dcff4ad
лишнее из документов удалить
2026-03-10 13:37:59 +03:00
lizerk
ca80321034
лишнее в приложении коммуникаци удалить
2026-03-10 13:28:46 +03:00
lizerk
258ff58df1
поудалял лишнего
2026-03-10 13:18:57 +03:00
lizerk
a784212ea1
удалил лишнего из заявок и оборудования
2026-03-10 12:38:39 +03:00
lizerk
ed636081dc
refactor: complete notifications v2 system with frontend translation
...
- Remove hard-coded Russian translations from backend API
- Backend now returns raw verb values (language-agnostic)
- Implement frontend translation functions for notification titles and categories
- Add category badge system with filters on notifications page
- Create translation utilities in frontend (verbTranslations.ts)
- Add notification settings page structure
- Update API endpoints to return simplified notification data
- Refactor notification signals across all apps
- Remove deprecated code and tests
- Add comprehensive documentation for v2 migration
Backend changes:
- notifications/api/views.py: Remove translation logic, simplify responses
- All notification_signals.py: Update to use consistent patterns
- Remove deprecated Telegram bot command
- Update Celery tasks for new notification structure
Frontend changes:
- app/notifications/page.tsx: Add translation functions and category badges
- hooks/useNotificationWebSocket.ts: New WebSocket hook for real-time updates
- lib/verbTranslations.ts: Centralized translation mappings
- components/NotificationCenter.tsx: Update to use new API format
This makes the notifications module fully reusable and project-independent.
2026-03-09 21:35:36 +03:00
lizerk
675a719dba
Merge branch 'feature/django-filer-documents' into develop
...
# Conflicts:
# .github/copilot-instructions.md
# .gitignore
# backend/api/v1/documents/permissions.py
# backend/api/v1/documents/serializers.py
# backend/api/v1/documents/views.py
# backend/api/v1/urls.py
# backend/calendar_app/migrations/0013_migrate_to_django_scheduler.py
# backend/documents/admin.py
# backend/documents/models.py
# backend/documents/notification_signals.py
# backend/documents/rules.py
# backend/eusrr_backend/settings.py
# backend/eusrr_backend/settings_test.py
# backend/eusrr_backend/urls.py
# backend/notifications/management/commands/create_notification_types.py
# backend/notifications/services.py
# backend/pytest.ini
# backend/requirements.txt
# backend/search/search_indexes.py
# backend/tests/api/v1/documents/test_documents_api.py
# frontend/.gitignore
# frontend/package-lock.json
# frontend/package.json
# frontend/src/app/documents/page.tsx
# frontend/src/app/messages/[chatId]/page.tsx
# frontend/src/app/messages/page.tsx
# frontend/src/app/page.tsx
# frontend/src/app/requests/page.tsx
# frontend/src/app/search/page.tsx
# frontend/src/components/CalendarModal.tsx
# frontend/src/components/CalendarParticipantsModal.tsx
# frontend/src/components/CalendarSubscriptionsModal.tsx
# frontend/src/components/EventModal.tsx
# frontend/src/components/NewChatModal.tsx
# frontend/src/components/ViewDayEventsModal.tsx
# frontend/src/components/ViewEventDetailsModal.tsx
# frontend/src/lib/api.ts
# frontend/src/types/api.ts
2026-03-06 13:20:34 +03:00
lizerk
7d42fdac9d
feat(documents): интеграция django-filer для управления файлами
...
- Добавлена конфигурация django-filer в settings.py
- Настроены URL для filer admin
- Обновлен admin.py для работы с FilerFileField
- Обновлен индекс поиска для новой структуры
2026-03-06 12:21:56 +03:00
lizerk
6e4eabeb4e
test: Configure Celery for integration tests and setup Redis
...
- Add Celery synchronous execution settings for tests
* CELERY_TASK_ALWAYS_EAGER = True (no separate worker needed)
* CELERY_TASK_EAGER_PROPAGATES = True
* Use memory broker/backend for tests
- Add performance marker to pytest.ini
* Allows marking tests with @pytest.mark.performance
- Setup Redis server via systemd
* Enabled redis-server.service for autostart
* Redis runs on 127.0.0.1:6379
- Update .gitignore to exclude dump.rdb (Redis dump file)
Integration tests status:
- 26/47 tests passing (55%)
- 21 tests failing due to missing NotificationType fixtures
- Tests no longer hang (Celery executes synchronously)
Note: Integration tests require NotificationType fixtures to be created
before document operations trigger notification signals.
2026-03-05 11:49:55 +03:00