コード例 #1
0
 /**
  * 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());
     }
 }