Игорь Надеин 769f2ed633 test: add comprehensive position permissions tests
Created pytest test suite to verify permission inheritance through positions:

Test Coverage:
1. User without position has no permissions (PASS)
2. User with position gets all group permissions (needs fix)
3. Position change updates permissions dynamically
4. Remove position removes all permissions
5. Multiple users with same position get same permissions
6. Staff users keep all permissions regardless
7. Multiple groups' permissions are additive
8. get_all_permissions() includes position perms
9. Position without groups grants no permissions (PASS)
10. Inactive users have no permissions
11. Direct user permissions + position permissions combine
12. Feed/Documents integration tests

Current Results:
- 3 tests PASSED (basic cases)
- 10 tests need fixing (fixture scope issues)

Purpose:
These tests will validate that PositionRoleBackend correctly
grants permissions from Position.groups to users, which is
needed for features like:
- Show 'Create Post' button for users with publishing rights
- Show 'Create Document' button for users with document rights
- Consistent permission checks across frontend and backend

Next Steps:
1. Fix IntegrityError in permission creation (use filter first)
2. Make fixtures work across test classes
3. Run tests to verify PositionRoleBackend implementation
4. If tests fail, fix the backend implementation
2025-12-08 13:54:28 +03:00
2025-11-27 17:23:13 +03:00

EUSRR - Корпоративная система управления

Комплексная корпоративная информационная система с интеграцией Active Directory/LDAP для управления сотрудниками, документами, заявками и внутренними коммуникациями.

Основные возможности

🏢 Управление сотрудниками

  • Интеграция с Active Directory через LDAP
  • Автоматическая синхронизация данных сотрудников
  • Управление отделами и должностями
  • Профили сотрудников с фотографиями и контактами
  • Иерархия отделов с назначением руководителей

📄 Система документооборота

  • Загрузка и распространение документов
  • Отправка документов всем сотрудникам, конкретным отделам или индивидуально
  • Автоматические уведомления о новых документах
  • Отслеживание ознакомления с документами
  • Визуальное выделение неознакомленных документов

📬 Система уведомлений

  • Веб-уведомления в реальном времени (WebSocket)
  • Email-уведомления с настраиваемой периодичностью (мгновенно, ежедневно, еженедельно)
  • Telegram-уведомления через бота
  • Индивидуальные настройки уведомлений для каждого пользователя
  • Звуковые оповещения о новых уведомлениях

📋 Система заявок

  • Создание и отслеживание заявок
  • Назначение ответственных отделов
  • История изменений заявок
  • Комментарии и обсуждения

💬 Внутренние коммуникации

  • Лента новостей организации
  • Посты с комментариями
  • Упоминания сотрудников (@mention)
  • Ленты новостей по отделам

📅 Календарь событий

  • Корпоративный календарь
  • События отделов и общеорганизационные события
  • Интеграция с календарем на главной странице

Технологический стек

Backend

  • Python 3.13.5
  • Django 5.2.4 - основной веб-фреймворк
  • Django REST Framework - REST API
  • Django Channels - WebSocket поддержка
  • PostgreSQL / SQLite - база данных
  • python-ldap - интеграция с Active Directory
  • Celery (опционально) - асинхронные задачи

Frontend

  • Bootstrap 5 - UI фреймворк
  • Vanilla JavaScript (ES6+) - модульная архитектура
  • WebSocket - реальное время
  • Fetch API - HTTP запросы

Интеграции

  • Active Directory (LDAP) - управление пользователями
  • Telegram Bot API - уведомления в Telegram
  • SMTP (Yandex) - email-рассылка
  • SMS Gateway - SMS-уведомления

Установка и запуск

Предварительные требования

  • Python 3.11+
  • PostgreSQL 14+ или SQLite (для разработки)
  • Active Directory (опционально, можно отключить через LDAP_ENABLED=False)
  • Git

Установка

  1. Клонирование репозитория:
git clone https://github.com/IgorNadein/EUSRR.git
cd EUSRR
  1. Создание виртуального окружения:
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# или
.venv\Scripts\activate  # Windows
  1. Установка зависимостей:
cd backend
pip install -r requirements.txt
  1. Настройка окружения:
# Скопируйте .env.example в .env и настройте параметры
cp .env.example .env

Основные параметры в .env:

# База данных
USE_SQLITE=True  # True для SQLite, False для PostgreSQL

# Django
SECRET_KEY=your-secret-key
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1

# LDAP (можно отключить)
LDAP_ENABLED=False  # True для интеграции с AD

# Email
EMAIL_HOST=smtp.yandex.ru
EMAIL_PORT=465
EMAIL_HOST_USER=your-email@yandex.ru
EMAIL_HOST_PASSWORD=your-password

# Telegram (опционально)
TELEGRAM_BOT_TOKEN=your-bot-token
  1. Применение миграций:
python manage.py migrate
  1. Создание суперпользователя:
python manage.py createsuperuser
  1. Сбор статических файлов:
python manage.py collectstatic --noinput

Запуск разработки

# Запуск сервера разработки
python manage.py runserver 9000

# В отдельном терминале - Telegram бот (опционально)
python manage.py run_telegram_bot

Приложение будет доступно по адресу: http://localhost:9000

Запуск в продакшене

  1. Настройте .env для продакшена:
