• Модуль: catalogmobile
  • Путь к файлу: ~/bitrix/modules/catalogmobile/lib/Controller/StoreDocumentDetails.php
  • Класс: Bitrix\CatalogMobile\Controller\StoreDocumentDetails
  • Вызов: StoreDocumentDetails::addInternalAction
public function addInternalAction(string $docType, array $data): ?int
{
	if (!$this->checkDocumentModifyRights(null, $docType))
	{
		$this->addError(new Error(Loc::getMessage('MOBILE_CONTROLLER_CATALOG_DETAILS_ERROR_ADD_PERMS')));

		return null;
	}

	if (!$docType)
	{
		$this->addError(new Error(Loc::getMessage('MOBILE_CONTROLLER_CATALOG_DETAILS_ERROR_NOT_FOUND')));

		return null;
	}

	if (!$this->validateBarcodes($data))
	{
		return null;
	}

	$fields = array_intersect_key(
		$data,
		array_flip($this->getAllowedForSaveFields())
	);

	foreach ($this->getDateFields() as $dateField)
	{
		if (isset($fields[$dateField]))
		{
			$fields[$dateField] = DateTime::createFromTimestamp($fields[$dateField]);
		}
	}

	$fields['DOC_TYPE'] = $docType;
	$fields['SITE_ID'] = SITE_ID;
	$fields['CREATED_BY'] = $this->getCurrentUser()->getId();
	$fields['CURRENCY'] = $fields['CURRENCY'] ?: CurrencyManager::getBaseCurrency();

	$documentId = (int)\CCatalogDocs::add($this->prepareFieldsForSaving($fields));
	if (!$documentId)
	{
		$this->addError(
			$this->getLastApplicationError()
				?: new Error(Loc::getMessage('MOBILE_CONTROLLER_CATALOG_DETAILS_ERROR_ADD'))
		);

		return null;
	}

	/**
	 * Files
	 */
	if (isset($data['DOCUMENT_FILES']))
	{
		$this->updateFiles($documentId, $data['DOCUMENT_FILES']);
	}

	/**
	 * Products
	 */
	if (isset($data['PRODUCTS']))
	{
		$this->updateDocumentProductRecords($documentId, $data['PRODUCTS']);
		$this->updateCatalogProducts($data['PRODUCTS']);
	}

	$this->updateCatalogContractor($documentId, $data);

	return $documentId;
}