From 3215edf93b8153f7fa5097448cdcb24f08540092 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Tue, 24 Mar 2020 13:17:11 +0100 Subject: [PATCH 1/2] [Order] persist internal cancellation reasons --- .../Controller/OrderController.php | 10 +++++++ .../Controller/OrderController.php | 10 +++++++ .../Expiration/OrderExpiration.php | 28 ++++++++++++++++--- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/CoreShop/Bundle/FrontendBundle/Controller/OrderController.php b/src/CoreShop/Bundle/FrontendBundle/Controller/OrderController.php index e96f10ddca..4accf96667 100644 --- a/src/CoreShop/Bundle/FrontendBundle/Controller/OrderController.php +++ b/src/CoreShop/Bundle/FrontendBundle/Controller/OrderController.php @@ -13,12 +13,14 @@ namespace CoreShop\Bundle\FrontendBundle\Controller; use CoreShop\Bundle\CoreBundle\Form\Type\Order\PaymentType; +use CoreShop\Bundle\WorkflowBundle\History\HistoryLogger; use CoreShop\Component\Core\Model\OrderInterface; use CoreShop\Component\Order\Model\CartInterface; use CoreShop\Component\Order\OrderTransitions; use CoreShop\Component\Order\Repository\OrderRepositoryInterface; use CoreShop\Component\Payment\Model\PaymentInterface; use CoreShop\Component\Resource\Repository\RepositoryInterface; +use Pimcore\Model\DataObject\Concrete; use Symfony\Component\Form\ClickableInterface; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -62,6 +64,14 @@ public function reviseAction(Request $request) if ($cancelButton instanceof ClickableInterface && $form->isSubmitted() && $cancelButton->isClicked()) { $this->get('coreshop.state_machine_applier')->apply($order, OrderTransitions::IDENTIFIER, OrderTransitions::TRANSITION_CANCEL); + + if ($order instanceof Concrete) { + $this->get(HistoryLogger::class)->log( + $order, + 'User Cart Revise Cancellation' + ); + } + $cart = $this->get('coreshop.repository.cart')->findCartByOrder($order); if ($cart instanceof CartInterface) { diff --git a/src/CoreShop/Bundle/OrderBundle/Controller/OrderController.php b/src/CoreShop/Bundle/OrderBundle/Controller/OrderController.php index 4b70e8a6d3..72dd597a4e 100644 --- a/src/CoreShop/Bundle/OrderBundle/Controller/OrderController.php +++ b/src/CoreShop/Bundle/OrderBundle/Controller/OrderController.php @@ -13,14 +13,17 @@ namespace CoreShop\Bundle\OrderBundle\Controller; use Carbon\Carbon; +use CoreShop\Bundle\WorkflowBundle\History\HistoryLogger; use CoreShop\Bundle\WorkflowBundle\Manager\StateMachineManager; use CoreShop\Bundle\WorkflowBundle\StateManager\WorkflowStateInfoManagerInterface; use CoreShop\Component\Order\Model\OrderInterface; use CoreShop\Component\Order\Model\SaleInterface; use CoreShop\Component\Order\OrderStates; +use CoreShop\Component\Order\OrderTransitions; use CoreShop\Component\Order\Processable\ProcessableInterface; use CoreShop\Component\Order\Repository\OrderInvoiceRepositoryInterface; use CoreShop\Component\Order\Repository\OrderShipmentRepositoryInterface; +use CoreShop\Component\Pimcore\DataObject\NoteServiceInterface; use Pimcore\Model\DataObject; use Pimcore\Model\User; use Symfony\Component\EventDispatcher\GenericEvent; @@ -140,6 +143,13 @@ public function updateOrderStateAction(Request $request) $workflow->apply($order, $transition); + if ($order instanceof DataObject\Concrete && $transition === OrderTransitions::TRANSITION_CANCEL) { + $this->get(HistoryLogger::class)->log( + $order, + 'Admin Order Cancellation' + ); + } + return $this->viewHandler->handle(['success' => true]); } diff --git a/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php b/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php index 2a438710c2..73399aa2fd 100644 --- a/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php +++ b/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php @@ -12,9 +12,11 @@ namespace CoreShop\Bundle\OrderBundle\Expiration; +use CoreShop\Bundle\WorkflowBundle\Applier\StateMachineApplier; +use CoreShop\Bundle\WorkflowBundle\History\HistoryLoggerInterface; use CoreShop\Component\Order\OrderTransitions; use CoreShop\Component\Order\Repository\OrderRepositoryInterface; -use CoreShop\Bundle\WorkflowBundle\Applier\StateMachineApplier; +use Pimcore\Model\DataObject\Concrete; final class OrderExpiration implements ProposalExpirationInterface { @@ -28,14 +30,24 @@ final class OrderExpiration implements ProposalExpirationInterface */ private $stateMachineApplier; + /** + * @var HistoryLoggerInterface + */ + private $historyLogger; + /** * @param OrderRepositoryInterface $orderRepository * @param StateMachineApplier $stateMachineApplier + * @param HistoryLoggerInterface $historyLogger */ - public function __construct(OrderRepositoryInterface $orderRepository, StateMachineApplier $stateMachineApplier) - { + public function __construct( + OrderRepositoryInterface $orderRepository, + StateMachineApplier $stateMachineApplier, + HistoryLoggerInterface $historyLogger = null + ) { $this->orderRepository = $orderRepository; $this->stateMachineApplier = $stateMachineApplier; + $this->historyLogger = $historyLogger; } /** @@ -51,7 +63,15 @@ public function expire($days, $params = []) if (is_array($orders)) { foreach ($orders as $order) { - $this->stateMachineApplier->apply($order, OrderTransitions::IDENTIFIER, OrderTransitions::TRANSITION_CANCEL); + $this->stateMachineApplier->apply($order, OrderTransitions::IDENTIFIER, + OrderTransitions::TRANSITION_CANCEL); + + if (null !== $this->historyLogger && $order instanceof Concrete) { + $this->historyLogger->log( + $order, + 'Automatic Expiration Order Cancellation' + ); + } } } } From b061a6a98175bf87c8d4335e59ebe0092e76260f Mon Sep 17 00:00:00 2001 From: Dominik Date: Wed, 25 Mar 2020 12:03:50 +0100 Subject: [PATCH 2/2] Update src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php Co-Authored-By: Jacob Dreesen --- .../Bundle/OrderBundle/Expiration/OrderExpiration.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php b/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php index 73399aa2fd..27c3ebbe5d 100644 --- a/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php +++ b/src/CoreShop/Bundle/OrderBundle/Expiration/OrderExpiration.php @@ -63,8 +63,11 @@ public function expire($days, $params = []) if (is_array($orders)) { foreach ($orders as $order) { - $this->stateMachineApplier->apply($order, OrderTransitions::IDENTIFIER, - OrderTransitions::TRANSITION_CANCEL); + $this->stateMachineApplier->apply( + $order, + OrderTransitions::IDENTIFIER, + OrderTransitions::TRANSITION_CANCEL + ); if (null !== $this->historyLogger && $order instanceof Concrete) { $this->historyLogger->log(