- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/basket/baserefreshstrategy.php
- Класс: BitrixSaleBasketBaseRefreshStrategy
- Вызов: BaseRefreshStrategy::updateBasketItem
protected function updateBasketItem(BasketItemBase $item, $data)
{
$result = new Result();
if (!empty($data))
{
$preparedData = $this->prepareData($item, $data);
if (!$preparedData)
{
return $result;
}
if (!$item->isCustomPrice() && isset($preparedData['DISCOUNT_PRICE']) && isset($preparedData['BASE_PRICE']))
{
$preparedData['PRICE'] = $preparedData['BASE_PRICE'] - $preparedData['DISCOUNT_PRICE'];
}
if (
empty($preparedData)
|| (isset($preparedData['QUANTITY']) && $preparedData['QUANTITY'] <= 0)
|| (isset($data['ACTIVE']) && $data['ACTIVE'] === 'N')
)
{
$preparedData['CAN_BUY'] = 'N';
unset($preparedData['QUANTITY']);
}
/** @var MainEvent $event */
$event = new MainEvent('sale', EventActions::EVENT_ON_BASKET_ITEM_REFRESH_DATA, array(
'ENTITY' => $item,
'VALUES' => $data,
'PREPARED_VALUES' => $preparedData
));
$event->send();
if ($event->getResults())
{
/** @var MainEventResult $eventResult */
foreach ($event->getResults() as $eventResult)
{
if ($eventResult->getType() == MainEventResult::ERROR)
{
$errorMsg = new ResultError(
MainLocalizationLoc::getMessage('SALE_EVENT_ON_BASKET_ITEM_REFRESH_DATA'),
'SALE_EVENT_ON_BASKET_ITEM_REFRESH_DATA'
);
if ($eventResultData = $eventResult->getParameters())
{
if (isset($eventResultData) && $eventResultData instanceof ResultError)
{
/** @var ResultError $errorMsg */
$errorMsg = $eventResultData;
}
}
$result->addError($errorMsg);
}
}
}
if ($this->getBasketRefreshGapTime() !== 0)
{
$item->setFieldNoDemand(self::REFRESH_FIELD, new DateTime());
}
}
else
{
$preparedData['CAN_BUY'] = 'N';
}
/** @var Result $r */
$r = $this->applyRefreshResult($item, $preparedData);
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
return $result;
}