bp/TASKS_MODULE_ROADMAP.md

122 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План доработки модуля Tasks
> На основе ТЗ п.3.6
---
## Этап 1: RBAC + валидация (Готово ✅)
- [x] `canCreate()` в create(), store()
- [x] `canEdit()` в edit(), update(), moveColumn(), complete(), reopen()
- [x] `canDelete()` в destroy()
- [x] Валидация в store(), update()
- [x] Исправлен нейминг событий: `task.*` (singular)
---
## Этап 2: Подзадачи (Subtasks) - Готово ✅
### 2.1 Миграция
```php
task_subtasks (id, task_id, title, is_completed, order_index, created_at)
```
### 2.2 Модель + API
- TaskSubtaskModel
- addSubtask(), toggleSubtask(), deleteSubtask()
### 2.3 View
- Отображение подзадач в task/show.twig
- Чекбоксы для toggle
Commit: cee6c63, 5bf25d9, 85a920b, f6aebd8
---
## Этап 3: Вложения (Attachments) - Готово ✅ (общий сервис)
### 3.1 Общий AttachmentService
```
app/Services/AttachmentService.php
app/Models/AttachmentModel.php
app/Database/Migrations/2026-02-08-120000_CreateAttachmentsTable.php
```
### 3.2 Структура таблицы
```
attachments (id, entity_type, entity_id, file_name, file_path, file_size, file_type, uploaded_by, timestamps)
```
### 3.3 Использование
Любой модуль может использовать AttachmentService:
```php
$attachmentService->upload('task', $taskId, $file, $userId);
$attachmentService->getByEntity('deal', $dealId);
$attachmentService->delete('contact', $contactId, $attachmentId, $userId);
```
### 3.4 Twig функции
- `format_filesize($bytes)` - форматирование размера файла
- `get_file_icon($fileType)` - иконка типа файла
Commit: 052560c
---
## Этап 4: Комментарии + @mentions
### 4.1 Миграция
```php
task_comments (id, task_id, user_id, content, mentioned_users(JSON), created_at)
```
### 4.2 Обработка @mentions
- Парсинг `@user_id` из текста
- Создание уведомлений для упомянутых
---
## Этап 5: Зависимости задач
### 5.1 Миграция
```php
task_dependencies (id, blocking_task_id, blocked_task_id, type)
```
### 5.2 Логика
- Проверка при completeTask(): если есть незавершённые blocking tasks — ошибка
---
## Этап 6: Интеграция CRM → Tasks
### 6.1 Events
```php
Events::on('deal.created') создать задачу "Первичный контакт"
Events::on('deal.stage_changed') при этапе "КП" создать задачу
Events::on('deal.won') создать задачу "Благодарность клиенту"
```
---
## Этап 7: Интеграция Booking → Tasks
```php
Events::on('booking.created') создать задачу "Подготовка к встрече"
```
---
## Приоритеты
| Этап | Задача | Оценка | Статус |
|------|--------|--------|--------|
| 1 | RBAC + валидация | 4ч | ✅ Готово |
| 2 | Подзадачи | 8ч | ✅ Готово |
| 3 | Вложения | 8ч | ✅ Готово |
| 4 | Комментарии + @mentions | 12ч | В процессе |
| 5 | Зависимости | 6ч | - |
| 6 | CRM → Tasks | 8ч | - |
| 7 | Booking → Tasks | 4ч | - |
**Готово:** 20ч | **Осталось:** ~30ч