Пример #1
0
 /**
  * @static
  * @param $arFields
  * @return bool|int
  */
 static function add($arFields)
 {
     global $DB;
     foreach (GetModuleEvents("catalog", "OnBeforeDocumentAdd", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) {
             return false;
         }
     }
     if (array_key_exists('DATE_CREATE', $arFields)) {
         unset($arFields['DATE_CREATE']);
     }
     if (array_key_exists('DATE_MODIFY', $arFields)) {
         unset($arFields['DATE_MODIFY']);
     }
     $arFields['~DATE_MODIFY'] = $DB->GetNowFunction();
     $arFields['~DATE_CREATE'] = $DB->GetNowFunction();
     if (!self::CheckFields('ADD', $arFields)) {
         return false;
     }
     $arInsert = $DB->PrepareInsert("b_catalog_store_docs", $arFields);
     $strSql = "INSERT INTO b_catalog_store_docs (" . $arInsert[0] . ") VALUES(" . $arInsert[1] . ")";
     $res = $DB->Query($strSql, False, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if (!$res) {
         return false;
     }
     $lastId = intval($DB->LastID());
     if (isset($arFields["ELEMENT"]) && is_array($arFields["ELEMENT"])) {
         foreach ($arFields["ELEMENT"] as $arElement) {
             $lastDocElementId = 0;
             if (isset($arElement["ID"])) {
                 unset($arElement["ID"]);
             }
             $arElement["DOC_ID"] = $lastId;
             if (is_array($arElement)) {
                 $lastDocElementId = CCatalogStoreDocsElement::add($arElement);
             }
             if (isset($arElement["BARCODE"]) && $lastDocElementId) {
                 if (is_array($arElement["BARCODE"])) {
                     foreach ($arElement["BARCODE"] as $barcode) {
                         CCatalogStoreDocsBarcode::add(array("DOC_ELEMENT_ID" => $lastDocElementId, "BARCODE" => $barcode));
                     }
                 }
             }
         }
     }
     foreach (GetModuleEvents("catalog", "OnDocumentAdd", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($lastId, $arFields));
     }
     return $lastId;
 }
Пример #2
0
 /**
  * @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);
 }
Пример #3
0
 /**
  * @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);
 }
			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"];
				}
			}
		}
Пример #5
0
 /**
  * @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);
 }
	</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;