• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/crm.php
  • Класс: BitrixImOpenLinesCrm
  • Вызов: Crm::updateEntity
public function updateEntity($type, $id): bool
{
	$result = false;

	$updateFields = [];
	$updateFm = [];

	$fields = $this->getFields();

	$entity = CrmCommon::get($type, $id, true);

	if (!empty($entity))
	{
		$phones = $fields->getPhones();
		$emails = $fields->getEmails();

		$code = $this->getCode();
		$codeImol = $this->getCodeImol();
		$userId = $this->getUserId();

		$personName = $fields->getPersonName();
		$personLastName = $fields->getPersonLastName();
		$personSecondName = $fields->getPersonSecondName();
		if (
			!empty($fields->getPersonEmail())
			&& !ToolsEmail::isInArray($emails, $fields->getPersonEmail())
		)
		{
			$emails[] = $fields->getPersonEmail();
		}
		if (
			!empty($fields->getPersonPhone())
			&& !ToolsPhone::isInArray($phones, $fields->getPersonPhone())
		)
		{
			$phones[] = $fields->getPersonPhone();
		}
		$personWebsite = $fields->getPersonWebsite();

		if (
			$type !== self::ENTITY_DEAL
			&& !empty($code)
			&& !empty($codeImol)
		)
		{
			$communicationType = CrmCommon::getCommunicationType($code);
			if (
				empty($entity['FM']['IM'][$communicationType])
				|| !in_array($codeImol, $entity['FM']['IM'][$communicationType])
			)
			{
				$updateFm['IM'][$communicationType][] = $codeImol;
			}
		}

		if (
			!empty($userId)
			&& $type !== self::ENTITY_DEAL
		)
		{
			if (
				empty($entity['FM']['LINK']['USER'])
				|| !in_array($userId, $entity['FM']['LINK']['USER'], true)
			)
			{
				$updateFm['LINK']['USER'][] = $userId;
			}
		}

		if (
			!empty($phones)
			&& $type !== self::ENTITY_DEAL
		)
		{
			foreach ($phones as $phone)
			{
				if (empty($entity['FM']['PHONE']['WORK']) || !ToolsPhone::isInArray($entity['FM']['PHONE']['WORK'], $phone))
				{
					$updateFm['PHONE']['WORK'][] = $phone;
				}
			}
		}

		if (
			!empty($emails)
			&& $type !== self::ENTITY_DEAL
		)
		{
			foreach ($emails as $email)
			{
				if (empty($entity['FM']['EMAIL']['WORK']) || !ToolsEmail::isInArray($entity['FM']['EMAIL']['WORK'], $email))
				{
					$updateFm['EMAIL']['WORK'][] = $email;
				}
			}
		}

		if (!empty($personName))
		{
			if (
				$type !== self::ENTITY_DEAL
				&& $type !== self::ENTITY_COMPANY
			)
			{
				if (
					(
						empty($entity['NAME'])
						|| $entity['NAME'] === LiveChat::getDefaultGuestName()
					)
					&& LiveChat::getDefaultGuestName() !== $personName
				)
				{
					$updateFields['NAME'] = $personName;
				}
			}
		}

		if (!empty($personLastName))
		{
			if (
				$type !== self::ENTITY_DEAL
				&& $type !== self::ENTITY_COMPANY
			)
			{
				if (
					(
						empty($entity['LAST_NAME'])
						|| $entity['LAST_NAME'] === LiveChat::getDefaultGuestName()
					)
					&& LiveChat::getDefaultGuestName() !== $personLastName
				)
				{
					$updateFields['LAST_NAME'] = $personLastName;
				}
			}
		}

		if (!empty($personSecondName))
		{
			if (
				$type !== self::ENTITY_DEAL
				&& $type !== self::ENTITY_COMPANY
			)
			{
				if (
					(
						empty($entity['SECOND_NAME'])
						|| $entity['SECOND_NAME'] === LiveChat::getDefaultGuestName()
					)
					&& LiveChat::getDefaultGuestName() !== $personSecondName
				)
				{
					$updateFields['SECOND_NAME'] = $personSecondName;
				}
			}
		}

		if (!empty($personWebsite))
		{
			if (mb_strlen($personWebsite) > 250 || $type === self::ENTITY_DEAL)
			{
				if ($type !== self::ENTITY_COMPANY)
				{
					if (empty($entity['SOURCE_DESCRIPTION']))
					{
						$updateFields['SOURCE_DESCRIPTION'] = $personWebsite;
					}
				}
			}
			else
			{
				if (
					empty($entity['FM']['WEB']['HOME'])
					|| !in_array($personWebsite, $entity['FM']['WEB']['HOME'])
				)
				{
					$updateFm['WEB']['HOME'][] = $personWebsite;
				}
			}
		}

		if (!empty($updateFm))
		{
			$updateFields['FM'] = CrmCommon::formatMultifieldFields($updateFm);
		}

		if (
			$type === self::ENTITY_LEAD
			&& LeadSettings::getCurrent()->isAutoGenRcEnabled()
		)
		{
			$facility = $this->getEntityManageFacility();

			if (!empty($facility->getSelector()->getCompanyId()))
			{
				$updateFields['COMPANY_ID'] = $facility->getSelector()->getCompanyId();
			}
			if (!empty($facility->getSelector()->getContactId()))
			{
				$updateFields['CONTACT_ID'] = $facility->getSelector()->getContactId();
			}
		}

		if (!empty($updateFields))
		{
			$result = CrmCommon::update($type, $id, $updateFields);
		}
	}

	return $result;
}