diff --git a/spec/Entity/RefundPaymentSpec.php b/spec/Entity/RefundPaymentSpec.php
index 514df165..32c8cff2 100644
--- a/spec/Entity/RefundPaymentSpec.php
+++ b/spec/Entity/RefundPaymentSpec.php
@@ -14,15 +14,16 @@
namespace spec\Sylius\RefundPlugin\Entity;
use PhpSpec\ObjectBehavior;
+use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Core\Model\PaymentMethodInterface;
use Sylius\RefundPlugin\Entity\RefundPayment;
use Sylius\RefundPlugin\Entity\RefundPaymentInterface;
final class RefundPaymentSpec extends ObjectBehavior
{
- public function let(PaymentMethodInterface $paymentMethod): void
+ public function let(OrderInterface $order, PaymentMethodInterface $paymentMethod): void
{
- $this->beConstructedWith('000002', 100, 'USD', RefundPaymentInterface::STATE_NEW, $paymentMethod);
+ $this->beConstructedWith($order, 100, 'USD', RefundPaymentInterface::STATE_NEW, $paymentMethod);
}
public function it_is_initializable(): void
@@ -40,8 +41,11 @@ public function it_has_no_id_by_default(): void
$this->getId()->shouldReturn(null);
}
- public function it_has_order_number(): void
+ public function it_has_an_order(OrderInterface $order): void
{
+ $order->getNumber()->willReturn('000002');
+
+ $this->getOrder()->shouldReturn($order);
$this->getOrderNumber()->shouldReturn('000002');
}
diff --git a/spec/Factory/RefundPaymentFactorySpec.php b/spec/Factory/RefundPaymentFactorySpec.php
index 735862f1..9b518691 100644
--- a/spec/Factory/RefundPaymentFactorySpec.php
+++ b/spec/Factory/RefundPaymentFactorySpec.php
@@ -14,6 +14,7 @@
namespace spec\Sylius\RefundPlugin\Factory;
use PhpSpec\ObjectBehavior;
+use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Core\Model\PaymentMethodInterface;
use Sylius\Component\Core\Repository\PaymentMethodRepositoryInterface;
use Sylius\RefundPlugin\Entity\RefundPayment;
@@ -40,19 +41,21 @@ public function it_implements_refund_payment_factory_interface(): void
public function it_creates_new_refund_payment(
PaymentMethodRepositoryInterface $paymentMethodRepository,
- PaymentMethodInterface $paymentMethod
+ PaymentMethodInterface $paymentMethod,
+ OrderInterface $order
): void {
$paymentMethodRepository->find(1)->willReturn($paymentMethod);
- $this->createWithData(
- '0002',
- 1000,
- 'USD',
- RefundPaymentInterface::STATE_NEW,
- 1
- )->shouldBeLike(
- new RefundPayment(
- '0002',
+ $this
+ ->createWithData(
+ $order,
+ 1000,
+ 'USD',
+ RefundPaymentInterface::STATE_NEW,
+ 1
+ )
+ ->shouldBeLike(new RefundPayment(
+ $order->getWrappedObject(),
1000,
'USD',
RefundPaymentInterface::STATE_NEW,
diff --git a/spec/ProcessManager/RefundPaymentProcessManagerSpec.php b/spec/ProcessManager/RefundPaymentProcessManagerSpec.php
index 3c5c12d7..cfd0ab0b 100644
--- a/spec/ProcessManager/RefundPaymentProcessManagerSpec.php
+++ b/spec/ProcessManager/RefundPaymentProcessManagerSpec.php
@@ -15,6 +15,8 @@
use Doctrine\ORM\EntityManagerInterface;
use PhpSpec\ObjectBehavior;
+use Sylius\Component\Core\Model\OrderInterface;
+use Sylius\Component\Core\Repository\OrderRepositoryInterface;
use Sylius\RefundPlugin\Entity\RefundPaymentInterface;
use Sylius\RefundPlugin\Event\RefundPaymentGenerated;
use Sylius\RefundPlugin\Event\UnitsRefunded;
@@ -33,6 +35,7 @@ public function let(
OrderFullyRefundedStateResolverInterface $orderFullyRefundedStateResolver,
RelatedPaymentIdProviderInterface $relatedPaymentIdProvider,
RefundPaymentFactoryInterface $refundPaymentFactory,
+ OrderRepositoryInterface $orderRepository,
EntityManagerInterface $entityManager,
MessageBusInterface $eventBus
): void {
@@ -40,6 +43,7 @@ public function let(
$orderFullyRefundedStateResolver,
$relatedPaymentIdProvider,
$refundPaymentFactory,
+ $orderRepository,
$entityManager,
$eventBus
);
@@ -54,12 +58,16 @@ public function it_reacts_on_units_refunded_event_and_creates_refund_payment(
OrderFullyRefundedStateResolverInterface $orderFullyRefundedStateResolver,
RelatedPaymentIdProviderInterface $relatedPaymentIdProvider,
RefundPaymentFactoryInterface $refundPaymentFactory,
+ OrderRepositoryInterface $orderRepository,
EntityManagerInterface $entityManager,
+ MessageBusInterface $eventBus,
RefundPaymentInterface $refundPayment,
- MessageBusInterface $eventBus
+ OrderInterface $order
): void {
+ $orderRepository->findOneByNumber('000222')->willReturn($order);
+
$refundPaymentFactory->createWithData(
- '000222',
+ $order,
1000,
'USD',
RefundPaymentInterface::STATE_NEW,
@@ -72,7 +80,7 @@ public function it_reacts_on_units_refunded_event_and_creates_refund_payment(
$orderFullyRefundedStateResolver->resolve('000222')->shouldBeCalled();
$refundPayment->getId()->willReturn(10);
- $refundPayment->getOrderNumber()->willReturn('000222');
+ $refundPayment->getOrder()->willReturn($order);
$refundPayment->getAmount()->willReturn(1000);
$relatedPaymentIdProvider->getForRefundPayment($refundPayment)->willReturn(3);
diff --git a/src/Entity/RefundPayment.php b/src/Entity/RefundPayment.php
index 385041ee..f5afba62 100644
--- a/src/Entity/RefundPayment.php
+++ b/src/Entity/RefundPayment.php
@@ -13,6 +13,7 @@
namespace Sylius\RefundPlugin\Entity;
+use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Core\Model\PaymentMethodInterface;
class RefundPayment implements RefundPaymentInterface
@@ -20,8 +21,8 @@ class RefundPayment implements RefundPaymentInterface
/** @var int|null */
protected $id;
- /** @var string */
- protected $orderNumber;
+ /** @var OrderInterface */
+ protected $order;
/** @var int */
protected $amount;
@@ -36,13 +37,13 @@ class RefundPayment implements RefundPaymentInterface
protected $paymentMethod;
public function __construct(
- string $orderNumber,
+ OrderInterface $order,
int $amount,
string $currencyCode,
string $state,
PaymentMethodInterface $paymentMethod
) {
- $this->orderNumber = $orderNumber;
+ $this->order = $order;
$this->amount = $amount;
$this->currencyCode = $currencyCode;
$this->state = $state;
@@ -54,9 +55,14 @@ public function getId(): ?int
return $this->id;
}
+ public function getOrder(): OrderInterface
+ {
+ return $this->order;
+ }
+
public function getOrderNumber(): string
{
- return $this->orderNumber;
+ return $this->getOrder()->getNumber();
}
public function getAmount(): int
diff --git a/src/Entity/RefundPaymentInterface.php b/src/Entity/RefundPaymentInterface.php
index 1f14ddcf..d2dd4c62 100644
--- a/src/Entity/RefundPaymentInterface.php
+++ b/src/Entity/RefundPaymentInterface.php
@@ -13,6 +13,7 @@
namespace Sylius\RefundPlugin\Entity;
+use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Core\Model\PaymentMethodInterface;
use Sylius\Component\Resource\Model\ResourceInterface;
@@ -22,6 +23,9 @@ interface RefundPaymentInterface extends ResourceInterface
public const STATE_COMPLETED = 'completed';
+ public function getOrder(): OrderInterface;
+
+ /** @deprecated this function is deprecated and will be removed in v1.0. Use RefundPaymentInterface::getOrder() instead */
public function getOrderNumber(): string;
public function getAmount(): int;
diff --git a/src/Factory/RefundPaymentFactory.php b/src/Factory/RefundPaymentFactory.php
index c1cc8fd4..c9b05af4 100644
--- a/src/Factory/RefundPaymentFactory.php
+++ b/src/Factory/RefundPaymentFactory.php
@@ -13,6 +13,7 @@
namespace Sylius\RefundPlugin\Factory;
+use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Core\Model\PaymentMethodInterface;
use Sylius\Component\Core\Repository\PaymentMethodRepositoryInterface;
use Sylius\RefundPlugin\Entity\RefundPayment;
@@ -29,7 +30,7 @@ public function __construct(PaymentMethodRepositoryInterface $paymentMethodRepos
}
public function createWithData(
- string $orderNumber,
+ OrderInterface $order,
int $amount,
string $currencyCode,
string $state,
@@ -38,6 +39,6 @@ public function createWithData(
/** @var PaymentMethodInterface $paymentMethod */
$paymentMethod = $this->paymentMethodRepository->find($paymentMethodId);
- return new RefundPayment($orderNumber, $amount, $currencyCode, $state, $paymentMethod);
+ return new RefundPayment($order, $amount, $currencyCode, $state, $paymentMethod);
}
}
diff --git a/src/Factory/RefundPaymentFactoryInterface.php b/src/Factory/RefundPaymentFactoryInterface.php
index 1f865415..d9fccc42 100644
--- a/src/Factory/RefundPaymentFactoryInterface.php
+++ b/src/Factory/RefundPaymentFactoryInterface.php
@@ -13,12 +13,13 @@
namespace Sylius\RefundPlugin\Factory;
+use Sylius\Component\Core\Model\OrderInterface;
use Sylius\RefundPlugin\Entity\RefundPaymentInterface;
interface RefundPaymentFactoryInterface
{
public function createWithData(
- string $orderNumber,
+ OrderInterface $order,
int $amount,
string $currencyCode,
string $state,
diff --git a/src/ProcessManager/RefundPaymentProcessManager.php b/src/ProcessManager/RefundPaymentProcessManager.php
index 689999bc..9931253b 100644
--- a/src/ProcessManager/RefundPaymentProcessManager.php
+++ b/src/ProcessManager/RefundPaymentProcessManager.php
@@ -14,6 +14,8 @@
namespace Sylius\RefundPlugin\ProcessManager;
use Doctrine\ORM\EntityManagerInterface;
+use Sylius\Component\Core\Model\OrderInterface;
+use Sylius\Component\Core\Repository\OrderRepositoryInterface;
use Sylius\RefundPlugin\Entity\RefundPaymentInterface;
use Sylius\RefundPlugin\Event\RefundPaymentGenerated;
use Sylius\RefundPlugin\Event\UnitsRefunded;
@@ -21,6 +23,7 @@
use Sylius\RefundPlugin\Provider\RelatedPaymentIdProviderInterface;
use Sylius\RefundPlugin\StateResolver\OrderFullyRefundedStateResolverInterface;
use Symfony\Component\Messenger\MessageBusInterface;
+use Webmozart\Assert\Assert;
final class RefundPaymentProcessManager implements UnitsRefundedProcessStepInterface
{
@@ -33,6 +36,9 @@ final class RefundPaymentProcessManager implements UnitsRefundedProcessStepInter
/** @var RefundPaymentFactoryInterface */
private $refundPaymentFactory;
+ /** @var OrderRepositoryInterface */
+ private $orderRepository;
+
/** @var EntityManagerInterface */
private $entityManager;
@@ -43,20 +49,26 @@ public function __construct(
OrderFullyRefundedStateResolverInterface $orderFullyRefundedStateResolver,
RelatedPaymentIdProviderInterface $relatedPaymentIdProvider,
RefundPaymentFactoryInterface $refundPaymentFactory,
+ OrderRepositoryInterface $orderRepository,
EntityManagerInterface $entityManager,
MessageBusInterface $eventBus
) {
$this->orderFullyRefundedStateResolver = $orderFullyRefundedStateResolver;
$this->relatedPaymentIdProvider = $relatedPaymentIdProvider;
$this->refundPaymentFactory = $refundPaymentFactory;
+ $this->orderRepository = $orderRepository;
$this->entityManager = $entityManager;
$this->eventBus = $eventBus;
}
public function next(UnitsRefunded $unitsRefunded): void
{
+ /** @var OrderInterface|null $order */
+ $order = $this->orderRepository->findOneByNumber($unitsRefunded->orderNumber());
+ Assert::notNull($order);
+
$refundPayment = $this->refundPaymentFactory->createWithData(
- $unitsRefunded->orderNumber(),
+ $order,
$unitsRefunded->amount(),
$unitsRefunded->currencyCode(),
RefundPaymentInterface::STATE_NEW,
diff --git a/src/Resources/config/doctrine/RefundPayment.orm.xml b/src/Resources/config/doctrine/RefundPayment.orm.xml
index 124b92f3..6c11c244 100644
--- a/src/Resources/config/doctrine/RefundPayment.orm.xml
+++ b/src/Resources/config/doctrine/RefundPayment.orm.xml
@@ -11,7 +11,6 @@
-
@@ -19,5 +18,9 @@
+
+
+
+
diff --git a/src/Resources/config/services/event_bus.xml b/src/Resources/config/services/event_bus.xml
index ec1eb7d4..b957f77d 100644
--- a/src/Resources/config/services/event_bus.xml
+++ b/src/Resources/config/services/event_bus.xml
@@ -31,6 +31,7 @@
+