Стоит задача подключить дополнительные пункты отгрузки товара.
У нас есть центральный магазин (склад 1) и еще несколько магазинов (склад 2, склад 3, склад 4). Везде разные ИП.
Необходимо чтобы при выборе определенного склада подставлялся эквайринг данного ИП.
Например: отгрузка со "склада 2", прием средств на эквайринг "ИП 2"
Реализовать это все решил через ограничение платежных систем.
Надо создать ограничение: использовать эквайринг ИП 2 если выбран склад отгрузки 2, и т.п.
В интернете нашел пример
но при переделки под себя вылазят ошибки и не получается переделать
нужна помощь
взял за основу ограничение для служб доставки
проверяет наличие товара на определенном складе при оформлении корзины
вод код:
перехват событий в init.php пропустим, там все хорошо
непосредственно
Заголовок выдается (код выше) склады выбираются
Ругается на аргументы функции extractParams()/
Ниже не полный тект ошибки
[TypeError]
Argument 1 passed to checkDeliveryStorePay::extractParams() must be an instance of Bitrix\Sale\Shipment, instance of Bitrix\Sale\Payment given...
Вот сама функция:
У нас есть центральный магазин (склад 1) и еще несколько магазинов (склад 2, склад 3, склад 4). Везде разные ИП.
Необходимо чтобы при выборе определенного склада подставлялся эквайринг данного ИП.
Например: отгрузка со "склада 2", прием средств на эквайринг "ИП 2"
Реализовать это все решил через ограничение платежных систем.
Надо создать ограничение: использовать эквайринг ИП 2 если выбран склад отгрузки 2, и т.п.
В интернете нашел пример
но при переделки под себя вылазят ошибки и не получается переделать
нужна помощь
взял за основу ограничение для служб доставки
проверяет наличие товара на определенном складе при оформлении корзины
вод код:
перехват событий в init.php пропустим, там все хорошо
непосредственно
| Код |
|---|
use Bitrix\Sale\Payment;
use \Bitrix\Sale\Shipment;
\Bitrix\Main\Loader::includeModule('highloadblock');
/**
* Class checkDeliveryStore
* Проверка на наличие остатов на складе
*/
class checkDeliveryStorePay extends Restrictions\Base
{
public static $easeSort = 100;
public static function getClassTitle()
{
return 'по наличию на складе';
}
public static function getClassDescription()
{
return 'Будет произведена проверка оформляемой корзины на наличие товаров на выбранном складе.';
}
|
Заголовок выдается (код выше) склады выбираются
| Код |
|---|
/**
* Проверяем
* @param $shipmentData
* @param array $restrictionParams
* @param int $deliveryId
* @return bool
*/
public static function check($shipmentData, array $restrictionParams, $deliveryId = 0)
{
$allowShow = true;
$accessStores = array();
if(!empty($shipmentData) && is_array($shipmentData)
&& !empty($restrictionParams) && is_array($restrictionParams))
{
// склады
foreach ($restrictionParams['STORES'] as $store)
{
$isAllinStock = true;
//товары
foreach ($shipmentData as $arProduct)
{
// если недостаточно товара на складе
if($arProduct['AMOUNTS'][$store] < $arProduct['QUANTITY'])
$isAllinStock = false;
}
if($isAllinStock) $accessStores[$store] = true;
else $accessStores[$store] = false;
}
// не подходит по условиям
if(!in_array(true, $accessStores)) $allowShow = false;
}
return $allowShow;
}
|
Ругается на аргументы функции extractParams()/
Ниже не полный тект ошибки
[TypeError]
Argument 1 passed to checkDeliveryStorePay::extractParams() must be an instance of Bitrix\Sale\Shipment, instance of Bitrix\Sale\Payment given...
Вот сама функция:
| Код |
|---|
/**
* Получим из отгрузки и корзины данные для проверки
* @param \Bitrix\Sale\Shipment $shipment
* @return array|mixed
* @throws \Bitrix\Main\ArgumentException
*/
protected static function extractParams(Bitrix\Sale\Shipment $shipment)
{
$basketItems = array();
foreach ($shipment->getShipmentItemCollection() as $shipmentItem)
{
$productId = $shipmentItem->getProductId();
$arAmounts = array();
$resAmounts = \Bitrix\Catalog\StoreProductTable::getList([
'select' => ['AMOUNT', 'STORE_ID'],
'filter' => ['=PRODUCT_ID' => $productId]
]);
while($datAmount = $resAmounts->fetch())
$arAmounts[$datAmount['STORE_ID']] = $datAmount['AMOUNT'];
$basketItems[] = [
'ID' => $productId,
'QUANTITY' => $shipmentItem->getQuantity(),
'AMOUNTS' => $arAmounts
];
}
return $basketItems;
}
/**
* Сформируем перечень складов
* @param int $deliveryId
* @return array
*/
public static function getParamsStructure($deliveryId = 0)
{
return array(
"STORES" => array(
"TYPE" => "ENUM",
'MULTIPLE' => 'Y',
"OPTIONS" => self::getStoreList(),
"LABEL" => 'Наличие на складах',
)
);
}
/**
* Получение складов
* @return array
* @throws \Bitrix\Main\ArgumentException
*/
protected static function getStoreList()
{
$arStores = [];
$resStores = \Bitrix\Catalog\StoreTable::getList([]);
if (!empty($resStores))
while($store = $resStores->fetch())
$arStores[$store['ID']] = $store['TITLE'];
return $arStores;
}
} |