- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/basketcomponenthelper.php
- Класс: BitrixSaleBasketComponentHelper
- Вызов: BasketComponentHelper::onSaleBasketItemEntitySaved
static function onSaleBasketItemEntitySaved(MainEvent $event)
{
$fuserId = Fuser::getId(true);
$basketItem = $event->getParameter('ENTITY');
$originalValues = $event->getParameter('VALUES');
if ((!$basketItem instanceof BasketItem))
{
return new MainEventResult( MainEventResult::SUCCESS, null, 'sale');
}
/** @var BitrixSaleBasket $basket */
if ((!$basket = $basketItem->getCollection())
|| ($basketItem->getFUserId() != $fuserId)
)
{
return new MainEventResult( MainEventResult::SUCCESS, null, 'sale');
}
if ($basketItem->isChanged())
{
$updateSessionData = false;
if (!$basket->getOrder())
{
if (!$updateSessionData && array_key_exists('QUANTITY', $originalValues))
{
$updateSessionData = true;
}
if (!$updateSessionData && (array_key_exists('PRICE', $originalValues) && PriceMaths::roundPrecision($originalValues['PRICE']) !== PriceMaths::roundPrecision($basketItem->getPrice())))
{
$updateSessionData = true;
}
if (!$updateSessionData && (array_key_exists('DISCOUNT_PRICE', $originalValues) && PriceMaths::roundPrecision($originalValues['DISCOUNT_PRICE']) !== PriceMaths::roundPrecision($basketItem->getDiscountPrice())))
{
$updateSessionData = true;
}
}
if (!$updateSessionData && (array_key_exists('ORDER_ID', $originalValues) && (intval($originalValues['ORDER_ID'])) == 0 && intval($basketItem->getField('ORDER_ID') > 0)))
{
$updateSessionData = true;
}
if (!$updateSessionData
&& (array_key_exists('CAN_BUY', $originalValues) && ($originalValues['CAN_BUY'] !== $basketItem->getField('CAN_BUY'))))
{
$updateSessionData = true;
}
if (!$updateSessionData
&& (array_key_exists('DELAY', $originalValues) && ($originalValues['DELAY'] !== $basketItem->getField('DELAY'))))
{
$updateSessionData = true;
}
if ($updateSessionData)
{
static::clearFUserBasketPrice($fuserId, SITE_ID);
static::clearFUserBasketQuantity($fuserId, SITE_ID);
}
}
return new MainEventResult( MainEventResult::SUCCESS, null, 'sale');
}