Оглавление:
Иногда требуется переназначать логику
//изменяем количество в Коэффициент единицы измерения: если стоит свойство
$eventManager->addEventHandler("catalog", "\Bitrix\Catalog\MeasureRatio::OnBeforeUpdate", 'MeasureRatioCustom');
//$eventManager->addEventHandler("catalog", "\Bitrix\Catalog\MeasureRatio::OnBeforeAdd", 'MeasureRatioCustom');
function MeasureRatioCustom (\Bitrix\Main\Event $event) {
$result = new \Bitrix\Main\Entity\EventResult;
$fields = $event->getParameter("fields");
//получаем свойства
$props = [];
\CIBlockElement::GetPropertyValuesArray($props, 37, ['ID' => $fields['PRODUCT_ID']], ['CODE' => ['KOLICHESTVO_SHT_V_KOROBKE']]);
//обновляем количество
if(!empty($props[$fields['PRODUCT_ID']]['KOLICHESTVO_SHT_V_KOROBKE']['VALUE'])){
$result->modifyFields(array('RATIO' => $props[$fields['PRODUCT_ID']]['KOLICHESTVO_SHT_V_KOROBKE']['VALUE']));
}
return $result;
}
/** В моммент выгрузки данные с 1С подменяем единицу измерения при покупки **/
$eventManager->addEventHandler("catalog", "\Bitrix\Catalog\Product::OnAfterUpdate", "ProductOnAfterUpdateCustom");
function ProductOnAfterUpdateCustom(\Bitrix\Main\Event $event) {
$primary = $event->getParameter("id");
$fields = $event->getParameter("fields");
$props = [];
\CIBlockElement::GetPropertyValuesArray($props, $fields['IBLOCK_ID'], ['ID' => $primary['ID']], ['CODE' => ['KOLICHESTVO_SHT_V_KOROBKE']]);
//Обновляем RATIO если количество указано в свойстве другое
if($props[$primary['ID']]['KOLICHESTVO_SHT_V_KOROBKE']['VALUE']){
$data = \Bitrix\Catalog\MeasureRatioTable::getList([
'select' => array('ID', 'RATIO', 'PRODUCT_ID'),
'filter' => array('=PRODUCT_ID' => $primary['ID'])
])->fetch();
\Bitrix\Catalog\MeasureRatioTable::update(
$data["ID"], [
'PRODUCT_ID' => $primary['ID'],
'RATIO' => $props[$primary['ID']]['KOLICHESTVO_SHT_V_KOROBKE']['VALUE'],
]
);
}
}