We just use a controller action to update an existing Magento order’s status. If you want to use a cron job to update the order status, you can define a method in the Observer class.
//changeOrderAction()
public function changeOrderAction()
{
$increment_id = $this->getRequest()->getParam('orderId', null);
$message = $this->getRequest()->getParam('message', null);
$tracking = $this->getRequest()->getParam('tracking', null);
$code = $this->getRequest()->getParam('code', null);
if(!$message || !$increment_id || $message !== 'somesecretphase you decided') {
echo json_encode(array('message' => 'bad parameters'));
return $this;
}
$order = Mage::getModel('sales/order')->getCollection()->addFieldToFilter('increment_id', $increment_id)->getFirstItem();
if(empty($order->getData())) {
echo json_encode(array('message' => 'Order not existed'));
return $this;
}
$totalpaid = $order->getGrandTotal();
$order->setTotalDue(0);
//echo $order->getState() . '
';
//echo '1' . Mage_Sales_Model_Order::STATE_COMPLETE . '
';
//echo '2' . Mage_Sales_Model_Order::STATE_NEW . '
';
//echo '3' . Mage_Sales_Model_Order::STATE_PROCESSING . '
';
//echo '4' . Mage_Sales_Model_Order::STATE_PENDING_PAYMENT . '
';
//echo '5' . Mage_Sales_Model_Order::STATE_CLOSED . '
';
//echo '6' . Mage_Sales_Model_Order::STATE_HOLDED . '
';
//$orders = Mage::getModel('sales/order_invoice')->getCollection()
// ->addAttributeToFilter('order_id' , array('eq' => $order->getId()));
//$orders->getSelect()->limit(1);
if($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE)
{
echo json_encode(array('message'=>'order already completed'));
return $this;
}
else if($order->getState() == Mage_Sales_Model_Order::STATE_CLOSED)
{
echo json_encode(array('message'=>'order already closed'));
return $this;
}
else if($order->getState() == Mage_Sales_Model_Order::STATE_CANCELED)
{
echo json_encode(array('message'=>'order already canceled'));
return $this;
}
else if($order->getState() == Mage_Sales_Model_Order::STATE_HOLDED)
{
echo json_encode(array('message'=>'order already hold'));
return $this;
}
if($order->getState() == Mage_Sales_Model_Order::STATE_NEW) {
try {
if(!$order->canInvoice()) {
$order->addStatusHistoryComment('Order cannot be invoiced.', false);
$order->save();
}
//Start Handle Invoice
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
$invoice->setRquestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
$invoice->register();
$invoice->getOrder()->setCustomerNoteNotify(false);
$invoice->getOrder()->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically INVOICED by NetSuite call.', false);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder());
$transactionSave->save();
//End Handle Invoice
//Start Handle Shipment
$shipment = $order->prepareShipment();
$shipment->register();
//Add track object to shipment
if(!empty($tracking)) {
$trackingArr = explode('
', $tracking);
$length = count($trackingArr);
for($i = 0; $i < $length; $i++) {
$trackingDetail = array(
'carrier_code' => 'usps',
'title' => 'United Parcel Service',
'number' => $trackingArr[$i], // Replace with your tracking number
);
$track = Mage::getModel('sales/order_shipment_track')->addData($trackingDetail);
$shipment->addTrack($track);
}
}
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED by NetSuite call.', false);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($shipment)
->addObject($shipment->getOrder())
->save();
//End handl shipment
}
catch(Exception $e) {
$order->addStatusHistoryComment('Exception occured during automatically Invoice and shipping action. Exception message: ' . $e->getMessage(), false);
echo json_encode(array('message' => 'failed'));
$order->save();
}
}
else if($order->getState() == Mage_Sales_Model_Order::STATE_PROCESSING) {
try {
//Start Handle Shipment
$shipment = $order->prepareShipment();
$shipment->register();
//Add track object to shipment
if(!empty($tracking)) {
$trackingDetail = array(
'carrier_code' => 'usps',
'title' => 'United Parcel Service',
'number' => $tracking, // Replace with your tracking number
);
$track = Mage::getModel('sales/order_shipment_track')->addData($trackingDetail);
$shipment->addTrack($track);
}
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Automatically SHIPPED by NetSuite call.', false);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($shipment)
->addObject($shipment->getOrder())
->save();
//End handl shipment
}
catch(Exception $e) {
$order->addStatusHistoryComment('Exception occured during automatically Invoice and shipping action. Exception message: ' . $e->getMessage(), false);
echo json_encode(array('message' => 'failed'));
$order->save();
}
}
echo json_encode(array('message' => 'successfully'));
}