...Человеческий поиск в разработке...
- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/processor/task/scheduler/relationmanager/project/relation.php
- Класс: BitrixTasksProcessorTaskSchedulerRelationManagerProjectRelation
- Вызов: Relation::updateLag
public function updateLag() { if (!$this->getTask() || !$this->getParentTask()) { return; } $parentTask = $this->getParentTask(); $parentPristineData = $parentTask->getDataPristine(); $task = $this->getTask(); $calendar = Calendar::getInstance(); // head task was already changed outside this worker, but we need to get original lag, so use pristine dates if (!empty($parentPristineData) && $parentTask->isHead()) { $fromTaskDateStart = $parentPristineData['START_DATE_PLAN_GMT']; $fromTaskDateEnd = $parentPristineData['END_DATE_PLAN_GMT']; } else { $fromTaskDateStart = $parentTask->getStartDatePlanGmt(true); $fromTaskDateEnd = $parentTask->getEndDatePlanGmt(); } $toTaskDateStart = $task->getStartDatePlanGmt(true); $toTaskDateEnd = $task->getEndDatePlanGmt(); $matchWorkTime = $task->getMatchWorkTime(); if ($this->getType() == ProjectDependenceTable::LINK_TYPE_START_START) { if (!isset($fromTaskDateStart, $toTaskDateStart)) { return; } if ($matchWorkTime) { $lag = $calendar->calculateDuration($fromTaskDateStart, $toTaskDateStart); } else { $lag = $toTaskDateStart->getTimestamp() - $fromTaskDateStart->getTimestamp(); } } else if ($this->getType() == ProjectDependenceTable::LINK_TYPE_START_FINISH) { if (!isset($fromTaskDateStart, $toTaskDateEnd)) { return; } if ($matchWorkTime) { $lag = $calendar->calculateDuration($fromTaskDateStart, $toTaskDateEnd); } else { $lag = $toTaskDateEnd->getTimestamp() - $fromTaskDateStart->getTimestamp(); } } else if ($this->getType() == ProjectDependenceTable::LINK_TYPE_FINISH_FINISH) { if (!isset($fromTaskDateEnd, $toTaskDateEnd)) { return; } if ($matchWorkTime) { $lag = $calendar->calculateDuration($fromTaskDateEnd, $toTaskDateEnd); } else { $lag = $toTaskDateEnd->getTimestamp() - $fromTaskDateEnd->getTimestamp(); } } else { if (!isset($fromTaskDateEnd, $toTaskDateStart)) { return; } if ($matchWorkTime) { $lag = $calendar->calculateDuration($fromTaskDateEnd, $toTaskDateStart); } else { $lag = $toTaskDateStart->getTimestamp() - $fromTaskDateEnd->getTimestamp(); } } $this->lag = $lag; }