/** * Cancel existing shipment on DHL. * * @param Dhl_Intraship_Model_Shipment $shipment * @return void */ protected function _cancel(Dhl_Intraship_Model_Shipment &$shipment) { try { //Set Shipment to "in transmission" to avoid double shipment transmission $shipment->setAsInTransmission(); /* @var $client Dhl_Intraship_Model_Soap_Client_Shipment */ $client = Mage::getModel('intraship/soap_client_shipment', $shipment->getShipment()->getOrder()->getStoreId()); /* @var $response Dhl_Intraship_Model_Soap_Client_Response */ $response = $client->delete($shipment)->validate(); // Update shipment. $shipment->removeTracks()->removeDocuments()->setStatus(Dhl_Intraship_Model_Shipment::STATUS_CANCELED)->setClientStatusCode($response->getStatusCode())->setClientStatusMessage($response->getStatusMessage()); // Add status message to shipment. $shipment->addComment($shipment->getClientStatusMessage(), $shipment->getClientStatusCode(), 'cancel'); } catch (Dhl_Intraship_Model_Soap_Client_Response_Exception $e) { // Handle exceptions $code = Dhl_Intraship_Model_Shipment::STATUS_CANCEL_RETRY; if ($e instanceof Dhl_Intraship_Model_Soap_Client_Response_Exception) { $code = $this->_handleException($e, $code, Dhl_Intraship_Model_Shipment::STATUS_CANCELED_FAILED); } // Add status message to shipment. $shipment->addComment($e->getMessage(), $e->getCode(), 'cancel'); // Update shipment codes. $shipment->setStatus($code)->setClientStatusCode($e->getCode())->setClientStatusMessage($e->getMessage()); } }