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..27c3ebbe5d 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,18 @@ 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' + ); + } } } }