• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/FieldSet/Factory.php
  • Класс: Bitrix\Crm\FieldSet\Factory
  • Вызов: Factory::makeDefaultItems
private function makeDefaultItems(?int $presetId = null): array
{
	/** @var Item[] $items */
	$items = [];
	$code = 'def-req-' . \CCrmOwnerType::Company . ($presetId ? '-'. $presetId : '');

	if (!$this->fetchByCode($code))
	{
		$items[] = (new Item)
			->setCode($code)
			->setEntityTypeId(CCrmOwnerType::SmartDocument)
			->setClientEntityTypeId(\CCrmOwnerType::Company)
			->setSystem(true)
		;
	}

	$code = 'def-req-' . \CCrmOwnerType::Contact . ($presetId ? '-'. $presetId : '');
	if (!$this->fetchByCode($code))
	{
		$items[] = (new Item)
			->setCode($code)
			->setEntityTypeId(CCrmOwnerType::SmartDocument)
			->setClientEntityTypeId(\CCrmOwnerType::Contact)
			->setSystem(true)
		;
	}

	$result = [];
	foreach ($items as $item)
	{
		$presetEntityTypeId = $item->getClientEntityTypeId() ? CCrmOwnerType::Company : 0;
		if (!$presetEntityTypeId)
		{
			continue;
		}

		$rqPresetId = $presetId ?: (EntityRequisite::getDefaultPresetId($presetEntityTypeId) ?: 0);
		if (!$rqPresetId)
		{
			EntityRequisite::installDefaultPresets();
			$rqPresetId =  $presetId ?: (EntityRequisite::getDefaultPresetId($presetEntityTypeId) ?: 0);
		}

		if (!$rqPresetId)
		{
			continue;
		}

		$fields = [];
		$countryId = EntityRequisite::getSingleInstance()->getCountryIdByPresetId($rqPresetId);
		$fieldsMap = $this->getDefaultItemRegionFieldMap();
		$regionFields = $fieldsMap[$countryId] ?? $fieldsMap[Country::ID_USA];
		foreach ([$item->getEntityTypeId(), $item->getClientEntityTypeId()] as $typeId)
		{
			$fields = array_merge($fields, $regionFields[$typeId] ?? []);
		}

		$typeName = CCrmOwnerType::resolveName($typeId);
		
		$prepareFieldsToInsert = function (string $name) use ($typeName)
		{
			return [
				'name' => "{$typeName}_{$name}",
				'required' => true,
				'multiple' => false,
			];
		};
		
		$item
			->setRequisitePresetId($rqPresetId)
			->setFields(array_map(
				$prepareFieldsToInsert,
				$fields
			))
		;
		
		if (empty($item->getFields()))
		{
			$this->setDefaultFieldsForItems($prepareFieldsToInsert, $typeId, $item);
		}

		$result[] = $item;
	}


	return $result;
}