Добавил ограничение по определенным складам.
<?
use Bitrix\Sale\Delivery\DeliveryLocationTable,
Bitrix\Sale\Internals\CollectableEntity,
Bitrix\Sale\Shipment;
class InCartPropCodeDeliveryRestriction extends \Bitrix\Sale\Delivery\Restrictions\Base
{
public static function getClassTitle()
{
return 'По наличию в корзине товара на определенном складе';
}
public static function getClassDescription()
{
return 'Выбираем склад, для которого будет работать доставка';
}
public static function check($arData, array $restrictionParams, $deliveryId = 0)
{
$amountZero = false;
foreach ($arData as $data) {
$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
'filter' => array('=PRODUCT_ID' => $data, '=STORE_ID' => array(31, 33)),
'select' => array('PRODUCT_ID', 'AMOUNT', 'STORE_ID', 'STORE_TITLE' => 'STORE.TITLE', 'PRODUCT_NAME' => 'PRODUCT.IBLOCK_ELEMENT.NAME'),
));
while ($arStoreProduct = $rsStoreProduct->fetch()) {
if ($arStoreProduct['AMOUNT'] == 0) {
$amountZero = true;
}
}
}
if ($amountZero == true) {
return false;
} else {
return true;
}
}
protected static function extractParams(CollectableEntity $shipment)
{
$mxResult = false;
// Получаем товары в корзине:
foreach ($shipment->getShipmentItemCollection() as $shipmentItem) {
/** @var \Bitrix\Sale\BasketItem $basketItem - запись в корзине */
$basketItem = $shipmentItem->getBasketItem();
$productId = $basketItem->getProductId(); // Получим id товара
// echo $productId;
// Если товар ТП - получим данные элемента ИБ по ID ТП, в противном случае - по текущему ID
$mxResult[] = $productId;
/* if (!is_array($mxResult)) {
$mxResult[] = \CIBlockElement::GetByID($productId)->Fetch();
}*/
}
/* echo "<pre>";
print_r($mxResult);
echo "</pre>";*/
return $mxResult;
}
public static function getParamsStructure($deliveryId = 0)
{
return array(
"PARAM_VALUE" => array(
'TYPE' => 'STRING',
'LABEL' => 'ID склада',
),
);
}
}
?>
Затык в том что у меня в filter STORE_ID = array
'filter' => array('=PRODUCT_ID' => $data, '=STORE_ID' => array(31, 33)),
т.е. идут 2 склада, по которым нужно проверять, а работает только по одному, т.е. если сделать так:
'filter' => array('=PRODUCT_ID' => $data, '=STORE_ID' =>31),
Как исправить что бы ограничение работало по 2?
Я понимаю что функцию сheck наверно нужно вызвать 2 раза, но при этом по очереди передав ID склада что бы проверить, но не знаю как реализовать