Связал событие
\Bitrix\Main\EventManager::getInstance()->addEventHandler("catalog", "\Bitrix\Catalog\Price::OnAfterAdd", ["PriceTable", "updatePrices"] );
\Bitrix\Main\EventManager::getInstance()->addEventHandler("catalog", "\Bitrix\Catalog\Price::OnAfterUpdate", ["PriceTable", "updatePrices"] );
Получаю текущие установленные цены
$obPriceList = \Bitrix\Catalog\Model\Price::getList(array("filter" => array("PRODUCT_ID" => $arFields["PRODUCT_ID"])));
while($arPrice = $obPriceList->fetch())
{
$arItemPrices[$arPrice["CATALOG_GROUP_ID"]] = $arPrice;
}
Получаю список типов цен через фильтр
$obPriceTypes = \Bitrix\Catalog\GroupTable::getList(array("filter" => array("%=NAME" => "Наценка +%"));
Прохожусь по нему циклом
while ( $arPriceType = $obPriceTypes->fetch() )
{
if ( isset($arItemPrices[$arPriceType["ID"]]) && $arItemPrices[$arPriceType["ID"]] != 1 )
{
$result = \Bitrix\Catalog\Model\Price::update(
$arItemPrices[$arPriceType["ID"]]["ID"],
array(
"PRICE" => $price,
"PRICE_SCALE" => $price
)
);
( $result->isSuccess() ? a2l($result->isSuccess(), "Price::update() " . __LINE__) : a2l($result->getErrorMessages(), 'Price::update Result') );
} else {
$result = \Bitrix\Catalog\Model\Price::add(
array(
"CATALOG_GROUP_ID" => $arPriceType["ID"],
"PRODUCT_ID" => $arFields["PRODUCT_ID"],
"PRICE" => $price,
"PRICE_SCALE" => $price,
"CURRENCY" => $arFields["CURRENCY"]
)
);
( $result->isSuccess() ? a2l($result->isSuccess(), "Price::add() " . __LINE__) : a2l($result->getErrorMessages(), 'Price::update Result') );
}
}
Но цена не устанавливается, хотя
$result->isSuccess()
возвращает 1.
Если этот же код просто выполнить на странице какой-нибудь, предварительно записав в $arFields нужный ID товара, то всё работает.
Почему?