ResultEntity::add

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. ResultEntity
  4. add
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/resultentity.php
  • Класс: Bitrix\Crm\WebForm\ResultEntity
  • Вызов: ResultEntity::add
public function add($schemeId, $fields)
{
	$this->entityMap = Entity::getMap();
	$this->scheme = $schemeId;
	$this->fields = $this->prepareFields($fields);
	$this->selector = $this->createSelector();
	$this->performTrace();

	$results = $this->fireEvent('onSiteFormFill', [
		'id' => $this->getFormId(),
		'fields' => $this->fields,
		'properties' => $this->placeholders,
		'assignedById' => $this->assignedById,
	]);

	foreach ($results as $result)
	{
		if ($result->getType() === \Bitrix\Main\EventResult::ERROR)
		{
			continue;
		}

		$resultData = $result->getParameters();
		if (isset($resultData['assignedById']) && $resultData['assignedById'] > 0)
		{
			$this->assignedById = $resultData['assignedById'];
		}
	}

	try
	{
		switch($schemeId)
		{
			case Entity::ENUM_ENTITY_SCHEME_CONTACT:
				$this->addClient();
				break;

			case Entity::ENUM_ENTITY_SCHEME_LEAD:
				$this->addLead();
				break;

			case Entity::ENUM_ENTITY_SCHEME_LEAD_INVOICE:
				$this->addLead(['ADD_INVOICE' => true]);
				break;

			case Entity::ENUM_ENTITY_SCHEME_DEAL:
				$this->addDeal();
				break;

			case Entity::ENUM_ENTITY_SCHEME_QUOTE:
				$this->addQuote();
				break;

			case Entity::ENUM_ENTITY_SCHEME_DEAL_INVOICE:
				$this->addDeal(['ADD_INVOICE' => true]);
				break;

			case Entity::ENUM_ENTITY_SCHEME_QUOTE_INVOICE:
				$this->addQuote(['ADD_INVOICE' => true]);
				break;

			case Entity::ENUM_ENTITY_SCHEME_CONTACT_INVOICE:
				$this->addClient(['ADD_INVOICE' => true]);
				break;

			default:
				$scheme = Entity::getSchemes($schemeId);
				if (!$scheme)
				{
					return;
				}

				$dynamicTypeId = null;
				$hasInvoice = false;
				foreach ($scheme['ENTITIES'] as $entityTypeName)
				{
					$entityTypeId = \CCrmOwnerType::resolveId($entityTypeName);
					if (\CCrmOwnerType::isUseDynamicTypeBasedApproach($entityTypeId))
					{
						$dynamicTypeId = $entityTypeId;
					}
					elseif ($entityTypeId === \CCrmOwnerType::Invoice)
					{
						$hasInvoice = true;
					}
				}

				if ($dynamicTypeId)
				{
					$this->addDynamic([
						'DYNAMIC_TYPE_ID' => $dynamicTypeId,
						'ADD_INVOICE' => $hasInvoice
					]);
				}
				break;
		}

		$this->fillTrace();
		$this->addActivity();
		$this->addConsent();
		$this->runAutomation();
		WebFormTrigger::onFormFill($this);

		if(count($this->resultEntityPack) > 0)
		{
			ResultEntityTable::addBatch($this->formId, $this->resultEntityPack);
		}

		$eventData = [
			'id' => $this->getFormId(),
			'fields' => $this->fields,
			'properties' => $this->placeholders,
			'result' => [
				'entities' => $this->getResultEntities(),
			],
		];
		$eventNamePostfix = $this->placeholders['eventNamePostfix'] ?? '';
		if ($eventNamePostfix && preg_match('/\w+/', $eventNamePostfix))
		{
			(new Main\Event('crm', 'onSiteFormFilled' . $eventNamePostfix, $eventData))->send();
		}
		(new Main\Event('crm', 'onSiteFormFilled', $eventData))->send();
	}
	catch(\Exception $e)
	{
		throw $e;
	}
}

Добавить комментарий