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

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

	$sprint = $sprintService->getSprintById($sprintId);
	if ($sprint->isEmpty())
	{
		$this->errorCollection->setError(
			new Error(
				Loc::getMessage('TSSC_ERROR_COULD_NOT_READ_SPRINT'),
				self::ERROR_COULD_NOT_READ_SPRINT
			)
		);

		return null;
	}

	$sprintData = $sprintService->getSprintData($sprint);
	$sprintData['dateStart'] = ConvertTimeStamp($sprintData['dateStart']);
	$sprintData['dateEnd'] = ConvertTimeStamp($sprintData['dateEnd']);

	$sprintCounters = $entityService->getCounters(
		$groupId,
		$sprint->getId(),
		$taskService
	);
	$sprintData['numberTasks'] = $sprintCounters['countTotal'];
	$sprintData['storyPoints'] = (float) $sprintCounters['storyPoints'];
	$sprintData['numberUnevaluatedTasks'] = 0;

	$taskIds = $sprintCounters['taskIds'];

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

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

		if (in_array($item->getSourceId(), $taskIds))
		{
			$itemData = $itemService->getItemData($item);

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

			if ($item->getStoryPoints() === '')
			{
				$sprintData['numberUnevaluatedTasks']++;
			}
		}
	}
	$sprintData['epics'] = array_values($epics);

	$lastStoryPoints = 0;
	$lastCompletedSprint = $sprintService->getLastCompletedSprint($groupId);
	if (!$lastCompletedSprint->isEmpty())
	{
		$lastStoryPoints = $sprintService->getCompletedStoryPoints(
				$lastCompletedSprint,
				$kanbanService,
				$itemService
			)
			+ $sprintService->getUnCompletedStoryPoints(
				$lastCompletedSprint,
				$kanbanService,
				$itemService
			);
	}
	$differenceStoryPoints = $sprintData['storyPoints'] - $lastStoryPoints;
	$sprintData['differenceMarker'] = $differenceStoryPoints >= 0;
	$sprintData['differenceStoryPoints'] = ($differenceStoryPoints > 0 ? '+' : '') . $differenceStoryPoints;

	return $sprintData;
}