• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/controller/documentcontractor.php
  • Класс: BitrixCatalogControllerDocumentContractor
  • Вызов: DocumentContractor::checkFields
private function checkFields(array $fields): Result
{
	$result = new Result();
	$documentId = (int)$fields['DOCUMENT_ID'];
	$entityTypeId = (int)$fields['ENTITY_TYPE_ID'];
	$entityId = (int)$fields['ENTITY_ID'];

	if (!$documentId)
	{
		$result->addError(new Error('Store document was not found'));

		return $result;
	}

	$document = StoreDocumentTable::getRow([
		'select' => [
			'ID',
			'DOC_TYPE',
			'STATUS',
		],
		'filter' => [
			'ID' => $documentId,
		],
	]);

	if (!$document)
	{
		$result->addError(new Error('Store document was not found'));

		return $result;
	}

	if ($document['DOC_TYPE'] !== StoreDocumentTable::TYPE_ARRIVAL)
	{
		$result->addError(new Error('Type of store document is wrong'));
	}

	if ($document['STATUS'] === 'Y')
	{
		$result->addError(new Error('Unable to edit conducted document'));
	}

	if (
		$entityTypeId !== CCrmOwnerType::Contact
		&& $entityTypeId !== CCrmOwnerType::Company
	)
	{
		$result->addError(new Error('Wrong entity type id'));
	}

	if (!$entityId)
	{
		$result->addError(new Error('Wrong entity id'));
	}

	$bindingExists = $this->existsByFilter([
		'DOCUMENT_ID' => $documentId,
		'ENTITY_TYPE_ID' => $entityTypeId,
		'ENTITY_ID' => $entityId,
	]);
	if ($bindingExists->isSuccess())
	{
		$result->addError(new Error('This contractor has been already bound to this document'));
	}

	if ($entityTypeId === CCrmOwnerType::Company)
	{
		$documentCompanyBinding = StoreDocumentContractorTable::getRow([
			'select' => ['ID'],
			'filter' => [
				'DOCUMENT_ID' => $documentId,
				'ENTITY_TYPE_ID' => CCrmOwnerType::Company,
			],
		]);

		if (!empty($documentCompanyBinding))
		{
			$result->addError(new Error('This document already has a Company contractor'));
		}
	}

	return $result;
}