Skip to content

feat(manager): order cost recalculation API and admin UI (#212) - #288

Merged
biz87 merged 2 commits into
betafrom
feat/gh-212-mgr-order-cost-recalculation
May 21, 2026
Merged

biz87 merged 2 commits into
betafrom
feat/gh-212-mgr-order-cost-recalculation

Conversation

@biz87

@biz87 biz87 commented May 21, 2026

Copy link
Copy Markdown
Member

Replacement for #255 (rebased on top of beta, CHANGELOG conflict resolved). Original PR from @Ibochkarev.

Описание

Реализует #212: явный endpoint POST /api/mgr/orders/{id}/recalculate-cost + кнопка «Пересчитать стоимость» в админке заказа, чтобы менеджер мог пересчитать cart_cost / weight / delivery_cost / cost без побочных эффектов на других полях заказа.

Связанные Issues

Closes #212

Состав

Backend

  • ManagerOrderCostRecalculator (новый сервис) с тремя режимами:
    • auto — пересчитывает только для DefaultDelivery / DefaultPayment (без вызова внешних провайдеров). Для кастомных классов возвращает warning delivery_manual_required / payment_manual_required и сохраняет прежнюю delivery_cost / комиссию 0.
    • manual — оператор передаёт manual_delivery_cost, оплата считается автоматом.
    • force_provider — явный вызов loadController() / loadHandler() → getCost() в try/catch. Сбой провайдера → warning *_provider_error, без молчаливого затирания данных.
  • OrdersController::recalculateCost() + route POST /api/mgr/orders/{id}/recalculate-cost. Ответ — те же данные что в GET /api/mgr/orders/{id}, плюс breakdown (cart/delivery/payment/cost) и warnings[].
  • Лексиконы ru/en для UI и сообщений API.

v2 — учёт ревью

  • Использует PriceAdjustment (feat(settings): allow negative delivery and payment costs #246) вместо собственной copy-paste логики расчёта: isPercent / getPercent / isAllowedPercent / calculate — отрицательные значения и проценты корректно пересчитываются.
  • Использует OrderService::clampComputedTotal() (feat(order): защита total от минуса и бейджи скидки/наценки #266) перед сохранением — cost не уходит в минус.
  • max(0, $withFee - $paymentBase) убран в FORCE_PROVIDER ветке для payment — отрицательная комиссия (скидка) теперь проходит.
  • Убрана лишняя строка AGENTS.md из .gitignore.

Vue (OrderInfoTab.vue, OrderView.vue)

  • Кнопка «Пересчитать стоимость» в сводке заказа.
  • Предупреждение при несохранённой смене способа доставки / оплаты.
  • Поле «Стоимость доставки вручную» появляется при warning от backend.

Тестирование

  • PHPStan на ManagerOrderCostRecalculator.php + OrdersController.php: [OK] No errors.
  • ESLint на Vue: clean.
  • Ручная проверка на dev-сайте: все три режима, защита от минуса, скидки через PriceAdjustment — работают.

POST /api/mgr/orders/{id}/recalculate-cost with ManagerOrderCostRecalculator;
Vue summary controls, lexicons ru/en; refactors after review.

chore: list AGENTS.md in .gitignore for local AI context.
…212)

Use shared PriceAdjustment for delivery/payment surcharges (negative discounts),
OrderService::clampComputedTotal for total; remove redundant AGENTS.md from .gitignore;
drop CHANGELOG entry from this branch.
@biz87
biz87 merged commit 9b3ae6f into beta May 21, 2026
@biz87
biz87 deleted the feat/gh-212-mgr-order-cost-recalculation branch May 21, 2026 19:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Пересчет стоимости заказа при смене способа доставки в админке

2 participants