Skip to content

[Bug] OrdersController::recalculateOrderTotals без payment fee в preview черновика #449

Description

@Ibochkarev

Описание проблемы

При add/update товаров в draft-заказе менеджер OrdersController::recalculateOrderTotals() пересчитывает только cart_cost, weight и cost = cart + delivery_cost с payment fee = 0. Комиссия оплаты не учитывается.

Это pre-existing расхождение, не введённое #373, но остаётся после унификации finalize/recalculate через ManagerOrderCostRecalculator.

Где

core/components/minishop3/src/Controllers/Api/Manager/OrdersController.phprecalculateOrderTotals() (~1397–1421):

$order->set('cost', $orderService->clampComputedTotal($order, $cartCost, $deliveryCost, 0.0));

Вызывается при операциях с позициями заказа (add/update product paths).

Ожидаемое поведение

Preview cost в черновике совпадает с breakdown из ManagerOrderCostRecalculator::calculateBreakdown() (MODE_AUTO): cart + delivery + payment commission для default handlers, те же правила доставки (free_delivery_amount, %), что у «Пересчитать стоимость» и finalize.

Фактическое поведение

  • delivery_cost берётся из persisted поля заказа (не пересчитывается при смене состава)
  • payment fee всегда 0 в clampComputedTotal

Предлагаемое решение

Делегировать в ManagerOrderCostRecalculator::calculateBreakdown($order) (как OrderFinalizeService::calculateCosts после #373):

  • обновить cart_cost, weight, delivery_cost, cost из breakdown
  • не блокировать save при warnings (это preview, не finalize) — warnings можно логировать или отдавать в meta ответа API при необходимости

Связанные Issues

Критерии приёмки

  • После add/update товара order.cost включает payment commission для DefaultPayment при ненулевой доставке
  • Поведение согласовано с POST …/recalculate-cost (MODE_AUTO) для типовых delivery/payment
  • Smoke/regression: расширить ManagerOrderCostRecalculatorRulesTest или отдельный тест на путь контроллера при возможности
  • composer ci:php проходит

Out of scope

  • Выравнивание web checkout (OrderCostCalculator::getPaymentCost — база только cart) с manager path
  • Блокировка операций при warnings (политика только для finalize)

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions