• Модуль: 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;
}