public function findDuplicates(Crm\EntityAdapter $adapter, DuplicateSearchParams $params) { $result = array(); $fieldNames = $params->getFieldNames(); $processAllFields = empty($fieldNames); $title = $processAllFields || in_array('TITLE', $fieldNames, true) ? $adapter->getFieldValue('TITLE', '') : ''; if ($title !== '') { $criterion = new DuplicateOrganizationCriterion($title); $criterion->setStrictComparison($this->useStrictComparison); $duplicate = $criterion->find(); if ($duplicate !== null) { $result[] = $duplicate; } } if ($processAllFields || in_array('FM.PHONE', $fieldNames, true)) { $phones = $this->findMultifieldDuplicates('PHONE', $adapter, $params); if (!empty($phones)) { $result = array_merge($result, $phones); } } if ($processAllFields || in_array('FM.EMAIL', $fieldNames, true)) { $email = $this->findMultifieldDuplicates('EMAIL', $adapter, $params); if (!empty($email)) { $result = array_merge($result, $email); } } return $result; }
public function findDuplicates(Crm\EntityAdapter $adapter, DuplicateSearchParams $params) { $result = array(); $fieldNames = $params->getFieldNames(); $processAllFields = empty($fieldNames); $lastName = $processAllFields || in_array('LAST_NAME', $fieldNames, true) ? $adapter->getFieldValue('LAST_NAME', '') : ''; if ($lastName !== '') { $name = $processAllFields || in_array('NAME', $fieldNames, true) ? $adapter->getFieldValue('NAME', '') : ''; $secondName = $processAllFields || in_array('SECOND_NAME', $fieldNames, true) ? $adapter->getFieldValue('SECOND_NAME', '') : ''; $criterion = new DuplicatePersonCriterion($lastName, $name, $secondName); $duplicate = $criterion->find(\CCrmOwnerType::Undefined, 20); if ($duplicate !== null) { $result[] = $duplicate; } } if ($processAllFields || in_array('FM.PHONE', $fieldNames, true)) { $phones = $this->findMultifieldDuplicates('PHONE', $adapter, $params); if (!empty($phones)) { $result = array_merge($result, $phones); } } if ($processAllFields || in_array('FM.EMAIL', $fieldNames, true)) { $email = $this->findMultifieldDuplicates('EMAIL', $adapter, $params); if (!empty($email)) { $result = array_merge($result, $email); } } return $result; }
public function findMultifieldDuplicates($type, \Bitrix\Crm\EntityAdapter $adapter, DuplicateSearchParams $params) { if (!is_string($type)) { throw new Main\ArgumentTypeException('type', 'string'); } if ($type !== 'EMAIL' && $type !== 'PHONE') { throw new Main\NotSupportedException("Type: '{$type}' is not supported in current context"); } $allMultiFields = $adapter->getFieldValue('FM'); $multiFields = is_array($allMultiFields) && isset($allMultiFields[$type]) ? $allMultiFields[$type] : null; if (!is_array($multiFields) || empty($multiFields)) { return array(); } $criterions = array(); $dups = array(); foreach ($multiFields as &$multiField) { $value = isset($multiField['VALUE']) ? $multiField['VALUE'] : ''; if ($value === '') { continue; } $criterion = new DuplicateCommunicationCriterion($type, $value); $isExists = false; foreach ($criterions as $curCriterion) { /** @var DuplicateCriterion $curCriterion */ if ($criterion->equals($curCriterion)) { $isExists = true; break; } } if ($isExists) { continue; } $criterions[] = $criterion; $duplicate = $criterion->find(); if ($duplicate !== null) { $dups[] = $duplicate; } } unset($multiField); return $dups; }
public static function create(array $fields = null, $sourceEntityTypeID = \CCrmOwnerType::Undefined, $destinationEntityTypeID = \CCrmOwnerType::Undefined) { if (!is_int($sourceEntityTypeID)) { throw new Main\ArgumentTypeException('sourceEntityTypeID', 'integer'); } if (!is_int($destinationEntityTypeID)) { throw new Main\ArgumentTypeException('destinationEntityTypeID', 'integer'); } if ($sourceEntityTypeID !== \CCrmOwnerType::Undefined && !\CCrmOwnerType::IsDefined($sourceEntityTypeID)) { $sourceEntityTypeID = \CCrmOwnerType::Undefined; } if ($destinationEntityTypeID !== \CCrmOwnerType::Undefined && !\CCrmOwnerType::IsDefined($destinationEntityTypeID)) { $destinationEntityTypeID = \CCrmOwnerType::Undefined; } if (\CCrmOwnerType::IsDefined($sourceEntityTypeID) && !\CCrmOwnerType::IsDefined($destinationEntityTypeID)) { $destinationEntityTypeID = $sourceEntityTypeID; } $adapter = null; if ($sourceEntityTypeID !== \CCrmOwnerType::Undefined && $destinationEntityTypeID !== \CCrmOwnerType::Undefined) { if ($sourceEntityTypeID === \CCrmOwnerType::Lead) { if ($destinationEntityTypeID === \CCrmOwnerType::Company) { $adapter = new EntityAdapter(\CCrmOwnerType::Lead, \CCrmOwnerType::Company, new Mapper(array('COMPANY_TITLE' => 'TITLE'))); } } elseif ($sourceEntityTypeID === \CCrmOwnerType::Company) { if ($destinationEntityTypeID === \CCrmOwnerType::Lead) { $adapter = new EntityAdapter(\CCrmOwnerType::Company, \CCrmOwnerType::Lead, new Mapper(array('TITLE' => 'COMPANY_TITLE'))); } } } if ($adapter === null) { $adapter = new EntityAdapter($sourceEntityTypeID, $destinationEntityTypeID); } if ($fields !== null) { $adapter->setFields($fields); } return $adapter; }