- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/service/sprintservice.php
- Класс: BitrixTasksScrumServiceSprintService
- Вызов: SprintService::getSprintRanges
public function getSprintRanges(EntityForm $sprint, UtilCalendar $calendar): SprintRanges
{
$info = [
'all' => [],
'weekdays' => [],
'weekendInfo' => [],
'currentWeekDay' => 0,
];
$start = (new DateTime())->setTimestamp($sprint->getDateStart()->getTimestamp());
$end = (new DateTime())->setTimestamp($sprint->getDateEnd()->getTimestamp());
$currentDateTime = new Datetime();
$period = new DatePeriod($start, new DateInterval('P1D'), $end);
$weekDayNumber = 0;
foreach ($period as $key => $value)
{
$dayNumber = $key + 1;
$value->add(new DateInterval('PT9H'));
if ($calendar->isWeekend(UtilTypeDateTime::createFromTimestamp($value->getTimestamp())))
{
$info['weekendInfo'][$dayNumber] = [
'weekendNumber' => $dayNumber,
'previousWeekday' => ($weekDayNumber ? $weekDayNumber : 1)
];
}
else
{
$weekDayNumber = $dayNumber;
$info['weekdays'][$dayNumber] = $value->getTimestamp();
$weekDayRange = [
'start' => strtotime('today', $value->getTimestamp()),
'end' => strtotime('tomorrow', $value->getTimestamp()) - 1,
];
$currentDayRange = [
'start' => strtotime('today', $currentDateTime->getTimestamp()),
'end' => strtotime('tomorrow', $currentDateTime->getTimestamp()) - 1,
];
if ($this->isTimeOverlapping($weekDayRange, $currentDayRange))
{
$info['currentWeekDay'] = $dayNumber;
}
}
$info['all'][$dayNumber] = $value->getTimestamp();
}
$sprintRanges = new SprintRanges();
$sprintRanges->setAllDays($info['all']);
$sprintRanges->setWeekdays($info['weekdays']);
$sprintRanges->setWeekendInfo($info['weekendInfo']);
$sprintRanges->setCurrentWeekDay($info['currentWeekDay']);
return $sprintRanges;
}