very usefull
<?php
namespace Espo\Custom\Classes\DuplicateWhereBuilders;
use Espo\Core\ORM\Entity as CoreEntity;
use Espo\Core\{
Duplicate\WhereBuilder,
Field\EmailAddressGroup,
Field\PhoneNumberGroup,
};
use Espo\ORM\{
Query\Part\Condition as Cond,
Query\Part\WhereItem,
Query\Part\Where\OrGroup,
Entity,
};
/**
* @implements WhereBuilder<CoreEntity>
*/
class Contact implements WhereBuilder
{
public function build(Entity $entity): ?WhereItem
{
assert($entity instanceof CoreEntity);
$orBuilder = OrGroup::createBuilder();
$toCheck = false;
if ($entity->get('firstName') || $entity->get('lastName')) {
$orBuilder->add(
Cond::and(
Cond::equal(
Cond::column('firstName'),
$entity->get('firstName')
),
Cond::equal(
Cond::column('lastName'),
$entity->get('lastName')
)
)
);
$toCheck = true;
}
if (
($entity->get('emailAddress') || $entity->get('emailAddressData')) &&
(
$entity->isNew() ||
$entity->isAttributeChanged('emailAddress') ||
$entity->isAttributeChanged('emailAddressData')
)
) {
foreach ($this->getEmailAddressList($entity) as $emailAddress) {
$orBuilder->add(
Cond::equal(
Cond::column('emailAddress'),
$emailAddress
)
);
$toCheck = true;
}
}
if (
($entity->get('phoneNumber') || $entity->get('phoneNumberData')) &&
(
$entity->isNew() ||
$entity->isAttributeChanged('phoneNumber') ||
$entity->isAttributeChanged('phoneNumberData')
)
) {
foreach ($this->getPhoneNumberList($entity) as $phoneNumber) {
$orBuilder->add(
Cond::equal(
Cond::column('phoneNumber'),
$phoneNumber
)
);
$toCheck = true;
}
}
if (!$toCheck) {
return null;
}
return $orBuilder->build();
}
/**
* @return string[]
*/
private function getEmailAddressList(CoreEntity $entity): array
{
if ($entity->get('emailAddressData')) {
/** @var EmailAddressGroup $eaGroup */
$eaGroup = $entity->getValueObject('emailAddress');
return $eaGroup->getAddressList();
}
if ($entity->get('emailAddress')) {
return [
$entity->get('emailAddress')
];
}
return [];
}
private function getPhoneNumberList(CoreEntity $entity): array
{
if ($entity->get('phoneNumberData')) {
/** @var PhoneNumberGroup $eaGroup */
$eaGroup = $entity->getValueObject('phoneNumber');
return $eaGroup->getNumberList();
}
if ($entity->get('phoneNumber')) {
return [
$entity->get('phoneNumber')
];
}
return [];
}
}
{ "duplicateWhereBuilderClassName": "Espo\\Custom\\Classes\\DuplicateWhereBuilders\\Contact" }
Leave a comment: