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