доработка

This commit is contained in:
2026-02-12 19:14:23 +05:00
parent 30dc1a7053
commit 139b53ffbd
4 changed files with 284 additions and 9 deletions

View File

@@ -1269,6 +1269,83 @@ app.get('/api/document-approval-tasks', requireAuth, (req, res) => {
});
});
});
// API для отправки конкретного исполнителя на доработку
app.put('/api/tasks/:taskId/rework-assignment/:userId', requireAuth, (req, res) => {
const { taskId, userId } = req.params;
const { comment } = req.body;
const currentUserId = req.session.user.id;
if (!comment) {
return res.status(400).json({ error: 'Комментарий к доработке обязателен' });
}
db.get("SELECT created_by, status FROM tasks WHERE id = ?", [taskId], (err, task) => {
if (err || !task) {
return res.status(404).json({ error: 'Задача не найдена' });
}
// Проверяем права: автор задачи или администратор
if (req.session.user.role !== 'admin' && parseInt(task.created_by) !== currentUserId) {
return res.status(403).json({ error: 'Только автор задачи может отправлять на доработку' });
}
db.serialize(() => {
// Обновляем статус конкретного исполнителя
db.run(
`UPDATE task_assignments
SET status = 'rework',
rework_comment = ?,
updated_at = CURRENT_TIMESTAMP
WHERE task_id = ? AND user_id = ?`,
[comment, taskId, userId],
function(err) {
if (err) {
res.status(500).json({ error: err.message });
return;
}
if (this.changes === 0) {
return res.status(404).json({ error: 'Исполнитель не найден в задаче' });
}
// Логируем действие
const { logActivity } = require('./database');
if (logActivity) {
logActivity(taskId, currentUserId, 'ASSIGNMENT_REWORK',
`Исполнитель ${userId} отправлен на доработку: ${comment}`);
}
// Получаем данные для уведомления
db.get(`SELECT t.title, t.description, u.name as executor_name
FROM tasks t
LEFT JOIN users u ON u.id = ?
WHERE t.id = ?`,
[userId, taskId], (err, taskData) => {
if (!err && taskData) {
const { sendTaskNotifications } = require('./notifications');
sendTaskNotifications(
'rework_assignment',
taskId,
taskData.title,
taskData.description,
currentUserId,
comment,
'rework',
req.session.user.name,
userId // ID исполнителя для персонального уведомления
);
}
});
res.json({
success: true,
message: 'Исполнитель отправлен на доработку'
});
}
);
});
});
});
app.post('/api/tasks/:taskId/files', requireAuth, upload.array('files', 15), (req, res) => {
const { taskId } = req.params;