- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
- Класс: BitrixSaleDiscountBase
- Вызов: DiscountBase::loadOrderDiscounts
protected function loadOrderDiscounts()
{
$result = new Result;
$this->discountsCache = array();
$this->couponsCache = array();
if (!$this->isOrderExists())
return $result;
$order = $this->getOrder();
if ($this->isOrderNew() || $this->getUseMode() == self::USE_MODE_FULL)
return $result;
/** @var DiscountCouponsManager $couponClassName */
$couponClassName = $this->getDiscountCouponClassName();
/** @var OrderDiscount $storageClassName */
$storageClassName = $this->getOrderDiscountClassName();
$applyResult = $storageClassName::loadResultFromDb(
$order->getId(),
$this->reverseBasketTable,
$this->orderData['BASKET_ITEMS']
);
if (!$applyResult->isSuccess())
$result->addErrors($applyResult->getErrors());
$applyResultData = $applyResult->getData();
if (!empty($applyResultData['DISCOUNT_LIST']))
{
foreach ($applyResultData['DISCOUNT_LIST'] as $orderDiscountId => $discountData)
{
$discountData['ACTIONS_DESCR_DATA'] = false;
if (!empty($discountData['ACTIONS_DESCR']) && is_array($discountData['ACTIONS_DESCR']))
{
$discountData['ACTIONS_DESCR_DATA'] = $discountData['ACTIONS_DESCR'];
$discountData['ACTIONS_DESCR'] = $this->formatDescription($discountData['ACTIONS_DESCR']);
}
else
{
$discountData['ACTIONS_DESCR'] = false;
}
if (empty($discountData['ACTIONS_DESCR']))
{
$discountData['ACTIONS_DESCR'] = false;
$discountData['ACTIONS_DESCR_DATA'] = false;
}
$this->discountsCache[$orderDiscountId] = $discountData;
}
unset($orderDiscountId, $discountData);
}
if (!empty($applyResultData['COUPON_LIST']))
$this->couponsCache = $applyResultData['COUPON_LIST'];
$this->discountResultCounter = 0;
$this->discountResult['APPLY_BLOCKS'] = $applyResultData['APPLY_BLOCKS'];
if (!empty($this->discountResult['APPLY_BLOCKS']))
{
foreach ($this->discountResult['APPLY_BLOCKS'] as $counter => $applyBlock)
{
if (!empty($applyBlock['BASKET']))
{
foreach ($applyBlock['BASKET'] as $discountList)
{
foreach ($discountList as $discount)
{
if ($discount['COUPON_ID'] == '')
continue;
$couponClassName::setApplyByProduct($discount, array($discount['COUPON_ID']));
}
}
unset($discountList);
}
if (!empty($applyBlock['ORDER']))
{
foreach ($applyBlock['ORDER'] as $discount)
{
if ($discount['COUPON_ID'] != '')
$couponClassName::setApply($discount['COUPON_ID'], $discount['RESULT']);
}
unset($discount);
}
$this->discountResultCounter = $counter + 1;
}
unset($counter, $applyBlock);
}
if (!empty($applyResultData['STORED_ACTION_DATA']) && is_array($applyResultData['STORED_ACTION_DATA']))
$this->discountStoredActionData = $applyResultData['STORED_ACTION_DATA'];
unset($applyResultData, $applyResult);
return $result;
}