- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/integration/crm/timelinemanager.php
- Класс: BitrixTasksIntegrationCRMTimeLineManager
- Вызов: TimeLineManager::onTaskUpdated
public function onTaskUpdated(TaskObject $taskBeforeUpdate): self
{
if (!$this->isAvailable())
{
return $this;
}
if (is_null($this->taskRepository->getTask()))
{
return $this;
}
if (empty($taskBeforeUpdate->getCrmFields()) && empty($this->taskRepository->getTask()->getCrmFields()))
{
return $this;
}
if (!empty($taskBeforeUpdate->getCrmFields()) && empty($this->taskRepository->getTask()->getCrmFields()))
{
$this->eventsController->addEvent(new OnTaskBindingsUpdated($this->taskRepository->getTask(), $this->userId));
return $this;
}
// deadline changed
$currDeadLine = $this->taskRepository->getTask()->getDeadline() ? $this->taskRepository->getTask()->getDeadline()->toString() : null;
$prevDeadLine = $taskBeforeUpdate->getDeadline() ? $taskBeforeUpdate->getDeadline()->toString() : null;
if ($currDeadLine !== $prevDeadLine)
{
$this->eventsController->addEvent(new OnTaskDeadLineChanged($this->taskRepository->getTask(), $taskBeforeUpdate, $this->userId));
}
// status changed
$currentStatus = (int)$this->taskRepository->getTask()->getRealStatus();
$previousStatus = (int)$taskBeforeUpdate->getStatus();
if (
$currentStatus !== $previousStatus
&& $currentStatus > 0
&& $previousStatus > 0
)
{
$this->eventsController->addEvent(
new OnTaskStatusChanged($this->taskRepository->getTask(), $currentStatus, $previousStatus, $this->userId)
);
}
if ($currentStatus !== $previousStatus && (int)$currentStatus === Status::COMPLETED)
{
$this->eventsController->addEvent(new OnTaskCompleted($this->taskRepository->getTask(), $this->userId));
}
if ($currentStatus !== $previousStatus && (int)$previousStatus === Status::COMPLETED)
{
$this->eventsController->addEvent(new OnTaskRenew($this->taskRepository->getTask(), $this->userId));
}
// task disapproved
if (
(int)$previousStatus === Status::SUPPOSEDLY_COMPLETED
&& (int)$currentStatus === Status::PENDING
)
{
$this->eventsController->addEvent(
new OnTaskDisapproved($this->taskRepository->getTask(), $currentStatus, $previousStatus, $this->userId)
);
}
//responsible changed
$currentResponsibleId = $this->taskRepository->getTask()->getResponsibleId();
$previousResponsibleId = $taskBeforeUpdate->getResponsibleId();
if ($currentResponsibleId !== $previousResponsibleId)
{
$this->eventsController->addEvent(new OnTaskResponsibleChanged($this->taskRepository->getTask(), $this->userId));
}
//accomplice added
$currentAccompliceMembersIds = $this->taskRepository->getTask()->getAccompliceMembersIds();
$previousAccompliceMembersIds = $taskBeforeUpdate->getAccompliceMembersIds();
if ($this->isMemberAdded($currentAccompliceMembersIds, $previousAccompliceMembersIds))
{
$this->eventsController->addEvent(new OnTaskAccompliceAdded($this->taskRepository->getTask(), $this->userId));
}
//auditor added
$currentAuditorMembersIds = $this->taskRepository->getTask()->getAuditorMembersIds();
$previousAuditorMembersIds = $taskBeforeUpdate->getAuditorMembersIds();
if ($this->isMemberAdded($currentAuditorMembersIds, $previousAuditorMembersIds))
{
$this->eventsController->addEvent(new OnTaskAuditorAdded($this->taskRepository->getTask(), $this->userId));
}
//added to project
$currentGroupId = $this->taskRepository->getTask()->getGroupId();
$previousGroupId = $taskBeforeUpdate->getGroupId();
if ($currentGroupId !== $previousGroupId && $currentGroupId !== 0)
{
$this->eventsController->addEvent(new OnTaskGroupChanged($this->taskRepository->getTask(), $this->userId));
}
// description changed
if ($this->taskRepository->getTask()->getDescription() !== $taskBeforeUpdate->getDescription())
{
$this->eventsController->addEvent(new OnTaskDescriptionChanged($this->taskRepository->getTask(), $this->userId));
}
if ($this->isArrayFieldChanged($this->taskRepository->getTask()->getFileFields(), $taskBeforeUpdate->getFileFields()))
{
$this->eventsController->addEvent(new OnTaskFilesUpdated($this->taskRepository->getTask(), $this->userId));
}
if ($this->isArrayFieldChanged($this->taskRepository->getTask()->getCrmFields(), $taskBeforeUpdate->getCrmFields()))
{
$this->eventsController->addEvent(new OnTaskBindingsUpdated($this->taskRepository->getTask(), $this->userId));
}
if ($this->taskRepository->getTask()->getTitle() !== $taskBeforeUpdate->getTitle())
{
$this->eventsController->addEvent(new OnTaskTitleUpdated($this->taskRepository->getTask(), $this->userId));
}
if (
$this->isDateTimeFieldChanged($this->taskRepository->getTask()->getStartDatePlan(), $taskBeforeUpdate->getStartDatePlan())
|| $this->isDateTimeFieldChanged($this->taskRepository->getTask()->getEndDatePlan(), $taskBeforeUpdate->getEndDatePlan())
)
{
$this->eventsController->addEvent(new OnTaskDatePlanUpdated($this->taskRepository->getTask(), $this->userId));
}
if ((int)$this->taskRepository->getTask()->getPriority() !== (int)$taskBeforeUpdate->getPriority())
{
$this->eventsController->addEvent(new OnTaskPriorityChanged($this->taskRepository->getTask(), $this->userId));
}
return $this;
}