I need help please!
My client is working with a third party that updates programatically the status of orders with the SOAP API. When they do, Magento sends an email to inform customer that order has been shipped. Then they add the tracking number and nothing is sent to inform customer.
Their system uses the functions Create and addtrack in app/code/core/Mage/Sales/Model/Order/Shipment/Api.php
So I created a custom module to modify these functions. Unfortunately, nothing is happening. Customers just receive the shipment email without tracking number.
I've checked and my module devm2w_trackship is showing in Magento backend > system > configuration > advanced so i assume the declaration of the module is good. Edit-- here is my declaration in etc/modules/
<?xml version="1.0" ?>
<config>
<modules>
<devm2w_trackship>
<active>true</active>
<codePool>local</codePool>
</devm2w_trackship>
</modules>
</config>
Here is my config.xml in app/code/local/devm2w/trackship/
<?xml version="1.0"?>
<config>
<global>
<models>
<sales>
<rewrite>
<order_shipment_api>devm2w_trackship_Model_Sales_Order_Shipment_Api</order_shipment_api>
</rewrite>
</sales>
</models>
</global>
</config>
And here is my Api.php file in Model/Sales
<?php
class devm2w_trackship_Model_Sales_Order_Shipment_Api extends Mage_Sales_Model_Order_Shipment_Api
{
public function create($orderIncrementId, $itemsQty = array(), $comment = null, $email = false,
$includeComment = false
) {
$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
/**
* Check order existing
*/
if (!$order->getId()) {
$this->_fault('order_not_exists');
}
/**
* Check shipment create availability
*/
if (!$order->canShip()) {
$this->_fault('data_invalid', Mage::helper('sales')->__('Cannot do shipment for order.'));
}
/* @var $shipment Mage_Sales_Model_Order_Shipment */
$shipment = $order->prepareShipment($itemsQty);
if ($shipment) {
$shipment->register();
$shipment->addComment($comment, $email && $includeComment);
if ($email) {
$shipment->setEmailSent(true);
}
$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) {
$this->_fault('data_invalid', $e->getMessage());
}
return $shipment->getIncrementId();
}
return null;
}
/**
* Add tracking number to order
*
* @param string $shipmentIncrementId
* @param string $carrier
* @param string $title
* @param string $trackNumber
* @return int
*/
public function addTrack($shipmentIncrementId, $carrier, $title, $trackNumber)
{
$shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($shipmentIncrementId);
/* @var $shipment Mage_Sales_Model_Order_Shipment */
if (!$shipment->getId()) {
$this->_fault('not_exists');
}
$carriers = $this->_getCarriers($shipment);
if (!isset($carriers[$carrier])) {
$this->_fault('data_invalid', Mage::helper('sales')->__('Invalid carrier specified.'));
}
$track = Mage::getModel('sales/order_shipment_track')
->setNumber($trackNumber)
->setCarrierCode($carrier)
->setTitle($title);
$shipment->addTrack($track);
try {
$shipment->save();
$track->save();
$email=true;
$shipment->sendEmail($email,’’);
} catch (Mage_Core_Exception $e) {
$this->_fault(’data_invalid’, $e->getMessage());
}
return $track->getId();
}
}
Please help,
thanks