@vimbatu

Как в событии onSaleDeliveryServiceCalculate получить данные?

Стоит такая задача:

Например, покупатель формирует заказ на сайте из нескольких позиций. Далее срабатывают ограничения, создается список доступных для текущего выбора покупателя доставок. Если все товары из заказа есть на складе, привязанном к доставке – все ок, радостно бежим оплачивать. А вот если нет - нужно чтобы к стоимости доставки прибавлялось по сколько-то рублей за каждый товар в заказе, которого нет на выбранном складе. При этом нужно пересчитывать все службы доставки сразу при попадании на страницу оформления заказа, чтобы рядом с ними стояла актуальная цифра.

OnSaleComponentOrderCreated->$arDeliveryServiceAll – почему-то не работает,

$order->getShipmentCollection – выдает какую-то ахинею. Пришла мысль, что пока ему не сделать save, все будет лежать где-то в аяксе. Ведь при загрузке страницы, пока аякс во фрейме все не посчитал, там нет никакой информации?

Я попробовал сделать в init.php функцию на событие onSaleDeliveryServiceCalculate – но тогда эта функция срабатывает раз 20, учитывая, что доставок много и, видимо, ограничения он при этом подсчете не учитывает. Еще у меня к каждой службе доставки привязан склад самовывоза, как получить хотя бы ID этого склада, я не нашел.

AddEventHandler("sale", "onSaleDeliveryServiceCalculate", "setDelivery");

function setDelivery($result, $shipment, $deliveryID) {

$deliveryList = \Bitrix\Sale\Delivery\Services\Manager::getRestrictedObjectsList($shipment); // так получилось добыть список доставок с ограничениями, в документации ни слова об этом

foreach ($deliveryList as $delivery) {

$id[] = $delivery->getId(); // список ID доступных в заказе доставок

}



if (in_array($deliveryID, $id)) { // сравниваем содержимое аргумента с созданным ранее массивом

$deliveryPrice = $result->getDeliveryPrice();

if ($deliveryPrice > 0) {

$newValue = $deliveryPrice + сколько-то денег; // если получится вывести эту опцию в админку, будет здорово

$result->setDeliveryPrice($newValue); // пишем новую стоимость

}

}

}

На этом все, дальше тупик. Не понимаю, как внутри onSaleDeliveryServiceCalculate получить какие-то данные из shipmentcollection, событие срабатывает раньше других на странице. Нужно получить для доступных доставок данные о привязанных складах, чтобы проверять наличие там товара - тоже непонятно как.

Помогите, опытные товарищи.
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы