Поддержка дробного количества и единиц измерения товаров Shop-Script в плагинах оплаты и доставки

В Shop-Script начиная с версии 9.0.0 доступны поддержка дробного количества и настраиваемых складских единиц измерения товаров (в дополнением к стандартным штукам).

Базовые единицы измерения, настроенные в Shop-Script, в работе плагинов доставки и оплаты не участвуют, поэтому их поддержку декларировать не нужно.

Поддержка этих возможностей доступна только для лицензии «ПРЕМИУМ» и недоступна для лицензии «ПРО». Подробнее о лицензиях Shop-Script.

Объявление поддержки расширенных возможностей

Для того чтобы правильно взаимодействовать с расширенными возможностями лицензии Shop-Script «ПРЕМИУМ», в исходном коде плагинов доставки и оплаты должна быть объявлена поддержка этих возможностей. Поддержку каждой из возможностей нужно объявить с помощью записей в конфигурационном файле plugin.php:

'fractional_quantity' => ...,    // дробное количество
'stock_units' => ...,            // складские единицы измерения

Для каждого из этих ключей доступны 3 возможных значения:

  • true: возможность поддерживается плагином;
  • false: возможность не поддерживается плагином;
  • null (либо запись с ключом отсутствует в файле): разработчик плагина не определился с поддержкой, ситуация остаётся на усмотрение пользователя.

Взаимодействие плагина с Shop-Script

В зависимости от объявленного значения для каждой из расширенных возможностей в конфигурационном файле Shop-Script ведёт себя следующим образом при взаимодействии с плагином:

  • true:
    • Shop-Script передаёт плагину обработку всех заказов.
  • false:
    • Если в заказе есть позиции, требующие поддержки новой возможности, то заказ не передаётся на обработку в плагин.
    • В противном случае заказ передаётся, как обычно.
  • null:
    • Если в заказе есть позиции, требующие поддержки новой возможности, то Shop-Script ориентируется на настройку совместимости плагинов.
    • В противном случае заказ передаётся, как обычно.

Настройка совместимости плагинов

Если у пользователя установлены плагины доставки и оплаты, возвращающие значение null для расширенных возможностей лицензии «ПРЕМИУМ», то на странице совместимости в настройках Shop-Script пользователь может выбрать, каким образом интернет-магазин должен взаимодействовать с такими плагинами.

Варианты настройки для дробного количества товаров

  • Не передавать заказ в плагин, если в заказе есть позиции, требующие поддержки дробного количества.
  • Передавать заказ как есть.
  • Передавать заказ с конвертацией количества заказанных товаров в целочисленные значения: дробное количество будет изменено на 1 (штуку), а стоимость 1 штуки станет равна суммарной стоимости товара в заказе.

Варианты настройки для единиц измерения товаров

  • Не передавать заказ в плагин, если в заказе есть позиции, требующие поддержки настраиваемых единиц измерения (кроме стандартных штук).
  • Передавать заказ как есть.

Описание поддержки расширенных возможностей лицензии Shop-Script «ПРЕМИУМ»

Помимо указания поддержки дробного количества и единиц измерения количества товаров в конфигурационном файле, плагин доставки или оплаты может содержать специальным образом оформленную информацию о поддержке расширенных возможностей лицензии «ПРЕМИУМ» с текстовым описанием. Эта информация поможет пользователям точнее определить, каким образом плагин взаимодействует с разными лицензиями Shop-Script.

Работа с классом waOrder

  1. Если в настройках Shop-Script включена поддержка дробного количества товаров, то в поле ['items'][]['quantity'] экземпляра класса waOrder может содержаться дробное значение. В противном случае — только целочисленное.
  2. Если в настройках Shop-Script включено использование разных единиц измерения количества товаров, то в экземпляре класса waOrder доступно поле ['items'][]['stock_unit']. Если оно заполнено, то содержит отформатированную для чтения строку с обозначением единицы измерения позиции заказа. Например, «кг» или «кв. м.». Если оно не заполнено, то по умолчанию используются штуки.
  3. В классе waOrder доступны публичные методы для определения доступности расширенных возможностей лицензии Shop-Script «ПРЕМИУМ».
    Для их аккуратного использования нужно:
    • либо проверять минимальную версию фреймворка Webasyst в конфигурационном файле requirements.php,
    • либо (если нужно поддерживать более старые версии фреймворка) использовать в коде плагина функцию method_exists().
    • hasFractionalQuantity(): возвращает флаг, обозначающий наличие в заказе позиций с дробным количеством;
    • repackFractionalQuantity():
      • Если в заказе есть позиции с дробным количеством, то метод создаёт и возвращает новый экземпляр класса, в котором изменяет информацию о позициях заказа с дробным количеством так, чтобы превратить их количество в целочисленные значения: дробное количество будет изменено на 1 шт., а стоимость 1 штуки станет равна суммарной стоимости товара в заказе.
      • В противном случае метод ничего не делает и просто возвращает текущий экземпляр класса.
    • hasStockUnits(): возвращает флаг, обозначающий наличие в заказе позиций с настроенными пользователем единицами измерения (кроме стандартных штук).