- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discountbase.php
- Класс: BitrixSaleDiscountBase
- Вызов: DiscountBase::calculateApplyAdditionalCoupons
protected function calculateApplyAdditionalCoupons()
{
$result = new Result;
$useMode = $this->getUseMode();
if ($useMode != self::USE_MODE_APPLY && $useMode != self::USE_MODE_MIXED)
return $result;
if (!$this->useOnlySaleDiscounts())
{
$couponList = $this->getAdditionalCoupons(array('!MODULE_ID' => 'sale'));
if (!empty($couponList))
{
$params = array(
'USE_BASE_PRICE' => $this->saleOptions['USE_BASE_PRICE'],
'USER_ID' => $this->orderData['USER_ID'],
'SITE_ID' => $this->orderData['SITE_ID']
);
$couponsByModule = array();
foreach ($couponList as &$coupon)
{
if (!isset($couponsByModule[$coupon['MODULE_ID']]))
$couponsByModule[$coupon['MODULE_ID']] = array();
$couponsByModule[$coupon['MODULE_ID']][] = array(
'DISCOUNT_ID' => $coupon['DISCOUNT_ID'],
'COUPON' => $coupon['COUPON']
);
}
unset($coupon);
if (!empty($couponsByModule))
{
/** @var OrderDiscount $storageClassName */
$storageClassName = $this->getOrderDiscountClassName();
foreach ($couponsByModule as $moduleId => $moduleCoupons)
{
if ($useMode == self::USE_MODE_APPLY)
{
$currentBasket = $this->orderData['BASKET_ITEMS'];
}
else
{
$currentBasket = array();
$basketCodeList = $this->getBasketCodes(false);
foreach ($basketCodeList as $basketCode)
$currentBasket[$basketCode] = $this->orderData['BASKET_ITEMS'][$basketCode];
unset($basketCode, $basketCodeList);
}
if (empty($currentBasket))
continue;
$couponsApply = $storageClassName::calculateApplyCoupons(
$moduleId,
$moduleCoupons,
$currentBasket,
$params
);
unset($currentBasket);
if (!empty($couponsApply))
{
$couponsApplyResult = $this->calculateApplyBasketAdditionalCoupons($couponsApply);
if (!$couponsApplyResult->isSuccess())
$result->addErrors($couponsApplyResult->getErrors());
unset($couponsApplyResult);
}
unset($couponsApply);
}
unset($moduleId, $moduleCoupons);
}
unset($couponsByModule, $params);
}
unset($couponList);
}
$couponList = $this->getAdditionalCoupons(array('MODULE_ID' => 'sale'));
if (!empty($couponList))
{
$couponsApplyResult = $this->calculateApplySaleAdditionalCoupons($couponList);
if (!$couponsApplyResult->isSuccess())
$result->addErrors($couponsApplyResult->getErrors());
unset($couponsApplyResult);
}
unset($couponList);
return $result;
}