• Модуль: catalogmobile
  • Путь к файлу: ~/bitrix/modules/catalogmobile/lib/Controller/DocumentDetails/BaseDocumentDetails.php
  • Класс: BitrixCatalogMobileControllerDocumentDetailsBaseDocumentDetails
  • Вызов: BaseDocumentDetails::validateBarcodes
protected function validateBarcodes(array $data): bool
{
	if (!isset($data['PRODUCTS']))
	{
		return true;
	}

	$documentBarcodes = [];
	$productBarcodes = [];

	foreach ($data['PRODUCTS'] as $productData)
	{
		$productDto = new DocumentProductRecord($productData);
		$productId = (int)$productDto->productId;
		$barcode = (string)$productDto->barcode;

		if ($productId > 0 && $barcode !== '')
		{
			$documentBarcodes[$barcode] = $productId;
		}
	}

	if (empty($documentBarcodes))
	{
		return true;
	}

	$rows = StoreBarcodeTable::getList([
		'filter' => ['=BARCODE' => array_keys($documentBarcodes)],
		'select' => ['PRODUCT_ID', 'BARCODE'],
	]);

	while ($row = $rows->fetch())
	{
		$productBarcodes[$row['BARCODE']] = (int)$row['PRODUCT_ID'];
	}

	$isSuccess = true;
	foreach ($documentBarcodes as $barcode => $documentSkuId)
	{
		if (isset($productBarcodes[$barcode]))
		{
			$existingSkuId = $productBarcodes[$barcode];
			if ($documentSkuId !== $existingSkuId)
			{
				$isSuccess = false;
				$message = Loc::getMessage('MOBILE_CONTROLLER_CATALOG_DETAILS_ERROR_BARCODE_ALREADY_EXISTS', [
					'#BARCODE#' => htmlspecialcharsbx($barcode),
				]);
				$this->addError(new Error($message));
			}
		}
	}

	return $isSuccess;
}