- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/requisite.php
- Класс: Bitrix\Crm\WebForm\Requisite
- Вызов: Requisite::load
public function load(int $entityTypeId, int $entityId, ?int $requisitePresetId = null): Result
{
$result = new Result();
$splitMode = $this->splitAccountFields;
$this->splitAccountFields = false;
$preset =
$requisitePresetId !== null && $requisitePresetId >= 0
? $this->getPreset($requisitePresetId)
: $this->getDefaultPreset($entityTypeId)
;
$this->splitAccountFields = $splitMode;
if (!$preset)
{
$result->addError(new Error("Default preset not found for entity type `{$entityTypeId}`."));
return $result;
}
$values = [];
$keys = array_map(
function (array $field): string
{
return $field['name'];
},
array_filter(
$preset['fields'],
function (array $field): bool
{
return !in_array($field['type'], ['address', 'account']);
}
)
);
$keys[] = 'ID';
$requisiteValues = (EntityRequisite::getSingleInstance()->getList([
'select' => $keys,
'filter' => [
'=ENTITY_TYPE_ID' => $entityTypeId,
'=ENTITY_ID' => $entityId,
'=PRESET_ID' => $preset['id'],
],
'limit' => 1,
])->fetch() ?: []);
foreach ($requisiteValues as $fieldName => $value)
{
if (mb_strpos($fieldName, 'RQ_') !== 0)
{
$requisiteValues['RQ_'. $fieldName] = $value;
unset($requisiteValues[$fieldName]);
}
}
$values = $values + $requisiteValues;
if (!$values)
{
return $result;
}
$id = (int) ($values['ID'] ?: $values['RQ_ID']);
unset($values['ID']);
unset($values['RQ_ID']);
foreach ($this->getAddressTypes($preset['countryId']) as $address)
{
$keys = array_map(
function (array $field)
{
return $field['name'];
},
$address['fields']
);
//$address['ANCHOR_TYPE_ID'] = $entityTypeId;
//$address['ANCHOR_ID'] = $entityId;
$row = (new EntityAddress())->getList([
'filter' => [
'=TYPE_ID' => $address['id'],
'=ANCHOR_TYPE_ID' => $entityTypeId,
'=ANCHOR_ID' => $entityId,
],
'order' => [
'ADDRESS_1' => 'DESC',
'LOC_ADDR_ID' => 'DESC',
],
])->fetch();
$val = [];
foreach ($keys as $key)
{
$v = $row[$key] ?? '';
if ($v === null || $v === '')
{
continue;
}
if ($key === 'LOC_ADDR_ID' && !$v)
{
continue;
}
$val[$key] = $v;
}
if ($val)
{
$values[$address['name']] = $val;
}
}
$keys = array_map(
function (array $item)
{
return $item['name'];
},
$this->getBankingFields($preset['countryId'])
);
$bankFieldsValues = (EntityBankDetail::getSingleInstance()->getList([
'select' => $keys,
'filter' => [
'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
'=ENTITY_ID' => $id,
],
'order' => ['ID' => 'DESC'],
'limit' => 1,
])->fetch() ?: []);
$values = $values + $bankFieldsValues;
foreach ($values as $key => $value)
{
if ($value === '' || $value === null)
{
unset($values[$key]);
}
}
$values['requisiteId'] = $id;
$values['presetId'] = (int)$preset['id'];
$result->setData($values);
return $result;
}