Есть в Сделке пользовательское поле типа файл в нем содержится список товаров. Проблема с зацикливанием в обработчике при перезаписи товаров. Допустим пользователь изменяет сам файл следовательно товары убираем из сделки и новый файл разбираем и перезаписываем товары.
Как избавиться от зацикливания на функции добавления товаров в сделку $res = \CCrmDeal::SaveProductRows($arFields['ID'], $prod) ?
| Код |
|---|
public function beforeDealUpdate(&$arFields)
{
global $USER;
if ($USER->GetID()==1) {
$deals = \CCrmDeal::GetList([], array('ID' => $arFields['ID']))->Fetch();
if ($deals['UF_CRM_1531395798507'] !== $arFields['UF_CRM_1531395798507']) {
$products = \CCrmDeal::LoadProductRows($arFields['ID']);
ParserXLS::changeQuantityProduct($products, 1);
$res = \CCrmDeal::SaveProductRows($arFields['ID'], []);
$obj = new ParserXLS($arFields['ID']);
$arr_products = $obj->getProductList();
foreach ($arr_products as $key => $val) {
$val[7] ? $filter = array('NAME' => $val[4] . " - " . $val[7]) : $filter = array('NAME' => $val[4]);
$products = \CCrmProduct::GetList(array(), $filter, array('ID', 'PRICE'));
if ($products->result->num_rows > 0) {
while ($product = $products->GetNext()) {
$prod[$key] = array(
'ID' => 0,
'PRODUCT_ID' => $product['ID'],
'QUANTITY' => $val[6],
'PRICE' => $product['PRICE'],
);
}
}
}
AddMessage2Log('$arFields=' . print_r($prod, true), '');
ParserXLS::changeQuantityProduct($prod, 0);
$res = \CCrmDeal::SaveProductRows($arFields['ID'], $prod);
}
}
} |