доработка
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user