OnSaleOrderBeforeSaved ??
МЕняю через $shipment->setBasePriceDelivery($newPrice, false); - меняетс BASE_DELIVERY_PRICE, но не меняется DELIVERY_PRICE
в итоге в заказе стоимость доставки = 0
onSaleDeliveryServiceCalculate событие
так тоже не работает :(. точнее оно работает при генерации списка служб доставок, а потом не срабатывает, после выбора и сохранения выбранной службы доставки :(.
ну это уже видно в обработчиках своя химия
в обработчике выполняю: $calcResult->setDeliveryPrice($price); $event->addResult(new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['RESULT' => $calcResult])); но это обработчик вызывается один раз, при выводе списка служб доставок, почему-то.
при каждом запуске расчета вызывается
да, посе выбора службы доставки и переходе к выбору плат. системы в логе я поймал что установлена новая цена доставки через обработчик onSaleDeliveryServiceCalculate $calcResult->setDeliveryPrice($price); $event->addResult(new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['RESULT' => $calcResult])); $log='<p>Set new delivery price: '.$price.'</p>'; Debug::writeToFile('Data: '. $log.PHP_EOL, '', '/logs/order_delivery_price.log'); но при создании заказа - цена доставки все равно = 0 :(.
скидка на доставку :) мб
если это будет так, то это будет писец :(. секунду.
не, тогда была бы стоимость доставки 1000, стоимость доставки с учетом скидок = 0. верно?
доставка 311р стоит?
странно выглядит, видимо уже есть в обработчиках логика
1000р. в сумму заказа она добавлена кстати. Товаров на 6220, скидка 311 = 5909р. + 1000 на доставку = 6909 р.
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'onSaleDeliveryServiceCalculate', array('handlersDelivery','onSaleDeliveryServiceCalculateFuncHandler')); class handlersDelivery{ public static function onSaleDeliveryServiceCalculateFuncHandler(\Bitrix\Main\Event $event){ $calcResult = $event->getParameter('RESULT'); $nos=$_SESSION["MY"]["NEW_ORDER"]; $dId=$event->getParameter("DELIVERY_ID"); if($dId==3 or $dId==1 or $dId==8 or $dId==28 or $dId==29){ $shipment=$event->getParameter("SHIPMENT"); $price = ($_REQUEST["DELIVERY_CUSTOM_PRICE"]>0?$_REQUEST["DELIVERY_CUSTOM_PRICE"]:$nos["DELIVERY_CUSTOM_PRICE"]); // unset($_SESSION["DELIVERY_CUSTOM_PRICE"]); } if($nos["DELIVERY_ID"]=="30"){ $price = 1000; } if(isset($price) and $price>0){ $log='<p>Set new delivery price: '.$price.'</p>'; $calcResult->setDeliveryPrice($price); $event->addResult(new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['RESULT' => $calcResult])); Debug::writeToFile('Data: '. $log.PHP_EOL, '', '/logs/order_delivery_price.log'); # die(); } } }
нет тут а в других обработчиках на заказе уже самом
Вы должны выставить как минимум 2 значения (стоимость доставки и скидку) так, чтобы выполнялось условие base_price = price + скидка (не помню, как поле скидки в отгрузке называется)
тут вроде про скидку не пишется ничего https://dev.1c-bitrix.ru/api_d7/bitrix/sale/classes/delivery/calculationresult/setDeliveryPrice.php
Метод \bitrix\sale\order::applyDiscount посмотрите.
Обсуждают сегодня