Programmatically create Shipment of a new order in magento
Programmatically create Shipment of a new order in magento
Programmatically create Shipment of a new order in magento
For some time need to create Shipment of an order.I have write code for how to create Shipment of an order pragmatically here
- First of all load an order by order id,
- Check all item of an order are already creating Shipment.
- if ,invoice is not created then create Shipment of all items
Step1 ::load order by order id
$order=Mage::getModel(‘sales/order’)->load($orderId);
Or
$order = Mage::getModel(‘sales/order’)->loadByIncrementId($orderIncrementId);
Step2: check a item is available for shipment and set quantity for shipment
$qty=array();
$Itemqty = $eachOrderItem->getQtyOrdered()
– $eachOrderItem->getQtyShipped()
– $eachOrderItem->getQtyRefunded()
– $eachOrderItem->getQtyCanceled();
$qty[$eachOrderItem->getId()]=$Itemqty;
Step3:create a shipment and check order is available for shipment
if ($order->canShip()) {
/* @var $shipment Mage_Sales_Model_Order_Shipment */
/* prepare to create shipment */
$shipment = $order->prepareShipment($qty);
if ($shipment) {
$shipment->register();
$shipment->addComment($comment, $email && $includeComment);
$shipment->getOrder()->setIsInProcess(true);
try {
$transactionSave = Mage::getModel(‘core/resource_transaction’)
->addObject($shipment)
->addObject($shipment->getOrder())
->save();
$shipment->sendEmail($email, ($includeComment ? $comment : ”));
} catch (Mage_Core_Exception $e) {
var_dump($e);
}
}
}
Full Code:
$order=Mage::getModel('sales/order')->load($orderId); //Or $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId); $qty=array(); foreach($order->getAllItems() as $eachOrderItem){ $Itemqty=0; $Itemqty = $eachOrderItem->getQtyOrdered() - $eachOrderItem->getQtyShipped() - $eachOrderItem->getQtyRefunded() - $eachOrderItem->getQtyCanceled(); $qty[$eachOrderItem->getId()]=$Itemqty; } /* echo "<pre>"; print_r($qty); echo "</pre>"; */ /* check order shipment is prossiable or not */ $email=true; $includeComment=true; $comment="test Shipment"; if ($order->canShip()) { /* @var $shipment Mage_Sales_Model_Order_Shipment */ /* prepare to create shipment */ $shipment = $order->prepareShipment($qty); if ($shipment) { $shipment->register(); $shipment->addComment($comment, $email && $includeComment); $shipment->getOrder()->setIsInProcess(true); try { $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($shipment) ->addObject($shipment->getOrder()) ->save(); $shipment->sendEmail($email, ($includeComment ? $comment : '')); } catch (Mage_Core_Exception $e) { var_dump($e); } } }
Item wise Order shipment:
This code is create a shipment of an all items of an order.If you want to create product wise
Then follow below code
$qty=array(); $eachOrderItem = Mage::getModel('sales/order_item')->load($itemId); $Itemqty=0; $Itemqty = $eachOrderItem->getQtyOrdered() - $eachOrderItem->getQtyShipped() - $eachOrderItem->getQtyRefunded() - $eachOrderItem->getQtyCanceled(); $qty[$eachOrderItem->getId()]=$Itemqty; $email=true; $includeComment=true; $comment="test Shipment"; if ($order->canShip()) { /* @var $shipment Mage_Sales_Model_Order_Shipment */ /* prepare to create shipment */ $shipment = $order->prepareShipment($qty); if ($shipment) { $shipment->register(); $shipment->addComment($comment, $email && $includeComment); $shipment->getOrder()->setIsInProcess(true); try { $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($shipment) ->addObject($shipment->getOrder()) ->save(); $shipment->sendEmail($email, ($includeComment ? $comment : '')); } catch (Mage_Core_Exception $e) { var_dump($e); } } }