• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/service/sprintservice.php
  • Класс: BitrixTasksScrumServiceSprintService
  • Вызов: SprintService::getCompletedTasksMap
public function getCompletedTasksMap(
	SprintRanges $sprintRanges,
	TaskService $taskService,
	array $completedTaskIds
): array
{
	$mapCompletedTasks = [];

	$sprintDayRanges = [];
	$taskCompleteTimeDayRanges = [];

	foreach ($sprintRanges->getAllDays() as $dayNumber => $dayTime)
	{
		$mapCompletedTasks[$dayNumber] = [];

		$sprintDayRanges[$dayNumber] = [
			'start' => strtotime('today', $dayTime),
			'end' => strtotime('tomorrow', $dayTime) - 1
		];
	}

	foreach ($completedTaskIds as $completedTaskId)
	{
		$taskClosedDate = $taskService->getTaskClosedDate($completedTaskId);
		if ($taskClosedDate)
		{
			$taskClosedTime = $taskClosedDate->getTimestamp();
		}
		else
		{
			$taskClosedTime = $sprintRanges->getLastSprintDayTime();
		}

		$taskCompleteTimeDayRanges[$completedTaskId] = [
			'start' => strtotime('today', $taskClosedTime),
			'end' => strtotime('tomorrow', $taskClosedTime) - 1
		];
	}

	foreach ($sprintDayRanges as $dayNumber => $sprintDayRange)
	{
		foreach ($taskCompleteTimeDayRanges as $completedTaskId => $taskCompleteTimeDayRange)
		{
			if ($this->isTimeOverlapping($sprintDayRange, $taskCompleteTimeDayRange))
			{
				$mapCompletedTasks[$dayNumber][] = $completedTaskId;
			}
		}
	}

	return $mapCompletedTasks;
}