• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/util/scheduler.php
  • Класс: BitrixTasksUtilis
  • Вызов: is::getMinDate
protected function getMinDate(array $relation)
{
	$toTaskId = 	$relation['TASK_ID'];
	$fromTaskID = 	$relation['FROM_TASK_ID'];

	$toTask = 		$this->taskPool[$toTaskId];
	$fromTask = 	$this->taskPool[$fromTaskID];
	$matchWorkTime = $this->taskPool[$toTaskId]['MATCH_WORK_TIME'] == 'Y';

	$startDate = null;
	$duration = $toTask->calculateDuration();

	if ($relation['TYPE'] == DependenceTable::LINK_TYPE_START_START)
	{
		$startDate = $fromTask->getStartDatePlanGmt(true);
	}
	else if ($relation['TYPE'] == DependenceTable::LINK_TYPE_START_FINISH)
	{
		if ($matchWorkTime)
		{
			$startDate = $this->calendar->calculateStartDate($fromTask->getStartDatePlanGmt(true), $duration);
		}
		else
		{
			$startDate = clone $fromTask->getStartDatePlanGmt(true);
			$startDate->addSecond(-$duration);
		}

	}
	else if ($relation['TYPE'] == DependenceTable::LINK_TYPE_FINISH_FINISH)
	{
		if ($matchWorkTime)
		{
			$startDate = $this->calendar->calculateStartDate($fromTask->getEndDatePlanGmt(), $duration);
		}
		else
		{
			$startDate = clone $fromTask->getEndDatePlanGmt();
			$startDate->addSecond(-$duration);
		}
	}
	else
	{
		$startDate = $fromTask->getEndDatePlanGmt();
	}

	$startDate = clone $startDate;

	if ($matchWorkTime)
	{
		return $relation['LAG'] > 0 ?
			$this->calendar->calculateEndDate($startDate, $relation['LAG']) :
			$this->calendar->calculateStartDate($startDate, abs($relation['LAG']));
	}
	else
	{
		$startDate->addSecond($relation['LAG']);
		return $startDate;
	}
}