• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session/update.php
  • Класс: BitrixImOpenLinesSessionUpdate
  • Вызов: Update::modifyOnPause
private function modifyOnPause(): DateTime
{
	$dateCrmClose = new DateTime();
	$dateCrmClose->add('1 DAY');
	$dateCrmClose->add($this->session->getConfig('AUTO_CLOSE_TIME').' SECONDS');
	$fullCloseTime = $this->session->getConfig('FULL_CLOSE_TIME');
	$dateClose = clone $this->newData['DATE_MODIFY'];

	$dateCrmClose->add('6 DAY'); // 6+1 = 7
	if (
		$this->session->getSessionField('WAIT_ACTION') === 'N'
		&& isset($this->newData['USER_ID'])
		&& User::getInstance($this->newData['USER_ID'])->isConnector()
	)
	{
		$dateClose->add('1 WEEK');

		if (
			$this->session->getSessionField('STATUS') >= Session::STATUS_OPERATOR
			|| $this->session->getSessionField('STATUS') == Session::STATUS_ANSWER
		)
		{
			$this->updateDateCrmClose = $dateCrmClose;
		}

		if ($this->session->getSessionField('WAIT_ANSWER') == 'N')
		{
			$status = $this->session->getSessionField('STATUS') >= Session::STATUS_OPERATOR
				? Session::STATUS_CLIENT_AFTER_OPERATOR
				: Session::STATUS_CLIENT;
			$this->setStatus($status);
		}
	}
	else
	{
		if (isset($this->newData['SKIP_DATE_CLOSE']))
		{
			$dateClose->add('1 WEEK');
		}
		elseif (
			$this->session->getSessionField('WAIT_ANSWER') === 'Y'
			&& $this->newData['WAIT_ANSWER'] !== 'N'
			|| $this->newData['WAIT_ANSWER'] === 'Y'
		)
		{
			$dateClose->add('1 WEEK');

			$status = $this->session->getSessionField('STATUS') >= Session::STATUS_CLIENT_AFTER_OPERATOR
				? Session::STATUS_CLIENT_AFTER_OPERATOR
				: Session::STATUS_CLIENT;
			$this->setStatus($status);

			if ($this->session->getSessionField('STATUS') >=  Session::STATUS_OPERATOR)
			{
				$this->updateDateCrmClose = $dateCrmClose;
			}
		}
		elseif (
			$this->session->getSessionField('WAIT_ACTION') === 'Y'
			&& $this->newData['WAIT_ACTION'] !== 'N'
			|| $this->newData['WAIT_ACTION'] === 'Y'
		)
		{
			$this->setStatus(Session::STATUS_WAIT_CLIENT);
			if (!empty($fullCloseTime))
			{
				$dateClose->add($fullCloseTime . ' MINUTES');
			}

			$this->updateDateCrmClose = $dateCrmClose;
		}
		else
		{
			$dateClose->add('1 WEEK');

			$this->setStatus(Session::STATUS_OPERATOR);
			$this->updateDateCrmClose = $dateCrmClose;
		}
	}

	return $dateClose;
}