/** * @param $arFields * @return array|bool */ public static function cancellationDocument($arFields) { $id = intval($arFields["ID"]); $arResult = array(); $i = 0; $userId = $arFields["USER_ID"]; $dbDocElements = CCatalogStoreDocsElement::getList(array(), array("DOC_ID" => $id)); while ($arDocElement = $dbDocElements->Fetch()) { $arResult["ELEMENTS"][$i] = array("PRODUCT_ID" => $arDocElement["ELEMENT_ID"], "AMOUNT" => $arDocElement["AMOUNT"], "STORE_TO" => $arDocElement["STORE_FROM"]); if ($arProductInfo = CCatalogProduct::GetByID($arDocElement["ELEMENT_ID"])) { $arResult["ELEMENTS"][$i]["NEGATIVE_AMOUNT_TRACE"] = "Y"; if ($arProductInfo["BARCODE_MULTI"] == 'Y') { $dbDocBarcodes = CCatalogStoreDocsBarcode::getList(array(), array("DOC_ELEMENT_ID" => $arDocElement["ID"])); while ($arDocBarcode = $dbDocBarcodes->Fetch()) { $arResult["ELEMENTS"][$i]["BARCODES"][] = array("PRODUCT_ID" => $arDocElement["ELEMENT_ID"], "BARCODE" => $arDocBarcode["BARCODE"], "STORE_ID" => $arDocElement["STORE_FROM"]); } if ($arDocElement["AMOUNT"] != count($arResult["ELEMENTS"][$i]["BARCODES"])) { $productInfo = CCatalogStoreControlUtil::getProductInfo($arDocElement["ELEMENT_ID"]); $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_WRONG_COUNT", array("#PRODUCT#" => '"' . $productInfo["NAME"] . '"'))); return false; } } } $i++; } return self::distributeElementsToStores($arResult, $userId); }
/** * @param $documentId * @param $userId * @return array|bool */ public static function cancellationDocument($documentId, $userId) { global $APPLICATION; $documentId = (int) $documentId; $userId = (int) $userId; $arResult = array('ELEMENTS' => array()); $arElement = array(); $arDocElementId = array(); $sumAmountBarcodes = array(); $dbDocElements = CCatalogStoreDocsElement::getList(array(), array("DOC_ID" => $documentId)); while ($arDocElement = $dbDocElements->Fetch()) { $elementId = (int) $arDocElement["ELEMENT_ID"]; if (!self::checkAmountField($arDocElement)) { return false; } if (!isset($arElement[$elementId])) { $arElement[$elementId] = array(); } $arElement[$elementId][$arDocElement["ID"]] = $arDocElement; if (!isset($arDocElementId[$elementId])) { $arDocElementId[$elementId] = array(); } $arDocElementId[$elementId][] = $arDocElement["ID"]; if (!isset($sumAmountBarcodes[$elementId])) { $sumAmountBarcodes[$elementId] = 0; } $sumAmountBarcodes[$elementId] += $arDocElement["AMOUNT"]; if (!isset($arResult["ELEMENTS"][$elementId])) { $arResult["ELEMENTS"][$elementId] = array('POSITIONS' => array()); } $arResult["ELEMENTS"][$elementId]["POSITIONS"][] = array("PRODUCT_ID" => $arDocElement["ELEMENT_ID"], "AMOUNT" => $arDocElement["AMOUNT"], "STORE_TO" => $arDocElement["STORE_FROM"]); } if (empty($arElement)) { return false; } $dbProductInfo = CCatalogProduct::GetList(array(), array('ID' => array_keys($arElement)), false, false, array('ID', 'NEGATIVE_AMOUNT_TRACE', 'BARCODE_MULTI', 'QUANTITY', 'QUANTITY_TRACE', 'CAN_BUY_ZERO', 'ELEMENT_NAME', 'ELEMENT_IBLOCK_ID')); while ($arProductInfo = $dbProductInfo->Fetch()) { $id = $arProductInfo["ID"]; $arResult["ELEMENTS"][$id]["NEGATIVE_AMOUNT_TRACE"] = $arProductInfo["NEGATIVE_AMOUNT_TRACE"]; $arResult["ELEMENTS"][$id]["QUANTITY_TRACE"] = $arProductInfo["QUANTITY_TRACE"]; $arResult["ELEMENTS"][$id]["CAN_BUY_ZERO"] = $arProductInfo["CAN_BUY_ZERO"]; $arResult["ELEMENTS"][$id]["OLD_QUANTITY"] = $arProductInfo["QUANTITY"]; $arResult["ELEMENTS"][$id]["IBLOCK_ID"] = $arProductInfo["ELEMENT_IBLOCK_ID"]; $arResult["ELEMENTS"][$id]["ELEMENT_NAME"] = $arProductInfo["ELEMENT_NAME"]; if ($arProductInfo["BARCODE_MULTI"] == 'Y') { $arResult["ELEMENTS"][$id]["BARCODES"] = array(); $dbDocBarcodes = CCatalogStoreDocsBarcode::getList(array(), array("DOC_ELEMENT_ID" => $arDocElementId[$id])); while ($arDocBarcode = $dbDocBarcodes->Fetch()) { $arResult["ELEMENTS"][$id]["BARCODES"][] = array("PRODUCT_ID" => $id, "BARCODE" => $arDocBarcode["BARCODE"], "STORE_ID" => $arElement[$id][$arDocBarcode["DOC_ELEMENT_ID"]]["STORE_FROM"]); } if ($sumAmountBarcodes[$id] != count($arResult["ELEMENTS"][$id]["BARCODES"])) { $APPLICATION->ThrowException(GetMessage("CAT_DOC_WRONG_COUNT", array("#PRODUCT#" => '"' . $arProductInfo["ELEMENT_NAME"] . '"'))); return false; } } } return self::distributeElementsToStores($arResult, $userId); }
/** * @param $documentId * @param $userId * @return array|bool */ public static function cancellationDocument($documentId, $userId) { $documentId = intval($documentId); $userId = intval($userId); $arResult = array(); $arElement = array(); $arDocElementId = array(); $sumAmountBarcodes = array(); $dbDocElements = CCatalogStoreDocsElement::getList(array(), array("DOC_ID" => $documentId)); while ($arDocElement = $dbDocElements->Fetch()) { $elementId = intval($arDocElement["ELEMENT_ID"]); if (!self::checkAmountField($arDocElement)) { return false; } $arElement[$elementId][$arDocElement["ID"]] = $arDocElement; $arDocElementId[] = $arDocElement["ID"]; $sumAmountBarcodes[$elementId] += $arDocElement["AMOUNT"]; $arResult["ELEMENTS"][$elementId]["POSITIONS"][] = array("PRODUCT_ID" => $arDocElement["ELEMENT_ID"], "AMOUNT" => $arDocElement["AMOUNT"], "STORE_TO" => $arDocElement["STORE_FROM"]); } if (count($arElement) <= 0) { return false; } $dbProductInfo = CCatalogProduct::GetList(array(), array("ID" => array_keys($arElement))); while ($arProductInfo = $dbProductInfo->Fetch()) { $id = $arProductInfo["ID"]; $arResult["ELEMENTS"][$id]["NEGATIVE_AMOUNT_TRACE"] = $arProductInfo["NEGATIVE_AMOUNT_TRACE"]; if ($arProductInfo["BARCODE_MULTI"] == 'Y') { $dbDocBarcodes = CCatalogStoreDocsBarcode::getList(array(), array("DOC_ELEMENT_ID" => $arDocElementId)); while ($arDocBarcode = $dbDocBarcodes->Fetch()) { $arResult["ELEMENTS"][$id]["BARCODES"][] = array("PRODUCT_ID" => $id, "BARCODE" => $arDocBarcode["BARCODE"], "STORE_ID" => $arElement[$id][$arDocBarcode["DOC_ELEMENT_ID"]]["STORE_FROM"]); } if ($sumAmountBarcodes[$id] != count($arResult["ELEMENTS"][$id]["BARCODES"])) { $productInfo = CCatalogStoreControlUtil::getProductInfo($id); $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_WRONG_COUNT", array("#PRODUCT#" => '"' . $productInfo["NAME"] . '"'))); return false; } } } return self::distributeElementsToStores($arResult, $userId); }
while($arDocumentStoreBarcode = $dbDocumentStoreBarcode->Fetch()) { $arElementBarcode[] = $arDocumentStoreBarcode["BARCODE"]; } if(count($arElementBarcode) > 1) { $isMultiSingleBarcode = true; if($bReadOnly) $arElementBarcode = array(); } } if($arDocumentElement["IS_MULTIPLY_BARCODE"] == 'Y' || $isMultiSingleBarcode) { $dbDocumentElementBarcode = CCatalogStoreDocsBarcode::getList(array(), array("DOC_ELEMENT_ID" => $arDocumentElement["ID"]), false, false, array("BARCODE")); while($arDocumentElementBarcode = $dbDocumentElementBarcode->Fetch()) { if($isMultiSingleBarcode) { $selectedBarcode = $arDocumentElementBarcode["BARCODE"]; if(empty($arElementBarcode)) $arElementBarcode[] = $arDocumentElementBarcode["BARCODE"]; } else { $arElementBarcode[] = $arDocumentElementBarcode["BARCODE"]; } } }
</script> <?php if ($ID > 0) { $arSelect = array("ID", "DOC_ID", "STORE_FROM", "STORE_TO", "ELEMENT_ID", "AMOUNT", "PURCHASING_PRICE", "IS_MULTIPLY_BARCODE"); $dbResult = CCatalogStoreDocsElement::GetList(array(), array('DOC_ID' => $ID), false, false, $arSelect); while ($product = $dbResult->GetNext()) { $docElementId = $product["ID"]; $product = array_merge($product, CCatalogStoreControlUtil::getProductInfo($product["ELEMENT_ID"])); $product["BARCODE"] = ''; if ($product["IS_MULTIPLY_BARCODE"] == 'N') { $dbBarCode = CCatalogStoreBarCode::getList(array(), array("PRODUCT_ID" => $product["ELEMENT_ID"])); if ($arBarCode = $dbBarCode->GetNext()) { $product["BARCODE"] = $arBarCode["BARCODE"]; } } elseif ($product["IS_MULTIPLY_BARCODE"] == 'Y') { $dbBarCodes = CCatalogStoreDocsBarcode::getList(array(), array("DOC_ELEMENT_ID" => $docElementId)); while ($arBarCode = $dbBarCodes->GetNext()) { $product["BARCODE"][] = $arBarCode["BARCODE"]; } } $storeFromName = CCatalogStoreControlUtil::getStoreName($product["STORE_FROM"]); $storeToName = CCatalogStoreControlUtil::getStoreName($product["STORE_TO"]); ?> <script type="text/javascript"> var arBarCodes = new Array(); <?php if (is_array($product["BARCODE"])) { foreach ($product["BARCODE"] as $barCode) { ?> arBarCodes.push("<?php echo $barCode;