• Модуль: 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;
}