• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/service/kanbanservice.php
  • Класс: BitrixTasksScrumServiceKanbanService
  • Вызов: KanbanService::addTasksToKanban
public function addTasksToKanban(int $sprintId, array $taskIds, int $lastSprintId = 0): bool
{
	try
	{
		if (empty($taskIds))
		{
			return false;
		}

		$defaultStageId = $this->getDefaultStageId($sprintId);
		if (!$defaultStageId)
		{
			$this->errorCollection->setError(
				new Error('Failed to get the default stage', self::ERROR_COULD_NOT_ADD_TASK)
			);

			return false;
		}

		$taskStageIdsMap = [];
		if ($lastSprintId)
		{
			$stageIdsMap = $this->getStageIdsMapBetweenTwoSprints($sprintId, $lastSprintId);
			if ($stageIdsMap)
			{
				$lastStages = $this->getStagesCompletedSprint($lastSprintId);
				foreach ($lastStages as $lastStage)
				{
					$taskIdsInLastSprint = $this->getTaskIds([
						'=STAGE.ENTITY_TYPE' => StagesTable::WORK_MODE_ACTIVE_SPRINT,
						'TASK_ID' => $taskIds,
						'STAGE_ID' => $lastStage['ID']
					]);
					if ($taskIdsInLastSprint)
					{
						foreach ($taskIdsInLastSprint as $taskIdInLastSprint)
						{
							$taskStageIdsMap[$taskIdInLastSprint] = $stageIdsMap[$lastStage['ID']];
						}
					}
				}
			}
		}

		$this->removeTasksFromKanban($sprintId, $taskIds);

		foreach ($taskIds as $taskId)
		{
			$stageId = ($taskStageIdsMap[$taskId] ?? $defaultStageId);

			TaskStageTable::add([
				'TASK_ID' => $taskId,
				'STAGE_ID' => $stageId,
			]);

			$taskObject = new CTasks;
			$taskObject->update($taskId, ['STAGE_ID' => $stageId]);
		}

		return true;
	}
	catch (Exception $exception)
	{
		$this->errorCollection->setError(
			new Error($exception->getMessage(), self::ERROR_COULD_NOT_ADD_TASK)
		);

		return false;
	}
}