• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/activity/uncompletedactivity.php
  • Класс: Bitrix\Crm\Activity\UncompletedActivity
  • Вызов: UncompletedActivity::synchronize
public function synchronize(): void
{
	if ($this->trySynchronizeByActivityChange())
	{
		Monitor::getInstance()->onUncompletedActivityChange($this->itemIdentifier);

		return;
	}

	$uncompletedActivity = $this->getUncompletedActivity();

	$isChanged = false;
	if ($uncompletedActivity)
	{
		$activityId = (int)$uncompletedActivity['ID'];
		$deadline = $uncompletedActivity['DEADLINE'] ?? \CCrmDateTimeHelper::GetMaxDatabaseDate(false);
		$isIncomingChannel = false;
		$incomingChannelActivityId = $this->getUncompletedIncomingActivityId();
		$hasAnyIncomingChannel = !!$incomingChannelActivityId;
		if (\CCrmDateTimeHelper::IsMaxDatabaseDate($deadline))
		{
			if ($incomingChannelActivityId)
			{
				$activityId = $incomingChannelActivityId;
				$isIncomingChannel = true;
			}
			$deadlineDateTime = \CCrmDateTimeHelper::getMaxDatabaseDateObject();
		}
		else
		{
			$deadlineDateTime = DateTime::createFromUserTime($deadline);
		}

		$responsibleToCalcLightTime = null;
		if (CounterSettings::getInstance()->useActivityResponsible())
		{
			$responsibleToCalcLightTime = $this->responsibleId > 0 ? $this->responsibleId : null;
		}

		$minLightTime = $this->lightTimeRepo->minLightTimeByItemIdentifier(
			$this->itemIdentifier,
			$responsibleToCalcLightTime
		);

		$this->upsert(
			$activityId,
			$deadlineDateTime,
			$isIncomingChannel,
			$hasAnyIncomingChannel,
			$minLightTime
		);
		$isChanged = true;
	}
	else
	{
		// there are no uncompleted activities
		$existedRecordId = $this->getExistedRecordId();
		if ($existedRecordId)
		{
			EntityUncompletedActivityTable::delete($existedRecordId);
			$isChanged = true;
		}
	}

	if ($isChanged)
	{
		Monitor::getInstance()->onUncompletedActivityChange($this->itemIdentifier);
	}
}