Skip to content

feat(order): wire EmptyOrder/GetOrderCost events and set errors#393

Open
Ibochkarev wants to merge 1 commit into
betafrom
feat/343-order-draft-events
Open

feat(order): wire EmptyOrder/GetOrderCost events and set errors#393
Ibochkarev wants to merge 1 commit into
betafrom
feat/343-order-draft-events

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Закрывает TODO по событиям черновика/заказа без нового event bus.

  • OrderDraftManager::cleanmsOnBeforeEmptyOrder / msOnEmptyOrder (draft), отказ плагина уходит в API.
  • OrderCostCalculator::getTotalCostmsOnBeforeGetOrderCost / msOnGetOrderCost с returnedValues для cost, delivery_cost, cart_cost, payment_cost (паритет MS2 getCost).
  • Order::set — без batch-событий (их нет в реестре MS2/MS3); поля идут через add() и уже существующие msOnBeforeAddToOrder / msOnAddToOrder; ошибки валидации собираются в data.errors.
  • Создание черновика — без отдельных CreateDraft: msOrder::save() уже шлёт msOnBeforeSaveOrder / msOnSaveOrder с MODE_NEW.
  • recalculate — только запись агрегатов корзины; хуки стоимости на getTotalCost.

Пример плагина

switch ($modx->event->name) {
    case 'msOnBeforeEmptyOrder':
        // $scriptProperties['draft'] — msOrder
        // $modx->event->output('Cannot clear checkout');
        break;
    case 'msOnGetOrderCost':
        $values = &$modx->event->returnedValues;
        $values['cost'] = (float) $scriptProperties['cost'] * 0.95;
        break;
}

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Order::set при ошибке поля теперь может вернуть success: false и data.errors вместо безусловного success (раньше ошибки add() глотались).

Связанные Issues

Closes #343

Как это было протестировано?

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

php -l на трёх изменённых файлах. Плагин на живом MODX не гонял.

Конфигурация тестирования:

  • MiniShop3: ветка feat/343-order-draft-events
  • MODX: —
  • PHP: локальный php -l

Скриншоты (если применимо)

До После

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en)
  • PHPStan проходит без новых ошибок
  • ESLint проходит без ошибок (для JS/Vue изменений)
  • Обновлён CHANGELOG.md (для значимых изменений)

Новых ключей лексикона нет: ms3_order_err_validation уже есть в order.inc.php.

Дополнительные заметки

Связано с контрактом returnedValues (#219). Не трогает mgr OrdersController API. После неуспешного msOnEmptyOrder поля уже очищены — как в MS2.

Fire registered msOnBeforeEmptyOrder/msOnEmptyOrder on draft clean and
msOnBeforeGetOrderCost/msOnGetOrderCost on getTotalCost. Order::set
aggregates per-field add() failures. Draft create stays on SaveOrder;
recalculate stays an internal write without inventing new event names.
@Ibochkarev Ibochkarev requested a review from biz87 July 15, 2026 19:01
@Ibochkarev Ibochkarev changed the title feat(order): wire EmptyOrder/GetOrderCost events and set errors (#343) feat(order): wire EmptyOrder/GetOrderCost events and set errors Jul 16, 2026
@Ibochkarev Ibochkarev added priority: medium Средний приоритет enhancement New feature or request tech-debt Maintainability / refactor / architecture debt and removed priority: medium Средний приоритет labels Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Дописать before/after events в OrderDraftManager и Order::set

1 participant