Меню

Ограничение служб доставки по наличию товара на складе

Всем привет.
Предыстория: В карточке товара вывел варианты "доставки и самовывоза",
с 00:01 до 23:00 у меня выводится: Самовывоз сегодня - бесплатно , а с 23:00 до 00:01: Самовывоз сегодня - бесплатно
Также ограничил вывод по дням недели, так как в выходные работаем с 9:00 до 18:00. Все казалось бы прекрасно, но некоторых товаров естественно нет в наличии и мне не нужно, чтобы в карточке таких товаров отображался вариант самовывоза. Хочу там выводить только: Доставка на следующий день.

Так вот, пытаюсь ограничить службу доставки по наличию товара на складе, то есть у товаров с нулевым остатком, я не буду выводить службу доставки "Самовывоз".

Пробую сделать так:
Код
//ограничение по наличию товара на складах (если 0, то отправит false).
$arQuantity = CCatalogProduct::GetByID($arResult['ID']);
$quantityAll = $arQuantity['QUANTITY'];

if ($quantityAll > 0) {
    return true;
} else {
    return false;
}
Но, количество не передается в файл php с ограничением службы доставки. Как можно решить проблему?
Цитата
Максим Морозов написал:
Всем привет.
Пробую сделать так:  
Код
 //ограничение по наличию товара на складах (если 0, то отправит false).
$arQuantity = CCatalogProduct::GetByID($arResult['ID']);
$quantityAll = $arQuantity['QUANTITY'];

if ($quantityAll > 0) {
    return true;
} else {
    return false;
}
 
Но, количество не передается в файл php с ограничением службы доставки. Как можно решить проблему?


Как-то сложно понять до конца устройсво решения. Но, если что, количество уже есть в массиве элемента, его можно не получать через API
Код
<?=$arResult['CATALOG_QUANTITY'] ?>
для предложения, соответсвенно
Код
<?= $arOffer['CATALOG_QUANTITY'] ?>

Но с самой задачкой до конца не понятно
У меня есть компонент отображения и модуля ограничения служб доставок:
Компонент edost.catalogdelivery выводит службы доставки в карточку товара.
Модуль alkodesign.restrictions добавляет ограничение служб доставки и оплаты по php строке вида return (true/false) или имя функции.

С помощью ограничения по php строке я сделал в разных службах доставки вот такие ограничения по дням недели и времени:

Код
<?php
//ограничение по времени работы (с "время открытия" до "время закрытия"), использую для "Самовывоз сегодня".
$now = new \DateTimeImmutable();
$startWork = new \DateTimeImmutable("08:00");
$endWork = new \DateTimeImmutable("23:00");

if ($startWork <= $now && $now <= $endWork) {
    return true;
} else {
    return false;
}

//ограничение по времени работы (с "время открытия" до "время закрытия"), использую для "Самовывоз завтра".
$now = new \DateTimeImmutable();
$startWork = new \DateTimeImmutable("23:00");
$endWork = new \DateTimeImmutable("+1 day 08:00");

if ($startWork <= $now && $now <= $endWork) {
    return true;
} else {
    return false;
}

//ограничение по дням работы (суббота и воскресенье).
$now = (new \DateTimeImmutable())->format('w');

if ($now === '6'|| $now === '0') {
    return true;
} else {
    return false;
}

//ограничение по дням работы (искулючаем субботу и воскресенье).
$now = (new \DateTimeImmutable())->format('w');

if ($now !== '6'|| $now !== '0') {
    return true;
} else {
    return false;
}
?>
Таким же образом хотел бы ограничить и по наличию товара. Штатно можно ограничить по наличию какого-то товара в корзине. Но как правильно передать значения наличия товара в мой php код я не знаю, Ваш способ тоже не помог. Думаю проблема в том, что он почему-то не определяет ID товара и не может подгрузить количество.
Думаю я добавил ясности в эту тему)
Спасибо, что пытаетесь помочь, если вдруг знаете, как такое решить и поможете, буду весьма благодарен!
 
Стандартное ограничение Битрикс "по категории" для доставок работает если в корзине только товары из выбранной категории, если в корзине есть товар не из выбранной категории, то ограничение не работает.

Как можно это поправить, чтобы такое ограничение работало, если в корзине хотя бы 1 товар с ограничением, то работало доставка именно для ограничений?  
Видеоуроки по
1С-Битрикс
на моем Boosty канале Видео
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки
 

Блог-note: заметки разработчика

Показ страницы сайта в боковом слайдере, на примере всплывающей формы обратной связи.

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.In...

Обновить страницу Inapbrowser в приложении Apache Cordova, при выходе из фона

Задача: Мобильное приложение, созданное на Apache Cordova должно перезагрузить текущую страницу, открытую с помощью плаг...

Вывод элементов с помощью API битрикс

Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Например, если нужно вывести элем...

Бонус за выполненный заказ на внутренний счет пользователя

Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить пользователю 5% от стоимости за...

Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента

Задача: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, но во...

Вывести артикул в печатную форму бланка заказа

Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе.

Обновление 1С-Битрикс с PHP 7, до поддержки версии PHP 8.3

Задача: обновить устаревший сайт на платформе 1С-Битрикс, который не получал обновлений уже более 4 лет и работает на PH...

Заполнить инфоблок брендов из свойства инфоблока с товарами

Задача: в интернет-магазине есть инфоблок с товарами, загружаемый из 1С, у которого заполнено свойство "Производите...

Фотогалерея на базе компонента новостей, с fancybox.

Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогалереи на базе встроеннного в би...