DEBUG=False
USE_SQLITE=False
ALLOWED_HOSTS=your-domain.com
LDAP_ENABLED=True
  1. Используйте WSGI сервер (Gunicorn):
pip install gunicorn
gunicorn eusrr_backend.wsgi:application --bind 0.0.0.0:8000
  1. Настройте веб-сервер (Nginx) как reverse proxy

  2. Настройте supervisor/systemd для автозапуска

Структура проекта

EUSRR/
├── backend/                      # Django проект
│   ├── api/                      # REST API
│   │   └── v1/                   # API версия 1
│   │       ├── documents/        # API документов
│   │       ├── employees/        # API сотрудников
│   │       └── ...
│   ├── documents/                # Приложение документов
│   ├── employees/                # Приложение сотрудников
│   ├── notifications/            # Система уведомлений
│   ├── requests_app/             # Система заявок
│   ├── feed/                     # Лента новостей
│   ├── calendar_app/             # Календарь событий
│   ├── communications/           # Коммуникации
│   ├── static/                   # Статические файлы
│   │   ├── css/                  # Стили
│   │   └── js/                   # JavaScript модули
│   ├── templates/                # HTML шаблоны
│   ├── media/                    # Загруженные файлы
│   └── eusrr_backend/            # Настройки Django
└── README.md                     # Этот файл

Основные функции

Работа с документами

  1. Создание документа:

    • Загрузка файла
    • Выбор получателей (все/отделы/конкретные сотрудники)
    • Автоматические уведомления
  2. Отслеживание ознакомления:

    • Клик на документ автоматически отмечает ознакомление
    • Визуальное выделение неознакомленных документов
    • Ведомость ознакомлений для администраторов

Система уведомлений

  1. Веб-уведомления:

    • Звуковое оповещение
    • Счётчик непрочитанных
    • Список в реальном времени
  2. Email-уведомления:

    • Мгновенная отправка
    • Ежедневный дайджест
    • Еженедельный дайджест
  3. Telegram-уведомления:

    • Привязка аккаунта через код
    • Мгновенная отправка важных уведомлений

LDAP интеграция

  • Двусторонняя синхронизация данных
  • Создание пользователей в AD
  • Управление отделами через OU
  • Автоматическое обновление при изменениях

API Документация

REST API доступен по адресу /api/v1/

Основные эндпоинты:

  • /api/v1/employees/ - Сотрудники
  • /api/v1/departments/ - Отделы
  • /api/v1/documents/ - Документы
  • /api/v1/requests/ - Заявки
  • /api/v1/calendar/events/ - События календаря
  • /api/notifications/ - Уведомления

Документация API: /api/docs/ (если установлен drf-spectacular)

Разработка

Создание миграций

python manage.py makemigrations
python manage.py migrate

Запуск тестов

pytest
# или
python manage.py test

Линтинг кода

flake8 .
black .
isort .

Настройка уведомлений

Email

Настройте SMTP в .env:

EMAIL_HOST=smtp.yandex.ru
EMAIL_PORT=465
EMAIL_USE_SSL=true
EMAIL_HOST_USER=your-email@yandex.ru
EMAIL_HOST_PASSWORD=your-app-password
DEFAULT_FROM_EMAIL=Company <your-email@yandex.ru>

Telegram

  1. Создайте бота через @BotFather
  2. Получите токен
  3. Настройте в .env:
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_BOT_USERNAME=your_bot_name
  1. Запустите бота:
python manage.py run_telegram_bot

Отложенная отправка

Для дайджестов используйте команду:

python manage.py send_pending_notifications --batch-size=100

Настройте cron для автоматического запуска:

# Ежедневно в 9:00
0 9 * * * /path/to/python /path/to/manage.py send_pending_notifications

Безопасность

  • Используйте HTTPS в продакшене
  • Настройте CORS правильно
  • Используйте сильные пароли
  • Регулярно обновляйте зависимости
  • Настройте файрвол
  • Используйте переменные окружения для секретов

Документация и troubleshooting

Архитектура

Руководства по функциям

WebSocket диагностика

Рефакторинг и оптимизация

Лицензия

Проприетарное ПО © 2024-2025 Robotail

Контакты

Changelog

v2.0.0 (21.11.2025)

  • ✨ Добавлена возможность отправки документов на отделы
  • ✨ Визуальное выделение неознакомленных документов
  • ✨ Автоматическое ознакомление при клике на документ
  • ✨ Адаптивная мобильная версия
  • 🐛 Исправлена фильтрация "Мои документы" для загрузивших
  • 🐛 Исправлена ведомость ознакомлений с учётом отделов
  • 🔧 Добавлена поддержка массовых рассылок с порогом

v1.0.0

  • 🎉 Первый релиз
  • ✨ Базовая система документооборота
  • ✨ Интеграция с LDAP
  • ✨ Система уведомлений
  • ✨ Управление заявками
Description
Разработка — в develop; локальный CI работает через Git hooks и quality gates перед коммитом/пушем. После проверки — слияние в master. Push в master запускает blue-green деплой на CORP через Gitea Actions и Telegram-отчёт. Статус деплоя — «Действия».
https://corp.robotail.pro/ Readme 86 MiB
Languages
Python 47.6%
TypeScript 29.8%
JavaScript 15.7%
HTML 4.1%
SCSS 2.1%
Other 0.7%