• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/processor/task/scheduler/relationmanager/project.php
  • Класс: BitrixTasksProcessorTaskSchedulerRelationManagerProject
  • Вызов: Project::updateRelatedTasks
private function updateRelatedTasks($id, array $relations)
{
	if(is_array($relations[$id]))
	{
		foreach($relations[$id] as $relation)
		{
			if($relation->isProcessed()) // already been here
			{
				continue;
			}

			$toTaskId = $relation->getTaskId();
			/** @var Impact $toTask */
			$toTask = $relation->getTask();

			$endDate = $toTask->getEndDatePlan();
			if(!$endDate) // somehow there are no end date, get out of here asap
			{
				continue;
			}

			$startDate = $relation->getMinDate();
			if (!$startDate)
			{
				continue;
			}
			$startDate = clone $startDate;

			$duration = $toTask->calculateDuration();

			$endDate = clone $startDate;
			$endDate->addSecond($duration);

			// set task dates here
			$toTask->setStartDatePlanUserTimeGmt($startDate->toStringGmt());
			$toTask->setEndDatePlanUserTimeGmt($endDate->toStringGmt());

			$toTask->correctWorkTime($startDate, $endDate, $duration);

			// update $relation lag
			$relation->updateLag();
			$relation->setProcessed();

			$this->updateRelatedTasks($toTaskId, $relations);
		}
	}
}