Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ShipOrder.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Sales\Model;
7 
12 use Magento\Sales\Model\Order\Config as OrderConfig;
18 use Psr\Log\LoggerInterface;
19 
24 class ShipOrder implements ShipOrderInterface
25 {
29  private $resourceConnection;
30 
34  private $orderRepository;
35 
39  private $shipmentDocumentFactory;
40 
44  private $orderStateResolver;
45 
49  private $config;
50 
54  private $shipmentRepository;
55 
59  private $shipOrderValidator;
60 
64  private $notifierInterface;
65 
69  private $logger;
70 
74  private $orderRegistrar;
75 
89  public function __construct(
90  ResourceConnection $resourceConnection,
91  OrderRepositoryInterface $orderRepository,
92  ShipmentDocumentFactory $shipmentDocumentFactory,
93  OrderStateResolverInterface $orderStateResolver,
94  OrderConfig $config,
95  ShipmentRepositoryInterface $shipmentRepository,
96  ShipOrderValidator $shipOrderValidator,
97  NotifierInterface $notifierInterface,
98  OrderRegistrarInterface $orderRegistrar,
99  LoggerInterface $logger
100  ) {
101  $this->resourceConnection = $resourceConnection;
102  $this->orderRepository = $orderRepository;
103  $this->shipmentDocumentFactory = $shipmentDocumentFactory;
104  $this->orderStateResolver = $orderStateResolver;
105  $this->config = $config;
106  $this->shipmentRepository = $shipmentRepository;
107  $this->shipOrderValidator = $shipOrderValidator;
108  $this->notifierInterface = $notifierInterface;
109  $this->logger = $logger;
110  $this->orderRegistrar = $orderRegistrar;
111  }
112 
129  public function execute(
130  $orderId,
131  array $items = [],
132  $notify = false,
133  $appendComment = false,
134  \Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment = null,
135  array $tracks = [],
136  array $packages = [],
137  \Magento\Sales\Api\Data\ShipmentCreationArgumentsInterface $arguments = null
138  ) {
139  $connection = $this->resourceConnection->getConnection('sales');
140  $order = $this->orderRepository->get($orderId);
141  $shipment = $this->shipmentDocumentFactory->create(
142  $order,
143  $items,
144  $tracks,
145  $comment,
146  ($appendComment && $notify),
147  $packages,
148  $arguments
149  );
150  $validationMessages = $this->shipOrderValidator->validate(
151  $order,
152  $shipment,
153  $items,
154  $notify,
155  $appendComment,
156  $comment,
157  $tracks,
158  $packages
159  );
160  if ($validationMessages->hasMessages()) {
161  throw new \Magento\Sales\Exception\DocumentValidationException(
162  __("Shipment Document Validation Error(s):\n" . implode("\n", $validationMessages->getMessages()))
163  );
164  }
165  $connection->beginTransaction();
166  try {
167  $this->orderRegistrar->register($order, $shipment);
168  $order->setState(
169  $this->orderStateResolver->getStateForOrder($order, [OrderStateResolverInterface::IN_PROGRESS])
170  );
171  $order->setStatus($this->config->getStateDefaultStatus($order->getState()));
172  $this->shipmentRepository->save($shipment);
173  $this->orderRepository->save($order);
174  $connection->commit();
175  } catch (\Exception $e) {
176  $this->logger->critical($e);
177  $connection->rollBack();
178  throw new \Magento\Sales\Exception\CouldNotShipException(
179  __('Could not save a shipment, see error log for details')
180  );
181  }
182  if ($notify) {
183  if (!$appendComment) {
184  $comment = null;
185  }
186  $this->notifierInterface->notify($order, $shipment, $comment);
187  }
188  return $shipment->getEntityId();
189  }
190 }
$config
Definition: fraud_order.php:17
$orderRepository
Definition: order.php:69
execute( $orderId, array $items=[], $notify=false, $appendComment=false, \Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment=null, array $tracks=[], array $packages=[], \Magento\Sales\Api\Data\ShipmentCreationArgumentsInterface $arguments=null)
Definition: ShipOrder.php:129
$order
Definition: order.php:55
__()
Definition: __.php:13
$logger
__construct(ResourceConnection $resourceConnection, OrderRepositoryInterface $orderRepository, ShipmentDocumentFactory $shipmentDocumentFactory, OrderStateResolverInterface $orderStateResolver, OrderConfig $config, ShipmentRepositoryInterface $shipmentRepository, ShipOrderValidator $shipOrderValidator, NotifierInterface $notifierInterface, OrderRegistrarInterface $orderRegistrar, LoggerInterface $logger)
Definition: ShipOrder.php:89
$arguments
$connection
Definition: bulk.php:13
foreach($order->getItems() as $orderItem) $shipment
$items