В 4.14.3 склады ломают функцию fn_get_products для витрины


#1

В новой версии в хук get_products(fn_warehouses_get_products) добавлено условие местоположения

    $condition .= db_quote(
        ' AND products.product_id IN (SELECT product_id FROM ?:warehouses_destination_products_amount)'
        . ' AND warehouses_destination_products_amount.destination_id IN (?n)',
        $destination_ids
    );

Но совершенно никак не учитывается что для товара могут не использоваться склады. В часности столкнулись с тем что при получении списка товаров с параметром amount_from вместо списка всех товаров получаем только товары которые есть на складах и в списке нет товаров для которых склады не используются. Как результат сломался вывод товаров в некоторых модулях для витрины.

Для исправления предлагаю заменить запрос на

    $condition .= db_quote(' AND (CASE products.is_stock_split_by_warehouses WHEN ?s'
        . ' THEN products.product_id IN (SELECT product_id FROM ?:warehouses_destination_products_amount) '
        . 'AND warehouses_destination_products_amount.destination_id IN (?n) ELSE 1 END)',
        YesNo::YES, $destination_ids
    );

#2

Здравствуйте, @furniel
Спасибо за ваше сообщение.

Пожалуйста, уточните шаги для воспроизведения проблемы.


#3

Чтобы воспроизвести проблему достаточно выполнить такой вот запрос товаров и посмотреть что там будет. Должны быть все товары отсортированные по популярности, но получаем только товары которые на складах. По сути сломались все запросы товаров для витрины которые используют фильтр наличия товара.

fn_print_die(fn_get_products(['area'=>'C', 'amount_from' => 1, 'sort_by'=>'popularity', 'sort_order'=>'desc']));


#4

Спасибо за ваше разъяснение.
Разработчики знают об этой проблеме и уже взяли её в работу.


#5

Исправлено в 4.14.3.sp1