• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/controllers/sprint.php
  • Класс: BitrixTasksScrumControllersSprint
  • Вызов: Sprint::getDataForSprintCompletionFormAction
public function getDataForSprintCompletionFormAction(int $groupId): ?array
{
	$userId = User::getId();

	$entityService = new EntityService();
	$sprintService = new SprintService($userId);
	$itemService = new ItemService();
	$taskService = new TaskService($userId);
	$kanbanService = new KanbanService();
	$userService = new UserService();

	$sprint = $sprintService->getActiveSprintByGroupId($groupId);
	if ($sprint->isEmpty())
	{
		$this->errorCollection->setError(
			new Error(
				Loc::getMessage('TSSC_ERROR_COULD_NOT_READ_ACTIVE_SPRINT'),
				self::ERROR_COULD_NOT_READ_ACTIVE_SPRINT
			)
		);

		return null;
	}

	$sprintData = $sprintService->getSprintData($sprint);

	$sprintCounters = $entityService->getCounters(
		$groupId,
		$sprint->getId(),
		$taskService,
		false
	);

	$sprintData['storyPoints'] = $sprintCounters['storyPoints'];

	$taskIds = $sprintCounters['taskIds'];
	$uncompletedTaskIds = $kanbanService->getUnfinishedTaskIdsInSprint($sprint->getId());

	$uncompletedTasks = [];
	$epics = [];
	foreach ($entityService->getItems($sprint->getId()) as $itemObject)
	{
		$item = new ItemForm();

		$item->fillFromDatabase($itemObject->collectValues());

		$itemData = $itemService->getItemData($item);

		if (in_array($item->getSourceId(), $taskIds))
		{
			if ($itemData['epicId'])
			{
				$epicData = $this->getEpicData($itemData['epicId']);
				if ($epicData)
				{
					$itemData['epic'] = $epics[$itemData['epicId']] = $epicData;
				}
			}
		}

		if (in_array($item->getSourceId(), $uncompletedTaskIds))
		{
			$uncompletedTasks[$item->getSourceId()] = $itemData;
		}
	}
	$sprintData['epics'] = array_values($epics);

	$uncompletedTasksIds = array_keys($uncompletedTasks);
	foreach ($taskService->getItemsData($uncompletedTasksIds) as $taskId => $taskData)
	{
		if (isset($taskData['responsibleId']))
		{
			$taskData['responsible'] = $userService->getInfoAboutUsers([$taskData['responsibleId']]);
		}

		$taskData['tags'] = [];

		$uncompletedTasks[$taskId] = array_merge($uncompletedTasks[$taskId], $taskData);
	}
	foreach ($taskService->getTags($uncompletedTasksIds) as $taskId => $tags)
	{
		$uncompletedTasks[$taskId]['tags'] = $tags;
	}
	$sprintData['uncompletedTasks'] = array_values($uncompletedTasks);

	$completedStoryPoints = $sprintService->getCompletedStoryPoints(
		$sprint,
		$kanbanService,
		$itemService
	);
	$sprintData['completedStoryPoints'] = $completedStoryPoints;

	$lastStoryPoints = 0;
	$lastCompletedStoryPoints = 0;
	$lastCompletedSprint = $sprintService->getLastCompletedSprint($groupId);
	if (!$lastCompletedSprint->isEmpty())
	{
		$sprintData['existsLastSprint'] = true;

		$lastCompletedStoryPoints = $sprintService->getCompletedStoryPoints(
			$lastCompletedSprint,
			$kanbanService,
			$itemService
		);
		$lastStoryPoints = $completedStoryPoints
			+ $sprintService->getUnCompletedStoryPoints(
				$lastCompletedSprint,
				$kanbanService,
				$itemService
			);
	}
	else
	{
		$sprintData['existsLastSprint'] = false;
	}
	$sprintData['lastStoryPoints'] = $lastStoryPoints;
	$sprintData['lastCompletedStoryPoints'] = $lastCompletedStoryPoints;

	$sprintData['plannedSprints'] = [];
	foreach ($sprintService->getPlannedSprints($groupId) as $plannedSprint)
	{
		$sprintData['plannedSprints'][] = [
			'id' => $plannedSprint->getId(),
			'name' => $plannedSprint->getName(),
		];
	}

	$culture = Context::getCurrent()->getCulture();

	$sprintData['culture'] = [
		'dayMonthFormat' => $culture->getDayMonthFormat(),
		'longDateFormat' => $culture->getLongDateFormat(),
		'shortTimeFormat' => $culture->getShortTimeFormat(),
	];

	return $sprintData;
}