Новые возможности для разработчиков: доступ к свойствам отправления и управление состояниями отправки

Владислав Горлов

В dev-ветке репозитория на «ГитХабе» опубликовано предварительное обновление фреймворка Webasyst для разработчиков. Оно добавляет новые возможности для создания плагинов доставки:

  • доступ к расширенным свойствам элементов отправления
  • управление состояниями отправки

Расширенные свойства элементов отправления

Для элементов отправления (items) расширен набор свойств: добавлены габариты (width, length, height) и артикул (sku).

Из поля params класса waShipping скопированы в отдельные атрибуты shipping_data и payment_data (по префиксу ключа shipping_data_*** и payment_data_*** соответственно).

Состояния отправления

Отправление — это экземпляр класса waOrder. Оно может находиться в одном из нескольких статусов, которые обозначаются новыми константами:

  • STATE_DRAFT — отправление формируется или редактируется
  • STATE_READY — отправление сформировано и готово к отправке
  • STATE_SHIPPING — отправление передается службе доставки
  • STATE_CANCELED — отправление отменено

Новые методы класса waShipping

setPackageState (waOrder $order, $state, $params = array())

Переводит отправление в указанный статус и возвращает результат в одном из следующих форматов:

  • null — если плагин не поддерживает это состояние.
  • string — одну строку с описанием ошибки для записи ее приложением в историю обработки заказа; HTML-теги допустимы, но не экранируется.
  • array[string] — ассоциативный массив с данными, которые будут сохранены приложением в элемент shipping_data в информации о заказе. Исключение: view_data — строка для отображения в истории обработки заказа. HTML-теги допустимы, но не экранируются.

getStateFields($state, waOrder $order = null, $params = array())

Возвращает массив полей веб-формы, которые должен заполнить пользователь при переводе отправления в указанное состояние $state.

Значения заполненных полей копируются в аргумент $params['shipping_data'] при вызове метода setPackageState().

getAdapter()->getAppProperties($property_name = null)

Позволяет выяснить, насколько подробно приложение поддерживает возможности плагинов доставки.

Возвращает значения из параметра shipping_plugins, указанного в конфигурационном файле app.php. Раньше этот параметр мог быть только булевым, сейчас это может быть также ассоциативный массив обозначений функций, которые поддерживает приложение:

  • desired_date — желаемая дата доставки (требуется, например, для плагина «Курьер»)
  • draft — передача данных о черновике отправления
  • ready — подтверждение данных отправления
  • shipping — запрос на отправку отправления
  • cancel — отмена отправления

Адаптация Shop-Script к новым возможностям

В конфигурационном файле app.php декларирована поддержка параметров shipping_plugins:

  • desired_date
  • draft
  • ready
  • cancel

В класс shopShipping добавлен статический метод getOrderData (array $order, waShipping $shipping_plugin = null).

В классе shopHelper общие части кода выделены в метод getWaOrder().

Изменения в потоке обработки заказов (workflow)

В конструкторе класса shopWorkflowAction для удобства инициализируются модели shopOrder***Model.

Добавлен новый метод setPackageState ($state, $order_id, $params = array()). Он переводит отправление, связанное с заказом, в указанное состояние и сохраняет результаты обмена данными с сервером службы доставки в параметры заказа. Эти параметры сохраняются в таблицу shop_order_params с префиксами shippingdata_***. Запись об этом также всегда добавляется в историю действия с заказом — вне зависимости от результата.

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

  • В состояние waShipping::STATE_DRAFT переводят действия create, edit и pay.
  • В состояние waShipping::STATE_READY переводит действие ship.
  • В состояние waShipping::STATE_CANCELED переводят действия delete и refund, а также действие edit, при котором пользователь выбирает способ доставки, настроенный с помощью другого плагина.
2 мая 2017
  • Syrnik.com 4 мая 2017 02:42

    ship переводит в STATE_READY — как-то нелогично. Логичнее в STATE_SHIPPED наверное переводить.

  • Syrnik.com 4 мая 2017 02:45

    О getStateFields.

    А если нужны разные наборы полей, зависящие от выбранного варианта? например для курьера адрес, а для пвз еще что-нибудь. Можно, конечно, в waOrder заглянуть, но тогда что выводить если waOrder == null? :)



Чтобы добавить комментарий, зарегистрируйтесь или войдите