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