• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/rest/controllers/scrum/kanban.php
  • Класс: BitrixTasksRestControllersScrumKanban
  • Вызов: Kanban::deleteStageAction
public function deleteStageAction(int $stageId): bool
{
	$stageId = (int) $stageId;
	if (!$stageId)
	{
		$this->errorCollection->add([new Error('Stage id not found')]);

		return false;
	}

	try
	{
		$queryObject = StagesTable::getById($stageId);
		if ($stage = $queryObject->fetch())
		{
			$sprintId = $stage['ENTITY_ID'];

			$sprintService = new SprintService();

			$sprint = $sprintService->getSprintById($sprintId);

			if (!$sprint->getId() || !$this->checkAccess($sprint->getGroupId()))
			{
				$this->errorCollection->add([new Error('Access denied')]);

				return false;
			}

			$queryObject = TaskStageTable::getList([
				'select' => ['TASK_ID'],
				'filter' => [
					'STAGE_ID' => $stage['ID'],
					'=STAGE.ENTITY_ID' => $sprint->getId(),
					'=STAGE.ENTITY_TYPE' => StagesTable::WORK_MODE_ACTIVE_SPRINT,
				]
			]);
			if ($queryObject->fetch())
			{
				$this->errorCollection->add([new Error('Stage has tasks')]);

				return false;
			}
			else
			{
				if ($stage['SYSTEM_TYPE'] == StagesTable::SYS_TYPE_NEW)
				{
					$result = StagesTable::update($stage['ID'], ['SYSTEM_TYPE' => '']);
					if (!$result->isSuccess())
					{
						$this->errorCollection->setError(new Error('System error'));

						return false;
					}
				}

				StagesTable::setWorkMode(StagesTable::WORK_MODE_ACTIVE_SPRINT);

				$res = StagesTable::delete($stage['ID'], $sprint->getId());
				if ($res && $res->isSuccess())
				{
					return true;
				}
				else
				{
					$this->errorCollection->setError(new Error('System error'));

					return false;
				}
			}
		}
		else
		{
			$this->errorCollection->setError(new Error('Stage not found'));

			return false;
		}
	}
	catch (Exception $exception)
	{
		$this->errorCollection->setError(new Error('System error'));

		return false;
	}
}