1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Braintree\Model\Paypal;
- use Magento\Framework\Api\SearchCriteriaBuilder;
- use Magento\Sales\Api\Data\OrderInterface;
- use Magento\Sales\Api\OrderRepositoryInterface;
- /**
- * The service to cancel an order and void authorization transaction.
- */
- class OrderCancellationService
- {
- /**
- * @var OrderRepositoryInterface
- */
- private $orderRepository;
- /**
- * @var SearchCriteriaBuilder
- */
- private $searchCriteriaBuilder;
- /**
- * @param SearchCriteriaBuilder $searchCriteriaBuilder
- * @param OrderRepositoryInterface $orderRepository
- */
- public function __construct(
- SearchCriteriaBuilder $searchCriteriaBuilder,
- OrderRepositoryInterface $orderRepository
- ) {
- $this->searchCriteriaBuilder = $searchCriteriaBuilder;
- $this->orderRepository = $orderRepository;
- }
- /**
- * Cancels an order and authorization transaction.
- *
- * @param string $incrementId
- * @return bool
- */
- public function execute(string $incrementId): bool
- {
- $order = $this->getOrder($incrementId);
- if ($order === null) {
- return false;
- }
- // `\Magento\Sales\Model\Service\OrderService::cancel` cannot be used for cancellation as the service uses
- // the order repository with outdated payment method instance (ex. contains Vault instead of Braintree)
- $order->cancel();
- $this->orderRepository->save($order);
- return true;
- }
- /**
- * Gets order by increment ID.
- *
- * @param string $incrementId
- * @return OrderInterface|null
- */
- private function getOrder(string $incrementId)
- {
- $searchCriteria = $this->searchCriteriaBuilder->addFilter(OrderInterface::INCREMENT_ID, $incrementId)
- ->create();
- $items = $this->orderRepository->getList($searchCriteria)
- ->getItems();
- return array_pop($items);
- }
- }
|