- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/requisite.php
- Класс: Bitrix\Crm\WebForm\Requisite
- Вызов: Requisite::fill
public function fill(int $entityTypeId, int $entityId, array $values, ?int $requisitePresetId = null): Result
{
$result = new Result();
$presetId = (int)($requisitePresetId ?? $this->getDefaultPreset($entityTypeId)['id'] ?? null);
if ($presetId <= 0)
{
return $result;
}
$preset = $this->getPreset($presetId);
if (!$preset)
{
return $result;
}
$requisite = [];
$addresses = [];
$account = self::makeOperationFields(
$this->getBankingFields($preset['countryId']),
$values
);
foreach ($preset['fields'] as $field)
{
switch ($field['type'])
{
case 'address':
$value = $values[$field['name']] ?? [];
if ($value)
{
$addresses[$field['id']] = self::makeOperationFields($field['fields'], $value);
}
break;
case 'account':
$account = self::makeOperationFields(
$field['fields'],
$values[$field['name']] ?? []
);
break;
default:
$requisite[] = $field;
break;
}
}
$requisite = self::makeOperationFields($requisite, $values);
$id = (int)EntityRequisite::getSingleInstance()->getList([
'select' => ['ID'],
'filter' => [
'=ENTITY_TYPE_ID' => $entityTypeId,
'=ENTITY_ID' => $entityId,
'=PRESET_ID' => $presetId,
],
'limit' => 1,
])->fetch()['ID'] ?? 0;
if (!$id)
{
$requisite['ENTITY_TYPE_ID'] = $entityTypeId;
$requisite['ENTITY_ID'] = $entityId;
$requisite['PRESET_ID'] = $presetId;
$requisite['NAME'] = Loc::getMessage('CRM_WEBFORM_REQUISITE_DEFAULT_NAME');
$result = EntityRequisite::getSingleInstance()->add($requisite);
if ($result->isSuccess() && $result instanceof Main\ORM\Data\Result)
{
$id = $result->getId();
}
}
else
{
$result = EntityRequisite::getSingleInstance()->update($id, $requisite);
}
if (!$result->isSuccess())
{
return $result;
}
foreach ($addresses as $addressTypeId => $address)
{
$address['ANCHOR_TYPE_ID'] = $entityTypeId;
$address['ANCHOR_ID'] = $entityId;
EntityAddress::register(
\CCrmOwnerType::Requisite,
$id,
$addressTypeId,
$address
);
}
$accountId = (int)(EntityBankDetail::getSingleInstance()->getList([
'select' => ['ID'],
'filter' => [
'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
'=ENTITY_ID' => $id,
],
'order' => ['ID' => 'DESC'],
'limit' => 1,
])->fetch()['ID'] ?? 0);
if ($accountId)
{
$result = EntityBankDetail::getSingleInstance()->update($accountId, $account);
}
else
{
$account['ENTITY_TYPE_ID'] = \CCrmOwnerType::Requisite;
$account['ENTITY_ID'] = $id;
$account['NAME'] = 'Default name';
$result = EntityBankDetail::getSingleInstance()->add($account);
}
return $result;
}