$order = Mage::getModel('sales/order')->load($orderId);
//create shipment
$itemQty = $order->getItemsCollection()->count();
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$shipment = new Mage_Sales_Model_Order_Shipment_Api();
$shipmentId = $shipment->create( $order->getIncrementId(), array(), 'Shipment created through ShipMailInvoice', true, true);
***** For example *****
<?php
/**
* Class Trigger_ShippingController
*/
class Trigger_ShippingController extends Mage_Core_Controller_Front_Action
{
/**
* We provide this fixed uuid to a staff
*/
const UUID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
/**
* @var array of parameters required
*/
private $query = array(
'token',
'order',
);
/**
* Get order model object by id
*
* @param int $orderId
* @return Mage_Sales_Model_Order $order
* @throws Exception
*/
private function getOrderById($orderId)
{
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
if (is_null($order) || !$order->getId()) {
throw new Exception("The order not exists by the id : {$orderId}");
}
if (!$order->canShip()) {
throw new Exception("We could not ship the order : {$orderId}");
}
return $order;
}
/**
* Process shipping
*
* @param Mage_Sales_Model_Order $order
* @return string $shipmentId
*/
private function doShipping($order)
{
$itemQty = $order->getItemsCollection()->count();
Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$shipment = new Mage_Sales_Model_Order_Shipment_Api();
$shipmentId = $shipment->create($order->getIncrementId(), array(), null, true, false);
return $shipmentId;
}
/**
* Trigger shipping
* - required params:
* token: uuid v4
* order: integer (order id)
*/
public function indexAction()
{
$get = $this->getRequest()->getQuery();
try {
foreach ($this->query as $key) {
if (!array_key_exists($key, $get)) {
throw new Exception("{$key} is required.");
}
}
if ($this::UUID !== $get['token']) {
throw new Exception("UUID is invalid.");
}
$orderId = $get['order'];
/** @var $order Mage_Sales_Model_Order */
$order = $this->getOrderById($orderId);
$shipmentId = $this->doShipping($order);
echo $shipmentId;
} catch (Mage_Api_Exception $e) {
echo $e->getCustomMessage();
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
***** If you want to add tracking info ****
(1) One way
$shipment->addTrack($shipmentId, 'usps', 'Tracking ID', $trackinNumber);
(2) Another way
//add tracking info
$shipment_collection = Mage::getResourceModel('sales/order_shipment_collection');
$shipment_collection->addAttributeToFilter('order_id', $orderId);
foreach($shipment_collection as $sc)
{
$shipment = Mage::getModel('sales/order_shipment');
$shipment->load($sc->getId());
if($shipment->getId() != '')
{
try
{
Mage::getModel('sales/order_shipment_track')
->setShipment($shipment)
->setData('title', 'carrier')
->setData('number', $trackInfo)
->setData('carrier_code', 'custom')
->setData('order_id', $shipment->getData('order_id'))
->save();
}catch (Exception $e)
{
Mage::getSingleton('core/session')->addError('order id '.$orderId.' no found');
}
}
}
// change order status to complete
$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();
Comments
Post a Comment