Advertisement
Trigub_Ilia

Метод вызывается перед получением всех скидок

Feb 28th, 2018
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.59 KB | None | 0 0
  1. AddEventHandler("catalog", "OnGetDiscount","OnGetDiscount");
  2.  
  3.  
  4.     /**
  5.      * Вызывается в методе CCatalogDiscount::GetDiscount перед получением всех скидок
  6.      * @return bool true
  7.      */
  8.     function OnGetDiscount($intProductID, $intIBlockID, $arCatalogGroups,
  9.         $arUserGroups, $strRenewal, $siteID, $arDiscountCoupons, $boolSKU, $boolGetIDS){
  10.         //error_log(print_r($_REQUEST,true), 3, $_SERVER["DOCUMENT_ROOT"] . "/error_log.txt");
  11.         if($_REQUEST['action']!='addProductToBasket') {
  12.             error_log('no'.PHP_EOL, 3, $_SERVER["DOCUMENT_ROOT"] . "/error_log.txt");
  13.             return false;
  14.         }
  15.         else {
  16.             //error_log($_REQUEST['action'], 3, $_SERVER["DOCUMENT_ROOT"] . "/error_log.txt");
  17.             return true;
  18.         }
  19.     }
  20.  
  21.     AddEventHandler("sale", "OnSaleComponentOrderResultPrepared","OnSaleComponentOrderResultPrepared");
  22.     use Bitrix\Highloadblock as HL;
  23.     function OnSaleComponentOrderResultPrepared($order, &$arUserResult, $request,&$arParams,&$arResult){
  24.         error_log('5', 3, $_SERVER["DOCUMENT_ROOT"] . "/error_log.txt");
  25.         //if($request->isAdminSection())
  26.             //return true;
  27.         /*Скидки через HL*/
  28.  
  29.         Bitrix\Main\Loader::includeModule('highloadblock');
  30.  
  31.         $hlBlockId = 3;
  32.         $hlblock = HL\HighloadBlockTable::getById($hlBlockId)->fetch();
  33.         $entity = HL\HighloadBlockTable::compileEntity($hlblock);
  34.         $dataClass = $entity->getDataClass();
  35.  
  36.         $basket = $order->getBasket();
  37.         foreach ($arResult['BASKET_ITEMS'] as &$item){
  38.             $result5 = $dataClass::getList([//запрос скидки из HighloadBlock
  39.                 "select" => array('UF_PROD_ID','UF_DISC_VAL'),
  40.                 "order" => array("ID" => "DESC"),
  41.                 "filter" => array('UF_PROD_ID' => $item['PRODUCT_ID'])
  42.             ]);
  43.             //die($item['PRODUCT_ID']);
  44.             if($arElement2 = $result5->fetch())
  45.                 $discval = $arElement2['UF_DISC_VAL'];
  46.  
  47.             if(!empty($discval) && $discval>0) {
  48.                 $discdiff = (floatval($item['BASE_PRICE'])*floatval($discval))/100;
  49.                 $discprice = floatval($item['BASE_PRICE'])-floatval($discdiff);
  50.  
  51.                 $item["DISCOUNT_PRICE"] = $discprice;
  52.                 $item["DISCOUNT_PRICE_PERCENT"] = $discval;
  53.                 $item["DISCOUNT_PRICE_PERCENT_FORMATED"] = Bitrix\Sale\PriceMaths::roundPrecision($item["DISCOUNT_PRICE_PERCENT"])."%";
  54.                 $item["PRICE_FORMATED"] = SaleFormatCurrency($item["DISCOUNT_PRICE"], $order->getCurrency());
  55.  
  56.                 //Установка цены у товара
  57.                 $basketItem = $basket->getItemByBasketCode($item['ID']);
  58.                 $basketItem->setField('CUSTOM_PRICE', 'Y');
  59.                 $basketItem->setField('PRICE', $discprice);
  60.                 $basketItem->setField('DISCOUNT_PRICE', $discprice);
  61.             }
  62.         }
  63.         $order->setFieldNoDemand('PRICE_DELIVERY', 0);//исправление цены доставки
  64.  
  65.         $order->refreshData();
  66.  
  67.         $payment = $order->getPaymentCollection()[0];
  68.         $payment->setField('SUM', $order->getPrice());//Изменение суммы к оплате
  69.  
  70.         $arResult["ORDER_PRICE"] = $basket->getPrice();
  71.         $arResult["ORDER_PRICE_FORMATED"] = SaleFormatCurrency($basket->getPrice(), $order->getCurrency());
  72.  
  73.         $arResult["ORDER_TOTAL_PRICE"] = $order->getPrice();
  74.         $arResult["ORDER_TOTAL_PRICE_FORMATED"] = SaleFormatCurrency($order->getPrice(), $order->getCurrency());
  75.        
  76.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement