Twig/Pipelang-функция получения остатков торгового предложения по складам offer_inventories
В Twig и Pipelang добавлена функция offer_inventories для получения остатков торгового предложения (Offer) в разрезе складов.
Спецификация функции
offer_inventories(Offer offer, Site|null site = null, Store[]|Store|null stores = null): Inventory[]
Принимает параметры
Offer offer — объект торгового предложения
Site|null site = null — объект магазина, опциональный (будут возвращены остатки только по складам магазина)
Store[]|Store|null stores = null — объект или массив объектов склада, опциональный (будут возвращены остатки только по указанным складам)
Если указан и site, и stores, учитывается пересечение параметров.
Возвращаемое значение
Inventory[] — возвращается массив остатков по складам (массив объектов типа Inventory). В Inventory доступно значение остатка Inventory.quantity. Для складов в режиме «есть в наличии = да/нет», будет возвращаться 1/0 соответственно. Также доступны поля склада, по которому приведены данные, и закупочная цена на этом складе.
Примеры вызова
В Twig
{# Различные варианты вызова функции #}
{% set inventories = offer_inventories(op.offer) %}
{% set inventories = offer_inventories(op.offer, order.site) %}
{% set inventories = offer_inventories(op.offer, order.site, entity_by_code('Store', 'store-1')) %}
{% set inventories = offer_inventories(op.offer, null, [entity_by_code('Store', 'store-1'), entity_by_code('Store', 'store-2')]) %}
{% set inventories = offer_inventories(op.offer, null, order.shipmentStore) %}
{# Получаем остатки по торговым предложениях позиций заказа для склада 'store-1' c проверкой принадлежности склада к магазину заказа #}
{% for op in order.availableOrderProducts %}
{% for i in offer_inventories(op.offer, order.site, entity_by_code('Store', 'store-1')) %}
{{ i.store.code }}:{{ i.quantity }}
{% endfor %}
{% endfor %}
В Pipelang
# строка из пар <символьный код склада>:<остатки>
offer_inventories(offer, order.site) | reduce((res, x) => res ~ x.store.code ~ ':' ~ x.quantity ~ ';', '')
# вернет true, если на всех складах магазина site-1 остатки данного оффера больше 10
offer_inventories(offer, entity_by_code('Site', 'site-1')) | every(x => x.quantity > 10)
# возвращает склад магазина заказа, где больше всего остатков
(offer_inventories(offer, order.site) | sort((a, b) => a.quantity < b.quantity) | first).store
Описание функций в документации
https://docs.retailcrm.ru/Developers/Automation/Twig/FunctionDictionariesTwig
https://docs.retailcrm.ru/Developers/Automation/PipeLang/Expressionlanguage/AvailableFunctions