- Модуль: catalogmobile
- Путь к файлу: ~/bitrix/modules/catalogmobile/lib/InventoryControl/Command/ConductDocumentCommand.php
- Класс: BitrixCatalogMobileInventoryControlCommandConductDocumentCommand
- Вызов: ConductDocumentCommand::updateCatalogBarcodes
private function updateCatalogBarcodes(): Result
{
$result = new Result();
$document = StoreDocumentTable::getById($this->documentId)->fetch();
if (!$document)
{
return $result;
}
$allowedTypes = [
StoreDocumentTable::TYPE_ARRIVAL,
StoreDocumentTable::TYPE_STORE_ADJUSTMENT,
];
if (!in_array($document['DOC_TYPE'], $allowedTypes, true))
{
return $result;
}
$documentBarcodes = [];
$rows = StoreDocumentBarcodeTable::getList([
'filter' => [
'=DOCUMENT_ELEMENT.DOC_ID' => $this->documentId,
],
'select' => ['BARCODE', 'SKU_ID' => 'DOCUMENT_ELEMENT.ELEMENT_ID']
]);
while ($row = $rows->fetch())
{
$skuId = (int)($row['SKU_ID']);
$barcode = $row['BARCODE'];
if ($skuId > 0 && $barcode)
{
$documentBarcodes[$barcode] = $skuId;
}
}
if (empty($documentBarcodes))
{
return $result;
}
$productBarcodes = [];
$rows = StoreBarcodeTable::getList([
'filter' => ['=BARCODE' => array_keys($documentBarcodes)],
'select' => ['BARCODE', 'PRODUCT_ID']
]);
while ($row = $rows->fetch())
{
$productBarcodes[$row['BARCODE']] = (int)$row['PRODUCT_ID'];
}
foreach ($documentBarcodes as $barcode => $skuId)
{
if (isset($productBarcodes[$barcode]))
{
$existingSkuId = $productBarcodes[$barcode];
if ($skuId !== $existingSkuId)
{
$message = Loc::getMessage('MOBILE_IC_COMMAND_CONDUCT_DOCUMENT_ERROR_BARCODE_ALREADY_EXISTS', [
'#BARCODE#' => htmlspecialcharsbx($barcode)
]);
$result->addError(new Error($message));
}
continue;
}
$r = StoreBarcodeTable::add([
'PRODUCT_ID' => $skuId,
'BARCODE' => $barcode,
'CREATED_BY' => $this->userId,
'MODIFIED_BY' => $this->userId,
]);
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
}
return $result;
}