Estás leyendo la publicación: Cómo crear un envío programáticamente en Magento 2
// Cargando la orden
$pedido = $this->_objectManager->create(‘Magento\Sales\Model\Order’)
->loadByAttribute(‘increment_id’, ‘000000001’);
//O
$pedido = $this->_objectManager->create(‘Magento\Sales\Model\Order’)
-> cargar (‘1’);
// Comprobar si el pedido ya se ha enviado o se puede enviar
if (!$pedido->canShip()) {
lanzar nueva \Magento\Framework\Exception\LocalizedException(
__(‘No puede crear el Envío.’));
}
// Objeto de inicialización para el envío del pedido
$convertOrder = $this->_objectManager->create(‘Magento\Sales\Model\Convert\Order’);
$envio = $convertirPedido->toEnvio($pedido);
// Bucle de los artículos del pedido
foreach ($pedido->getAllItems() as $orderItem) {
// Comprobar si el artículo del pedido tiene Cantidad para enviar o es virtual
if (!$orderItem->getQtyToShip() || $orderItem->getIsVirtual()) {
continuar;
}
$qtyShipped = $orderItem->getQtyToShip();
// Crear artículo de envío con cantidad
$artículodeenvío = $convertirPedido->artículoEnArtículoDeEnvío($artículodepedido)->setQty($cantidadEnviada);
// Agregar artículo de envío al envío
$envio->addItem($envioItem);
}
// Registrar Envío
$envio->registrar();
$envío->getOrder()->setIsInProcess(true);
intentar {
// Guardar envío y pedido creados
$envio->guardar();
$envio->getOrder()->save();
// Enviar correo electrónico
$this->_objectManager->create(‘Magento\Shipping\Model\ShipmentNotifier’)
->notificar($envío);
} atrapar (\Excepción $e) {
lanzar nueva \Magento\Framework\Exception\LocalizedException(
__($e->getMessage())
);
}