Доброго времени суток. Подскажите пожалуйста, вдруг кто сталкивался. Суть в том что мне нужно предоставить скидку, в том случае, если клиент уже заказывал товар на сайте ранее. Я вызываю событие OnSaleComponentOrderResultPrepared и передаю ему свой метод в котором собственно и пытаюсь колдовать. Пока что пришел вот к чему
Код
$basket = $event->getBasket();
foreach($basket->getBasketItems() as $item)
{
$discount_price = $item->getField("PRICE") - ($item->getField("PRICE") / 100 * 90);
var_dump($discount_price); // Тут значение правильное
$item->setField("DISCOUNT_PRICE", $discount_price);
$item->save();
var_dump($item->getField("DISCOUNT_PRICE")); // 0. Почему?
}
$event - это экземпляр заказа, так что тут все правильно. Получается что не отрабатывает setField(), но ведь то же самое на странице корзины прекрасно пересчитало скидку. А на странице оформления заказа DISCOUNT_PRICE так и остается равным нулю. Подозреваю что с событием промахнулся.. Но тогда какое нужно использовать? Подтолкните в нужном направлении?
Доброго времени суток всяк сюда заглянувший. Помогите разобраться с таким вопросом. Когда в заказ добавляется оплата, нужно запретить ее добавление в том случае если у этого заказа есть отгрузка. Я в init.php добавил следующий обработчик
Код
Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnBeforeSalePaymentEntitySaved',
'OnSaleHandler::OnBeforeSalePaymentEntitySavedHandler'
);
class OnSaleHandler
{
public static function OnBeforeSalePaymentEntitySavedHandler(Main\Event $event)
{
$delivery = $event->getParameter("ENTITY");
$orderId = $delivery->getCollection()->getOrder()->getField("ID");
$order = \Bitrix\Sale\Order::load($orderId);
$shipmentCollection = $order->getShipmentCollection();
$allowDelivery = false;
foreach ($shipmentCollection as $shipment)
{
if($shipment->isSystem())
continue;
if($shipment->getField("ALLOW_DELIVERY") == 'Y')
{
$allowDelivery = true;
}
}
if($allowDelivery)
{
//// Тут нужно запретить добавление оплаты
}
}
}
который срабатывая получает id заказа, по которому вытаскивает сам заказ и в цикле проходит по отгрузкам (их может быть несколько). Флаг $allowDelivery выставляется правильно и в целом все работает как мне надо. Но вот дальше я зашел в тупик. Мне нужно отменить добавление этой оплаты, То есть чтоб она вообще не добавлялась даже. Вариант
Код
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
array('У заказа уже есть отгрузки'),
'sale');
ни к чему не приводит, оплата все равно добавляется. Помогите кто не равнодушен - второй день бьюсь