Как правильно отфильтровать доступные доставки в Битрикс?

Суть в том что имея ID города и ID товара нужно показать доступные доставки

use Bitrix\Main\Context,
    Bitrix\Currency\CurrencyManager,
    Bitrix\Sale,
    Bitrix\Sale\Order,
    Bitrix\Sale\Basket,
    Bitrix\Sale\Delivery,
    Bitrix\Sale\PaySystem;

// есть один товар
$products = [1 => ["id" => 226256]];

// есть код местоположения, Москва
$locationId= '0000073738';

// начинаем оформлять
$siteId = Context::getCurrent()->getSite();
$currencyCode = CurrencyManager::getBaseCurrency();

// создаём корзину
$basket = Bitrix\Sale\Basket::create($siteId);
foreach ($products as $product) {
    $item = $basket->createItem('catalog', $product['id']);
    unset($product["id"]);
    $item->setFields([
        'QUANTITY' => $product['quantity'],
        'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
        'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
        'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
    ]);
}

// пока пишем тестового пользователя
$order = Bitrix\Sale\Order::create($siteId, 67020);
$order->setPersonTypeId(1);
$order->setBasket($basket);

// дополняем заказ местоположением заказа
$order->getPropertyCollection()->getDeliveryLocation()->setValue((int)$locationId);

// Создаём отгрузку
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem();
$shipmentItemCollection = $shipment->getShipmentItemCollection();
$shipment->setField('CURRENCY', $order->getCurrency());
foreach ($order->getBasket() as $item)
{
    $shipmentItem = $shipmentItemCollection->createItem($item);
    $shipmentItem->setQuantity($item->getQuantity());
}

$mode = \Bitrix\Sale\Services\Base\RestrictionManager::MODE_CLIENT;

/ /проверка доступности отгрузки и получение списка доставок
$deliveryList = \Bitrix\Sale\Delivery\Services\Manager::getRestrictedList($shipment, $mode);

$resultDelivery = [];
$restrictionParams =['ID' => 'ID'];

// дополнительно фильтрую отгрузки по доступности города
foreach ($deliveryList as $delivery){
    if (Bitrix\Sale\Delivery\Restrictions\ByLocation::check($locationId, $restrictionParams, $delivery['ID'])) {
        $resultDelivery[] = $delivery;
    }
}
print_r($resultDelivery);


в итоге print_r($resultDelivery); выведет 2 доставки, а если тот же товар положить на сайте в корзину, то дает 1 доставку. Что я тут делаю не так?
  • Вопрос задан
  • 242 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы