diff --git a/src/Sylius/Bundle/CoreBundle/Resources/config/services/order_processing.xml b/src/Sylius/Bundle/CoreBundle/Resources/config/services/order_processing.xml index c389be19c25..87fa2ecc958 100644 --- a/src/Sylius/Bundle/CoreBundle/Resources/config/services/order_processing.xml +++ b/src/Sylius/Bundle/CoreBundle/Resources/config/services/order_processing.xml @@ -14,6 +14,14 @@ + + Sylius\Component\Core\Model\AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT + Sylius\Component\Core\Model\AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT + Sylius\Component\Core\Model\AdjustmentInterface::ORDER_SHIPPING_PROMOTION_ADJUSTMENT + Sylius\Component\Core\Model\AdjustmentInterface::ORDER_UNIT_PROMOTION_ADJUSTMENT + Sylius\Component\Core\Model\AdjustmentInterface::SHIPPING_ADJUSTMENT + Sylius\Component\Core\Model\AdjustmentInterface::TAX_ADJUSTMENT + diff --git a/src/Sylius/Component/Core/OrderProcessing/OrderAdjustmentsClearer.php b/src/Sylius/Component/Core/OrderProcessing/OrderAdjustmentsClearer.php index 28978a90378..826ac0e1ec1 100644 --- a/src/Sylius/Component/Core/OrderProcessing/OrderAdjustmentsClearer.php +++ b/src/Sylius/Component/Core/OrderProcessing/OrderAdjustmentsClearer.php @@ -22,20 +22,34 @@ final class OrderAdjustmentsClearer implements OrderProcessorInterface /** * @var array */ - private static $adjustmentsToRemove = [ - AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT, - AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT, - AdjustmentInterface::ORDER_SHIPPING_PROMOTION_ADJUSTMENT, - AdjustmentInterface::ORDER_UNIT_PROMOTION_ADJUSTMENT, - AdjustmentInterface::TAX_ADJUSTMENT, - ]; + private $adjustmentsToRemove; + + public function __construct(array $adjustmentsToRemove = []) + { + if (0 === func_num_args()) { + @trigger_error( + 'Not passing adjustments types explicitly is deprecated since 1.2 and will be prohibited in 2.0', + E_USER_DEPRECATED + ); + + $adjustmentsToRemove = [ + AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT, + AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT, + AdjustmentInterface::ORDER_SHIPPING_PROMOTION_ADJUSTMENT, + AdjustmentInterface::ORDER_UNIT_PROMOTION_ADJUSTMENT, + AdjustmentInterface::TAX_ADJUSTMENT, + ]; + } + + $this->adjustmentsToRemove = $adjustmentsToRemove; + } /** * {@inheritdoc} */ public function process(OrderInterface $order): void { - foreach (self::$adjustmentsToRemove as $type) { + foreach ($this->adjustmentsToRemove as $type) { $order->removeAdjustmentsRecursively($type); } } diff --git a/src/Sylius/Component/Core/spec/OrderProcessing/OrderAdjustmentsClearerSpec.php b/src/Sylius/Component/Core/spec/OrderProcessing/OrderAdjustmentsClearerSpec.php index 422c39870d9..ae3dc8db2f2 100644 --- a/src/Sylius/Component/Core/spec/OrderProcessing/OrderAdjustmentsClearerSpec.php +++ b/src/Sylius/Component/Core/spec/OrderProcessing/OrderAdjustmentsClearerSpec.php @@ -25,7 +25,7 @@ function it_is_an_order_processor(): void $this->shouldImplement(OrderProcessorInterface::class); } - function it_removes_adjustments_from_order_recursively(OrderInterface $order): void + function it_removes_adjustments_with_default_types_from_order_recursively(OrderInterface $order): void { $order->removeAdjustmentsRecursively(AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT)->shouldBeCalled(); $order->removeAdjustmentsRecursively(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT)->shouldBeCalled(); @@ -35,4 +35,17 @@ function it_removes_adjustments_from_order_recursively(OrderInterface $order): v $this->process($order); } + + function it_removes_adjustments_with_specified_types_from_order_recursively(OrderInterface $order): void + { + $this->beConstructedWith([ + AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT, + AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT, + ]); + + $order->removeAdjustmentsRecursively(AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT)->shouldBeCalled(); + $order->removeAdjustmentsRecursively(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT)->shouldBeCalled(); + + $this->process($order); + } }