- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/controllers/task.php
- Класс: BitrixTasksScrumControllersTask
- Вызов: Task::needUpdateTaskStatusAction
public function needUpdateTaskStatusAction(int $taskId, string $action): bool
{
$taskId = (int) $taskId;
$userId = User::getId();
$action = $action === 'complete'
? ActionDictionary::ACTION_TASK_COMPLETE
: ActionDictionary::ACTION_TASK_RENEW
;
if (!TaskAccessController::can($userId, $action, $taskId))
{
return false;
}
$queryObject = TaskTable::getList([
'filter' => [
'ID' => $taskId,
],
'select' => ['STATUS'],
]);
if ($taskData = $queryObject->fetch())
{
if (
!(
(
(int)$taskData['STATUS'] === Status::COMPLETED
&& $action === ActionDictionary::ACTION_TASK_RENEW
)
|| (
(int)$taskData['STATUS'] !== Status::COMPLETED
&& $action === ActionDictionary::ACTION_TASK_COMPLETE
)
)
)
{
return false;
}
}
$isAllChildTasksCompleted = true;
$queryObject = TaskTable::getList([
'select' => ['ID', 'STATUS', 'PARENT_ID'],
'filter' => [
'PARENT_ID' => $taskId,
],
'order' => ['ID' => 'ASC']
]);
while ($childTaskData = $queryObject->fetch())
{
if ((int)$childTaskData['STATUS'] !== Status::COMPLETED)
{
$isAllChildTasksCompleted = false;
}
}
if ($action === ActionDictionary::ACTION_TASK_COMPLETE && $isAllChildTasksCompleted)
{
return true;
}
if ($action === ActionDictionary::ACTION_TASK_RENEW && !$isAllChildTasksCompleted)
{
return true;
}
return false;
}