Решил задачу, вытаскиваю нужные скидки,и пробую применить к корзине .
Возможно есть лучший вариант.
Скрытый текст |
---|
Код |
---|
class SaleDiscountSet {
protected static $basketItems = null;
protected function __Unpack($arOrder, $strUnpack)
{
$checkOrder = null;
if (empty($strUnpack))
return false;
eval('$checkOrder='.$strUnpack.';');
if (!is_callable($checkOrder))
return false;
$boolRes = $checkOrder($arOrder);
unset($checkOrder);
return $boolRes;
}
public function getBasketItems($orderID=0){
if(self::$basketItems === null && $orderID){
\Bitrix\Main\Loader::includeModule('sale');
$arItems = array();
$resBasket = CSaleBasket::GetList(
array("ID" => "ASC"),
array(
"FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,
"ORDER_ID" => "NULL"
)
);
while($arItem = $resBasket->Fetch()){
$arItems[] = $arItem;
}
self::$basketItems = $arItems;
}
return self::$basketItems;
}
public function getTotalSumBasketItems($orderID){
$basketItems = self::getBasketItems( intval($orderID) );
$totalSum = 0;
foreach($basketItems as $item){
$totalSum += ($item['PRICE'] + $item['DISCOUNT_PRICE']) * $item['QUANTITY'];
}
return $totalSum;
}
public function GetDiscount ($arOrder, $filter= array("ACTIVE"=>"Y"), $select=array("ID",'UNPACK') ){
$listID = array();
$select = array_merge(array('ID', 'UNPACK'), (array)$select) ;
$discountIterator = Internals\DiscountTable::getList(array(
'select' => (array)$select,
'filter' => (array)$filter
));
while ($discount = $discountIterator->fetch()){
if($res = self::__Unpack($arOrder, $discount['UNPACK']) )
$listID[] = $discount["ID"];
}
unset($discountIterator, $filter, $arOrder);
return $listID;
}
function getSetDiscount ($arOrder){
if (!is_array($arOrder)) return array();
Bitrix\Main\Loader::includeModule("sale");
return self::GetDiscount ($arOrder);
}
}
|
Вызов повесил на OnOrderAdd:
Код |
---|
function OnOrderAdd( $ID, $arFields ) {
$arFields['ORDER_PRICE'] = SaleDiscountSet::getTotalSumBasketItems( $ID ) ;
$arBasketDiscount = SaleDiscountSet::getSetDiscount( $arFields ) ; // список скидок на корзину
// действие над скидкой $arBasketDiscount
}
|
|