Документация для разработчиков
Темная тема

Поиск в CRM по телефону и e-mail

Пример отображает форму для ввода телефона и e-mail. Ниже формы выводится таблица с результатом поиска по столбцам:

  • id сущности
  • сущность
  • заголовок
  • телефоны сущности
  • емаилы сущности

Код через поиск дубликатов находит все сущности (лид, контакт, компания) у которых есть указанный телефон/е-маил. Потом из списка всех ID получается информация о каждой сущности:

  • заголовок или имя фамилия
  • все телефоны
  • e-mail

и выводится в таблице.

<?
	include('crest.php');
	$phone = ($_POST['PHONE'])?htmlspecialchars($_POST['PHONE']):false;
	$email = ($_POST['EMAIL'])?htmlspecialchars($_POST['EMAIL']):false;
	
	$entityIDs = [
		'LEAD' => [],
		'CONTACT' => [],
		'COMPANY' => []
	];
	$resultEntity = [
		'lead' => [],
		'contact' => [],
		'company' => []
	];

	if($phone)
	{
		$result = CRest::call('crm.duplicate.findbycomm', [
			'type' => 'PHONE',
			'values' => [$phone]
		]);
		if(is_array($result['result']['LEAD']))
		{
			$entityIDs['LEAD'] = array_merge($entityIDs['LEAD'], $result['result']['LEAD']);
		}
		if(is_array($result['result']['CONTACT']))
		{
			$entityIDs['CONTACT'] = array_merge($entityIDs['CONTACT'], $result['result']['CONTACT']);
		}
		if(is_array($result['result']['COMPANY']))
		{
			$entityIDs['COMPANY'] = array_merge($entityIDs['COMPANY'], $result['result']['COMPANY']);
		}
	}
	if($email)
	{
		$result = CRest::call('crm.duplicate.findbycomm', [
			'type' => 'EMAIL',
			'values' => [$email]
		]);
		if(is_array($result['result']['LEAD']))
		{
			$entityIDs['LEAD'] = array_merge($entityIDs['LEAD'], $result['result']['LEAD']);
		}
		if(is_array($result['result']['CONTACT']))
		{
			$entityIDs['CONTACT'] = array_merge($entityIDs['CONTACT'], $result['result']['CONTACT']);
		}
		if(is_array($result['result']['COMPANY']))
		{
			$entityIDs['COMPANY'] = array_merge($entityIDs['COMPANY'], $result['result']['COMPANY']);
		}
	}

	if(!empty($entityIDs['LEAD']))
	{
		$result = CRest::call(
			'crm.lead.list',
			[
				'filter' => [
					'ID' => $entityIDs['LEAD']
				],
				'select' =>	 [
					'ID', 'NAME', 'LAST_NAME', 'PHONE', 'EMAIL', 'TITLE'
				]
			]
		);
		if(!empty($result['result']))
		{
			$resultEntity['lead'] =  $result['result'];
		}
	}
	if(!empty($entityIDs['CONTACT']))
	{
		$result = CRest::call(
			'crm.contact.list',
			[
				'filter' => [
					'ID' => $entityIDs['CONTACT']
				],
				'select' =>	 [
					'ID', 'NAME', 'LAST_NAME', 'PHONE', 'EMAIL'
				]
			]
		);
		if(!empty($result['result']))
		{
			$resultEntity['contact'] =  $result['result'];
		}
	}
	if(!empty($entityIDs['COMPANY']))
	{
		$result = CRest::call(
			'crm.company.list',
			[
				'filter' => [
					'ID' => $entityIDs['COMPANY']
				],
				'select' =>	 [
					'ID', 'PHONE', 'EMAIL', 'TITLE'
				]
			]
		);
		if(!empty($result['result']))
		{
			$resultEntity['company'] =  $result['result'];
		}
	}
?>
<!DOCTYPE html>
<html lang="ru">
	<head>
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" crossorigin="anonymous">
	</head>
	<body class="container">
		<form method="post" action="">
			<div class="row">
				<div class="col-4 mt-3">
					<label>E-mail*</label>
				</div>
				<div class="col-6 mt-3">
					<input type="text" name="EMAIL" value="<?=$email?>">
				</div>
			</div>
			<div class="row">
				<div class="col-4 mt-3">
					<label>Phone*</label>
				</div>
				<div class="col-6 mt-3">
					<input type="text" name="PHONE" value="<?=$phone?>">
				</div>
			</div>
			<div class="row">
				<div class="col-sm-10">
					<input type="submit" name="SEARCH" class="btn btn-primary" value="Search">
				</div>
			</div>
		</form>
		<table class="table mt-5">
			<thead>
				<tr>
					<th scope="col">ID</th>
					<th scope="col">Entity</th>
					<th scope="col">Title</th>
					<th scope="col">Phones</th>
					<th scope="col">Emails</th>
				</tr>
			</thead>
			<tbody>
				<? foreach($resultEntity as $entity=>$items):?>
					<? foreach($items as $item):
						$phones = '';
						if(!empty($item['PHONE']))
						{
							$item['PHONE'] = array_column($item['PHONE'],'VALUE');
							$phones = implode(', ', $item['PHONE']);
						}

						$emails = '';
						if(!empty($item['EMAIL']))
						{
							$item['EMAIL'] = array_column($item['EMAIL'],'VALUE');
							$emails = implode(', ', $item['EMAIL']);
						}

						$title = '';
						if($item['TITLE'])
						{
							$title = $item['TITLE'].(($item['NAME'] || $item['LAST_NAME'])?': ':'');
						}
						if($item['NAME'] || $item['LAST_NAME'])
						{
							$title .= implode(' ',[$item['NAME'], $item['LAST_NAME']]);
						}
						?>
						<tr>
							<th scope="row"><?=$item['ID']?></th>
							<td><?=$entity?></td>
							<td><?=$title?></td>
							<td><?=$phones?></td>
							<td><?=$emails?></td>
						</tr>
					<? endforeach?>
				<? endforeach?>
			</tbody>
		</table>
	</body>
</html>
© «Битрикс», 2001-2024, «1С-Битрикс», 2024