18 use Psr\Log\LoggerInterface;
29 private $resourceConnection;
34 private $orderRepository;
39 private $shipmentDocumentFactory;
44 private $orderStateResolver;
54 private $shipmentRepository;
59 private $shipOrderValidator;
64 private $notifierInterface;
74 private $orderRegistrar;
96 ShipOrderValidator $shipOrderValidator,
103 $this->shipmentDocumentFactory = $shipmentDocumentFactory;
104 $this->orderStateResolver = $orderStateResolver;
106 $this->shipmentRepository = $shipmentRepository;
107 $this->shipOrderValidator = $shipOrderValidator;
108 $this->notifierInterface = $notifierInterface;
110 $this->orderRegistrar = $orderRegistrar;
133 $appendComment =
false,
134 \
Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment =
null,
136 array $packages = [],
139 $connection = $this->resourceConnection->getConnection(
'sales');
140 $order = $this->orderRepository->get($orderId);
141 $shipment = $this->shipmentDocumentFactory->create(
146 ($appendComment && $notify),
150 $validationMessages = $this->shipOrderValidator->validate(
160 if ($validationMessages->hasMessages()) {
161 throw new \Magento\Sales\Exception\DocumentValidationException(
162 __(
"Shipment Document Validation Error(s):\n" . implode(
"\n", $validationMessages->getMessages()))
171 $order->setStatus($this->config->getStateDefaultStatus(
$order->getState()));
172 $this->shipmentRepository->save(
$shipment);
173 $this->orderRepository->save(
$order);
175 }
catch (\Exception $e) {
176 $this->logger->critical($e);
178 throw new \Magento\Sales\Exception\CouldNotShipException(
179 __(
'Could not save a shipment, see error log for details')
183 if (!$appendComment) {
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)
__construct(ResourceConnection $resourceConnection, OrderRepositoryInterface $orderRepository, ShipmentDocumentFactory $shipmentDocumentFactory, OrderStateResolverInterface $orderStateResolver, OrderConfig $config, ShipmentRepositoryInterface $shipmentRepository, ShipOrderValidator $shipOrderValidator, NotifierInterface $notifierInterface, OrderRegistrarInterface $orderRegistrar, LoggerInterface $logger)
foreach($order->getItems() as $orderItem) $shipment