Skip to content

fix(settings): связка способа оплаты с доставкой в менеджере - #629

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-628-delivery-payment-link
Open

fix(settings): связка способа оплаты с доставкой в менеджере#629
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-628-delivery-payment-link

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

В Ms3ReferenceCrudService::addLink() при создании связи msDeliveryMember использовался fromArray($criteria) без setPrimaryKeys = true. Для таблицы с составным PK (delivery_id, payment_id) xPDO не записывает поля первичного ключа, save() возвращает false, API отдаёт «Failed to add payment to delivery».

Правка: явный set() для memberOwnFk и memberPeerFk, как уже сделано в replaceLinks() и в ProductLinkService::addLink().

Closes #628

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

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

Связанные Issues

Closes #628

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

cd core/components/minishop3
composer ci:php
# exit 0 — php -l (628 files), 89 smoke OK, PHPUnit 257 tests / 609 assertions OK
composer test -- --filter Ms3ReferenceCrudServiceAddLinkTest
# exit 0 — 3 tests, 7 assertions
  • Ручное тестирование
  • Автоматические тесты (composer ci:php / composer test, npm run lint:ci, composer stan / GitHub Actions CI)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: ветка fix/issue-628-delivery-payment-link
  • MODX: не требовалось для unit-тестов
  • PHP: 8.4.17

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

До После
Toast «Failed to add payment to delivery» при включении оплаты в доставке Связь сохраняется (проверено unit-тестом на composite PK)

Чеклист

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

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

Затронутые эндпойнты:

  • POST /api/mgr/deliveries/{id}/payments
  • POST /api/mgr/payments/{id}/deliveries

Регрессионный тест: tests/Unit/Services/Reference/Ms3ReferenceCrudServiceAddLinkTest.php (probe имитирует xPDO: fromArray() без PK → save() false).

addLink() used fromArray() without setPrimaryKeys, so xPDO skipped
delivery_id/payment_id on msDeliveryMember and save() failed when linking
payment methods to deliveries in the manager UI.

Closes #628
@Ibochkarev Ibochkarev added the bug Something isn't working label Aug 22, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 August 22, 2026 15:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Не удаётся связать способ оплаты со способом доставки (Failed to add payment to delivery)

1 participant