• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/crm/reader.php
  • Класс: BitrixImOpenLinesCrmReader
  • Вызов: Reader::getNonContactsAndCompanies
private function getNonContactsAndCompanies(): self
{
	foreach ($this->typedEntities as $entityTypeId => $entityIds)
	{
		if (
			$entityTypeId === CCrmOwnerType::Contact
			|| $entityTypeId === CCrmOwnerType::Company
		)
		{
			continue;
		}
		$factory = ServiceContainer::getInstance()->getFactory($entityTypeId);
		if (!$factory)
		{
			continue;
		}
		$items = $factory->getItems([
			'select' => ['*', Item::FIELD_NAME_CONTACT_BINDINGS],
			'filter' => [
				'@ID' => $entityIds,
			],
		]);

		foreach ($items as $item)
		{
			$identifier = BitrixCrmItemIdentifier::createByItem($item);
			$compatibleData = $item->getCompatibleData();
			$this->result[$item->getEntityTypeId()][$item->getId()] = $compatibleData;
			foreach ($compatibleData['CONTACT_BINDINGS'] as $contactBinding)
			{
				// add related contacts
				$this->contactIds[] = $contactBinding['CONTACT_ID'];
				$this->relations[CCrmOwnerType::Contact][$contactBinding['CONTACT_ID']][] = $identifier;
			}
			if ($item->hasField(Item::FIELD_NAME_COMPANY_ID))
			{
				// add related companies
				$companyId = (int)$item->getCompanyId();
				if ($companyId > 0)
				{
					$this->companyIds[] = $companyId;
					$this->relations[CCrmOwnerType::Company][$companyId][] = $identifier;
				}
			}
			if ($item->getEntityTypeId() === CCrmOwnerType::Lead)
			{
				$this->multiFields[] = [
					'NAME' => CCrmOwnerType::LeadName,
					'ID' => $item->getId(),
				];
			}
		}
	}

	return $this;
}