/** * Call Void Shipment request * * Reason to Call: * To delete a specific shipment prior to transmit. * * More info at: * https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/shippingmanifest/voidshipment.jsf * * @param \XLite\Module\XC\CanadaPost\Model\Order\Parcel $parcel Canada Post parcel object * * @return \XLite\Core\CommonCell */ public function callVoidShipmentRequest(\XLite\Module\XC\CanadaPost\Model\Order\Parcel $parcel) { $selfLink = $parcel->getShipment()->getLinkByRel(\XLite\Module\XC\CanadaPost\Model\Order\Parcel\Shipment\Link::REL_SELF); $apiHost = $selfLink->getHref(); $result = new \XLite\Core\CommonCell(); try { $request = new \XLite\Core\HTTP\Request($apiHost); $request->requestTimeout = $this->requestTimeout; $request->verb = 'DELETE'; $request->setHeader('Authorization', 'Basic ' . base64_encode(static::getCanadaPostConfig()->user . ':' . static::getCanadaPostConfig()->password)); $request->setHeader('Accept', $selfLink->getMediaType()); $request->setHeader('Accept-language', static::ACCEPT_LANGUAGE_EN); if (static::isOnBehalfOfAMerchant()) { $request->setHeader('Platform-id', $this->getPlatformId()); } $response = $request->sendRequest(); if (isset($response)) { $errorCodes = array(0 => 'Unknown error', 404 => 'The resource was not found so the shipment id is incorrect or the shipment has already been voided.', 8064 => 'The shipment has been transmitted and cannot be voided.'); if ($response->code == 204) { // Valid response: do nothing } else { $result->errors = array('VS_' . $response->code => isset($errorCodes[$response->code]) ? $errorCodes[$response->code] : $errorCodes[0]); } } else { $result->errors = array('INTERNAL' => sprintf('Error while connecting to the Canada Post host (%s) during Void Shipment request', $apiHost)); } } catch (\Exception $e) { if (!isset($result->errors)) { $result->errors = array(); } $result->errors += array($e->getCode(), $e->getMessage()); } return $result; }
/** * {@inheritDoc} */ public function getShipment() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getShipment', array()); return parent::getShipment(); }