在Magento 2中,以编程方式创建货运是根据需要添加新货运的便捷方法。以下代码是必须在Magento 2控制台上运行的所有必需的东西。
// Load the order increment ID
$order = $this->_objectManager->create('Magento\Sales\Model\Order')->loadByIncrementID($incrementid);
// OR
$order = $this->_objectManager->create('Magento\Sales\Model\Order')
->loadByAttribute('increment_id', '000000001');
//load by order
$order = $this->_objectManager->create('Magento\Sales\Model\Order')
->load('1');
// Check if order can be shipped or has already shipped
if (! $order->canShip()) {
throw new \Magento\Framework\Exception\LocalizedException(
__('You can\'t create an shipment.')
);
}
// Initialize the order shipment object
$convertOrder = $this->_objectManager->create('Magento\Sales\Model\Convert\Order');
$shipment = $convertOrder->toShipment($order);
// Loop through order items
foreach ($order->getAllItems() AS $orderItem) {
// Check if order item has qty to ship or is virtual
if (! $orderItem->getQtyToShip() || $orderItem->getIsVirtual()) {
continue;
}
$qtyShipped = $orderItem->getQtyToShip();
// Create shipment item with qty
$shipmentItem = $convertOrder->itemToShipmentItem($orderItem)->setQty($qtyShipped);
// Add shipment item to shipment
$shipment->addItem($shipmentItem);
}
// Register shipment
$shipment->register();
$shipment->getOrder()->setIsInProcess(true);
try {
// Save created shipment and order
$shipment->save();
$shipment->getOrder()->save();
// Send email
$this->_objectManager->create('Magento\Shipping\Model\ShipmentNotifier')
->notify($shipment);
$shipment->save();
} catch (\Exception $e) {
throw new \Magento\Framework\Exception\LocalizedException(
__($e->getMessage())
);
}
强烈建议您使用此指南Mageplaza,以编程方式创建货运。希望这是为您的操作有帮助