Ejemplo n.º 1
0
 protected function distributeElementsToStores($arFields, $userId)
 {
     global $DB;
     $arErrorElement = array();
     if (isset($arFields["ELEMENTS"]) && is_array($arFields["ELEMENTS"])) {
         foreach ($arFields["ELEMENTS"] as $arElement) {
             $arErrorElement = self::checkTotalAmount($arElement);
             if (isset($arElement["STORE_FROM"])) {
                 $rsResult = CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $arElement["PRODUCT_ID"], "STORE_ID" => $arElement["STORE_FROM"]), false, false, array('ID', 'AMOUNT'));
                 $arID = $rsResult->Fetch();
                 $storeFromName = CCatalogStoreControlUtil::getStoreName($arElement["STORE_FROM"]);
                 $productInfo = CCatalogStoreControlUtil::getProductInfo($arElement["PRODUCT_ID"]);
                 if ($arID !== false || $arElement["NEGATIVE_AMOUNT_TRACE"] == 'Y') {
                     $amountForUpdate = doubleval($arID["AMOUNT"]) - $arElement["AMOUNT"];
                     if ($amountForUpdate >= 0 || $arElement["NEGATIVE_AMOUNT_TRACE"] == 'Y') {
                         if (!CCatalogStoreProduct::UpdateFromForm(array("PRODUCT_ID" => $arElement['PRODUCT_ID'], "STORE_ID" => $arElement['STORE_FROM'], "AMOUNT" => $amountForUpdate))) {
                             return false;
                         }
                     } else {
                         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_INSUFFICIENTLY_AMOUNT", array("#STORE#" => '"' . $storeFromName . '"', "#PRODUCT#" => '"' . $productInfo["NAME"] . '"')));
                         return false;
                     }
                 } else {
                     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_INSUFFICIENTLY_AMOUNT", array("#STORE#" => $storeFromName, "#PRODUCT#" => $productInfo["NAME"])));
                     return false;
                 }
             }
             if (isset($arElement["STORE_TO"])) {
                 if (!CCatalogStoreProduct::addToBalanceOfStore($arElement["STORE_TO"], $arElement["PRODUCT_ID"], $arElement["AMOUNT"])) {
                     return false;
                 }
             }
             if (isset($arElement["BARCODES"]) && is_array($arElement["BARCODES"])) {
                 foreach ($arElement["BARCODES"] as $arBarCode) {
                     if (!self::applyBarCode($arBarCode, $userId)) {
                         return false;
                     }
                 }
             }
             $dbAmount = $DB->Query("SELECT SUM(SP.AMOUNT) as SUM, CP.QUANTITY_RESERVED as RESERVED FROM b_catalog_store_product SP INNER JOIN b_catalog_product CP ON SP.PRODUCT_ID = CP.ID INNER JOIN b_catalog_store CS ON SP.STORE_ID = CS.ID WHERE SP.PRODUCT_ID = " . $arElement["PRODUCT_ID"] . "  AND CS.ACTIVE = 'Y' GROUP BY QUANTITY_RESERVED ", true);
             if ($arAmount = $dbAmount->Fetch()) {
                 $arFields = array();
                 if (isset($arElement["PURCHASING_INFO"])) {
                     $arFields = $arElement["PURCHASING_INFO"];
                 }
                 $arFields["QUANTITY"] = doubleval($arAmount["SUM"] - $arAmount["RESERVED"]);
                 if (!CCatalogProduct::Update($arElement["PRODUCT_ID"], $arFields)) {
                     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CAT_DOC_PURCHASING_INFO_ERROR"));
                     return false;
                 }
             } else {
                 return false;
             }
         }
     }
     if (!empty($arErrorElement)) {
         return $arErrorElement;
     }
     return true;
 }
Ejemplo n.º 2
0
 function ImportStoresAmount($arElement, $elementID, &$counter)
 {
     $arFields = array();
     $arFields['PRODUCT_ID'] = $elementID;
     static $arStoreResult = false;
     if ($arStoreResult === false) {
         $arStoreResult = array();
         $resStore = CCatalogStore::GetList(array(), array(), false, false, array("ID", "XML_ID"));
         while ($arStore = $resStore->Fetch()) {
             $arStoreResult[$arStore["XML_ID"]] = $arStore["ID"];
         }
     }
     foreach ($arElement as $xmlID => $amount) {
         if (isset($arStoreResult[$xmlID])) {
             $arFields['STORE_ID'] = $arStoreResult[$xmlID];
             $arFields['AMOUNT'] = $amount;
             $res = CCatalogStoreProduct::UpdateFromForm($arFields);
             if (!$res) {
                 $counter["ERR"]++;
             }
         }
     }
     return true;
 }
Ejemplo n.º 3
0
                            if (isset(${"CAT_USER_GROUP_ID_" . $arGroup["ID"]}) && ${"CAT_USER_GROUP_ID_" . $arGroup["ID"]} == "Y") {
                                if (IntVal(${"CAT_ACCESS_LENGTH_" . $arGroup["ID"]}) != IntVal($arCurProductGroups[$arGroup["ID"]]["ACCESS_LENGTH"]) || ${"CAT_ACCESS_LENGTH_TYPE_" . $arGroup["ID"]} != $arCurProductGroups[$arGroup["ID"]]["ACCESS_LENGTH_TYPE"]) {
                                    $arCatalogFields = array("ACCESS_LENGTH" => IntVal(${"CAT_ACCESS_LENGTH_" . $arGroup["ID"]}), "ACCESS_LENGTH_TYPE" => ${"CAT_ACCESS_LENGTH_TYPE_" . $arGroup["ID"]});
                                    CCatalogProductGroups::Update($arCurProductGroups[$arGroup["ID"]]["ID"], $arCatalogFields);
                                }
                            } else {
                                CCatalogProductGroups::Delete($arCurProductGroups[$arGroup["ID"]]["ID"]);
                            }
                        } else {
                            if (isset(${"CAT_USER_GROUP_ID_" . $arGroup["ID"]}) && ${"CAT_USER_GROUP_ID_" . $arGroup["ID"]} == "Y") {
                                $arCatalogFields = array("PRODUCT_ID" => $ID, "GROUP_ID" => $arGroup["ID"], "ACCESS_LENGTH" => IntVal(${"CAT_ACCESS_LENGTH_" . $arGroup["ID"]}), "ACCESS_LENGTH_TYPE" => ${"CAT_ACCESS_LENGTH_TYPE_" . $arGroup["ID"]});
                                CCatalogProductGroups::Add($arCatalogFields);
                            }
                        }
                    }
                }
                if ($USER->CanDoOperation('catalog_store')) {
                    $rsStores = CCatalogStore::GetList(array(), array('ACTIVE' => 'Y'), false, false, array('ID'));
                    while ($arStore = $rsStores->Fetch()) {
                        if (isset($_POST['AR_AMOUNT'][$arStore['ID']])) {
                            $arStoreProductFields = array("PRODUCT_ID" => $ID, "STORE_ID" => $arStore['ID'], "AMOUNT" => $_POST['AR_AMOUNT'][$arStore['ID']]);
                            if (!CCatalogStoreProduct::UpdateFromForm($arStoreProductFields)) {
                                $bVarsFromForm = true;
                            }
                        }
                    }
                }
            }
        }
    }
}