137 lines
5.4 KiB
Markdown
137 lines
5.4 KiB
Markdown
# 📋 ПЛАН РАБОТ: Модульность конфигурации
|
||
|
||
## Цель
|
||
Перенести все константы (настройки) в отдельный файл `config.py` для удобства редактирования человеком, не знакомым с Python.
|
||
|
||
---
|
||
|
||
## Этап 1: Создание файла конфигурации
|
||
|
||
**Файл:** `config.py`
|
||
|
||
**Что перенести:**
|
||
- **Настройки дня**
|
||
- Год (`year = 2026`)
|
||
- Месяц (`month = 4`)
|
||
|
||
- **Смены (`SHIFTS`)**
|
||
- С 06:00 до 14:30 (смена 0)
|
||
- С 08:00 до 16:30 (смена 1)
|
||
- С 11:30 до 20:00 (смена 2)
|
||
- С 12:30 до 21:00 (смена 3)
|
||
|
||
- **Операторы (`OPERATORS`)**
|
||
- Иванов
|
||
- Алексеев
|
||
- Сидоров
|
||
- Козобородов
|
||
- Трудяшкина
|
||
- Петрова
|
||
|
||
- **Предпочтения операторов (`OPERATOR_PREFERENCES`)**
|
||
- Иванов: 10, 13 апреля
|
||
- Алексеев: понедельники
|
||
- Сидоров: 25, 26 апреля
|
||
- Козобородов: смена 2 (11:30–20:00)
|
||
- Трудяшкина: 4 апреля
|
||
- Петрова: 8, 29 апреля
|
||
|
||
**Как редактировать:**
|
||
1. Откройте `config.py` в текстовом редакторе
|
||
2. Изменяйте значения в квадратных скобках или кавычках
|
||
3. Для добавления/удаления дней используйте списки `[25, 26]`
|
||
4. Сохраните файл
|
||
|
||
---
|
||
|
||
## Этап 2: Обновление `models.py`
|
||
|
||
**Что делать:**
|
||
- Удалить все константы из `models.py`
|
||
- Добавить импорт: `from config import *`
|
||
- Удалить определения `SHIFTS`, `OPERATORS`, `OPERATOR_PREFERENCES`
|
||
|
||
---
|
||
|
||
## Этап 3: Обновление `main.py`
|
||
|
||
**Что делать:**
|
||
- Удалить встроенную генерацию дат
|
||
- Использовать импорт из `config.py`
|
||
- Добавить вывод в CSV
|
||
|
||
---
|
||
|
||
## Этап 4: Создание класса предпочтений операторов
|
||
|
||
**Файл:** `models.py` (или отдельный файл `preferences.py`)
|
||
|
||
**Что сделать:**
|
||
- Создать класс `OperatorPreferences` для конструирования и управления предпочтениями операторов.
|
||
- Реализовать цепочку методов (builder pattern) for удобного создания предпочтений.
|
||
- Поддержать следующие типы предпочтений:
|
||
- Желаемый рабочий день (конкретные даты месяца)
|
||
- Желаемая смена (индекс смены 0-3)
|
||
- Желаемый день недели для работы (понедельник, вторник, ...)
|
||
- Желаемый выходной (конкретные даты месяца)
|
||
- Реализовать метод `__str__` для отладки.
|
||
- Обеспечить экспорт предпочтений в формат, пригодный для `config.py`.
|
||
|
||
**Требования к реализации:**
|
||
- Класс должен позволять конструировать предпочтения через цепочку методов.
|
||
- Поддерживать три типа предпочтений (как указано выше).
|
||
- Экспортировать предпочтения в формат, пригодный для `config.py`.
|
||
- Поддерживать метод `__str__` для отладки.
|
||
|
||
---
|
||
|
||
## Этап 5: Создание документации
|
||
|
||
**Файл:** `USER_GUIDE.md`
|
||
|
||
**Что включить:**
|
||
- Как изменить даты
|
||
- Как добавить/удалить операторов
|
||
- Как изменить смены
|
||
- Как добавить новые предпочтения
|
||
|
||
---
|
||
|
||
## Этап 6: Тестирование
|
||
|
||
**Проверить:**
|
||
1. Запуск `python main.py`
|
||
2. Корректное считывание дат из `config.py`
|
||
3. Генерация расписания
|
||
4. Вывод в CSV
|
||
5. Корректная работа класса `OperatorPreferences`
|
||
6. Экспорт предпочтений в `config.py`
|
||
|
||
---
|
||
|
||
## Этап 7: Написание тестов
|
||
|
||
**Файл:** `tests/test_all.py`
|
||
|
||
**Что сделать:**
|
||
- Создать тесты для всех модулей проекта
|
||
- Использовать pytest для запуска тестов
|
||
- Проверить корректность работы всех компонентов
|
||
- Добавить тесты для edge-кейсов
|
||
|
||
**Структура тестов:**
|
||
- `test_config.py` - тесты для конфигурации
|
||
- `test_models.py` - тесты для моделей и предпочтений
|
||
- `test_main.py` - тесты для основного скрипта
|
||
- `test_integration.py` - интеграционные тесты
|
||
|
||
---
|
||
|
||
## Результат
|
||
- Конфигурация в одном файле `config.py`
|
||
- Простое редактирование без знания Python
|
||
- Четкая документация в `USER_GUIDE.md`
|
||
- Гибкая система предпочтений через класс `OperatorPreferences`
|
||
- Полноценный набор тестов для всех компонентов
|
||
|