• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/util/scheduler.php
  • Класс: BitrixTasksUtilis
  • Вызов: is::updateLag
protected function updateLag(&$relation)
{
	if($relation['FROM_TASK_ID'] == $this->taskId && !empty($this->taskOriginDates))
	{
		$fromTaskDateStart = 	$this->taskOriginDates['START_DATE_PLAN'];
		$fromTaskDateEnd = 		$this->taskOriginDates['END_DATE_PLAN'];
	}
	else
	{
		$fromTaskDateStart = 	$this->taskPool[$relation['FROM_TASK_ID']]->getStartDatePlanGmt(true);
		$fromTaskDateEnd = 		$this->taskPool[$relation['FROM_TASK_ID']]->getEndDatePlanGmt();
	}

	$toTaskDateStart = 		$this->taskPool[$relation['TASK_ID']]->getStartDatePlanGmt(true);
	$toTaskDateEnd = 		$this->taskPool[$relation['TASK_ID']]->getEndDatePlanGmt();

	/*
	print_r($relation['FROM_TASK_ID'].' => '.$relation['TASK_ID'].PHP_EOL);
	print_r('From task date start '.$fromTaskDateStart->toStringGmt().' '.$fromTaskDateStart->getTimeStamp().PHP_EOL);
	print_r('From task date end '.$fromTaskDateEnd->toStringGmt().' '.$fromTaskDateEnd->getTimeStamp().PHP_EOL);
	print_r('To task date start '.$toTaskDateStart->toStringGmt().' '.$toTaskDateStart->getTimeStamp().PHP_EOL);
	print_r('To task date end '.$toTaskDateEnd->toStringGmt().' '.$toTaskDateEnd->getTimeStamp().PHP_EOL);
	*/

	$matchWorkTime = $this->taskPool[$relation['TASK_ID']]['MATCH_WORK_TIME'] == 'Y';

	if ($relation['TYPE'] == DependenceTable::LINK_TYPE_START_START)
	{
		if ($matchWorkTime)
		{
			$lag = $this->calendar->calculateDuration($fromTaskDateStart, $toTaskDateStart);
		}
		else
		{
			$lag = $toTaskDateStart->getTimestamp() - $fromTaskDateStart->getTimestamp();
		}
	}
	else if ($relation['TYPE'] == DependenceTable::LINK_TYPE_START_FINISH)
	{
		if ($matchWorkTime)
		{
			$lag = $this->calendar->calculateDuration($fromTaskDateStart, $toTaskDateEnd);
		}
		else
		{
			$lag = $toTaskDateEnd->getTimestamp() - $fromTaskDateStart->getTimestamp();
		}
	}
	else if ($relation['TYPE'] == DependenceTable::LINK_TYPE_FINISH_FINISH)
	{
		if ($matchWorkTime)
		{
			$lag = $this->calendar->calculateDuration($fromTaskDateEnd, $toTaskDateEnd);
		}
		else
		{
			$lag = $toTaskDateEnd->getTimestamp() - $fromTaskDateEnd->getTimestamp();
		}
	}
	else
	{
		if ($matchWorkTime)
		{
			$lag = $this->calendar->calculateDuration($fromTaskDateEnd, $toTaskDateStart);
		}
		else
		{
			$lag = $toTaskDateStart->getTimestamp() - $fromTaskDateEnd->getTimestamp();
		}
	}

	$relation['LAG'] = $lag;
}