- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
- Класс: BitrixSaleDiscountBase
- Вызов: DiscountBase::calculateApplyBasketDiscount
protected function calculateApplyBasketDiscount()
{
$result = new Result;
if ($this->useOnlySaleDiscounts())
return $result;
if (empty($this->discountResult['APPLY_BLOCKS'][$this->discountResultCounter]['BASKET']))
return $result;
$applyExist = $this->isBasketApplyResultExist();
$applyBlock = &$this->discountResult['APPLY_BLOCKS'][$this->discountResultCounter]['BASKET'];
foreach ($this->getBasketCodes(false) as $basketCode)
{
if ($this->isCustomPriceByCode($basketCode))
{
if (isset($applyBlock[$basketCode]))
unset($applyBlock[$basketCode]);
continue;
}
if (empty($applyBlock[$basketCode]))
continue;
foreach ($applyBlock[$basketCode] as $index => $discount)
{
$currentProduct = $this->orderData['BASKET_ITEMS'][$basketCode];
$orderDiscountId = $discount['DISCOUNT_ID'];
$orderCouponId = $discount['COUPON_ID'];
if (!isset($this->discountsCache[$orderDiscountId]))
{
$result->addError(new MainEntityEntityError(
Loc::getMessage('BX_SALE_DISCOUNT_ERR_APPLY_WITHOUT_EXT_DISCOUNT'),
self::ERROR_ID
));
return $result;
}
$orderApplication = (
!empty($this->discountsCache[$orderDiscountId]['APPLICATION'])
? $this->discountsCache[$orderDiscountId]['APPLICATION']
: null
);
if (!empty($orderApplication) && !$this->loadDiscountModules($this->discountsCache[$orderDiscountId]['MODULES']))
$orderApplication = null;
if (!empty($orderApplication))
{
$this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_RESULT'] = (
!empty($this->discountsCache[$orderDiscountId]['ACTIONS_DESCR_DATA'])
? $this->discountsCache[$orderDiscountId]['ACTIONS_DESCR_DATA']
: false
);
$applyProduct = null;
eval('$applyProduct='.$orderApplication.';');
if (is_callable($applyProduct))
$applyProduct($this->orderData['BASKET_ITEMS'][$basketCode]);
unset($applyProduct);
if (!empty($this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_RESULT']))
{
$applyBlock[$basketCode][$index]['RESULT']['DESCR_DATA'] = $this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_RESULT'];
$applyBlock[$basketCode][$index]['RESULT']['DESCR'] = $this->formatDescription($this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_RESULT']);
}
unset($this->orderData['BASKET_ITEMS'][$basketCode]['DISCOUNT_RESULT']);
}
unset($orderApplication);
$disable = ($applyBlock[$basketCode][$index]['RESULT']['APPLY'] == 'N');
if ($applyExist)
{
$applyDisable = !$this->getStatusApplyBasketDiscount($basketCode, $orderDiscountId, $orderCouponId);
if ($applyDisable != $disable)
$disable = $applyDisable;
unset($applyDisable);
}
if ($disable)
{
$this->orderData['BASKET_ITEMS'][$basketCode] = $currentProduct;
$applyBlock[$basketCode][$index]['RESULT']['APPLY'] = 'N';
}
else
{
$applyBlock[$basketCode][$index]['RESULT']['APPLY'] = 'Y';
$this->orderData['BASKET_ITEMS'][$basketCode]['ACTION_APPLIED'] = 'Y';
}
unset($disable, $currentProduct);
}
unset($index, $discount);
}
unset($basketCode);
unset($applyBlock);
return $result;
}