• Модуль: 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;
}