Example #1
0
 /**
  * Form array with appropriate structure for shipment request
  *
  * @param Varien_Object $request
  * @return array
  */
 protected function _formShipmentRequest(Varien_Object $request)
 {
     if ($request->getReferenceData()) {
         $referenceData = $request->getReferenceData() . $request->getPackageId();
     } else {
         $referenceData = 'Order #' . $request->getOrderShipment()->getOrder()->getIncrementId() . ' P' . $request->getPackageId();
     }
     $packageParams = $request->getPackageParams();
     $customsValue = $packageParams->getCustomsValue();
     $height = $packageParams->getHeight();
     $width = $packageParams->getWidth();
     $length = $packageParams->getLength();
     $weightUnits = $packageParams->getWeightUnits() == Zend_Measure_Weight::POUND ? 'LB' : 'KG';
     $dimensionsUnits = $packageParams->getDimensionUnits() == Zend_Measure_Length::INCH ? 'IN' : 'CM';
     $unitPrice = 0;
     $itemsQty = 0;
     $itemsDesc = array();
     $countriesOfManufacture = array();
     $productIds = array();
     $packageItems = $request->getPackageItems();
     foreach ($packageItems as $itemShipment) {
         $item = new Varien_Object();
         $item->setData($itemShipment);
         $unitPrice += $item->getPrice();
         $itemsQty += $item->getQty();
         $itemsDesc[] = $item->getName();
         $productIds[] = $item->getProductId();
     }
     // get countries of manufacture
     $productCollection = Mage::getResourceModel('catalog/product_collection')->addStoreFilter($request->getStoreId())->addFieldToFilter('entity_id', array('in' => $productIds))->addAttributeToSelect('country_of_manufacture');
     foreach ($productCollection as $product) {
         $countriesOfManufacture[] = $product->getCountryOfManufacture();
     }
     $paymentType = $request->getIsReturn() ? 'RECIPIENT' : 'SENDER';
     $requestClient = array('RequestedShipment' => array('ShipTimestamp' => time(), 'DropoffType' => $this->getConfigData('dropoff'), 'PackagingType' => $request->getPackagingType(), 'ServiceType' => $request->getShippingMethod(), 'Shipper' => array('Contact' => array('PersonName' => $request->getShipperContactPersonName(), 'CompanyName' => $request->getShipperContactCompanyName(), 'PhoneNumber' => $request->getShipperContactPhoneNumber()), 'Address' => array('StreetLines' => array($request->getShipperAddressStreet1(), $request->getShipperAddressStreet2()), 'City' => $request->getShipperAddressCity(), 'StateOrProvinceCode' => $request->getShipperAddressStateOrProvinceCode(), 'PostalCode' => $request->getShipperAddressPostalCode(), 'CountryCode' => $request->getShipperAddressCountryCode())), 'Recipient' => array('Contact' => array('PersonName' => $request->getRecipientContactPersonName(), 'CompanyName' => $request->getRecipientContactCompanyName(), 'PhoneNumber' => $request->getRecipientContactPhoneNumber()), 'Address' => array('StreetLines' => array($request->getRecipientAddressStreet1(), $request->getRecipientAddressStreet2()), 'City' => $request->getRecipientAddressCity(), 'StateOrProvinceCode' => $request->getRecipientAddressStateOrProvinceCode(), 'PostalCode' => $request->getRecipientAddressPostalCode(), 'CountryCode' => $request->getRecipientAddressCountryCode(), 'Residential' => (bool) $this->getConfigData('residence_delivery'))), 'ShippingChargesPayment' => array('PaymentType' => $paymentType, 'Payor' => array('AccountNumber' => $this->getConfigData('account'), 'CountryCode' => Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_COUNTRY_ID, $request->getStoreId()))), 'LabelSpecification' => array('LabelFormatType' => 'COMMON2D', 'ImageType' => 'PNG', 'LabelStockType' => 'PAPER_8.5X11_TOP_HALF_LABEL'), 'RateRequestTypes' => array('ACCOUNT'), 'PackageCount' => 1, 'RequestedPackageLineItems' => array('SequenceNumber' => '1', 'Weight' => array('Units' => $weightUnits, 'Value' => $request->getPackageWeight()), 'CustomerReferences' => array('CustomerReferenceType' => 'CUSTOMER_REFERENCE', 'Value' => $referenceData), 'SpecialServicesRequested' => array('SpecialServiceTypes' => 'SIGNATURE_OPTION', 'SignatureOptionDetail' => array('OptionType' => $packageParams->getDeliveryConfirmation())))));
     // for international shipping
     if ($request->getShipperAddressCountryCode() != $request->getRecipientAddressCountryCode()) {
         $requestClient['RequestedShipment']['CustomsClearanceDetail'] = array('CustomsValue' => array('Currency' => $request->getBaseCurrencyCode(), 'Amount' => $customsValue), 'DutiesPayment' => array('PaymentType' => $paymentType, 'Payor' => array('AccountNumber' => $this->getConfigData('account'), 'CountryCode' => Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_COUNTRY_ID, $request->getStoreId()))), 'Commodities' => array('Weight' => array('Units' => $weightUnits, 'Value' => $request->getPackageWeight()), 'NumberOfPieces' => 1, 'CountryOfManufacture' => implode(',', array_unique($countriesOfManufacture)), 'Description' => implode(', ', $itemsDesc), 'Quantity' => ceil($itemsQty), 'QuantityUnits' => 'pcs', 'UnitPrice' => array('Currency' => $request->getBaseCurrencyCode(), 'Amount' => $unitPrice), 'CustomsValue' => array('Currency' => $request->getBaseCurrencyCode(), 'Amount' => $customsValue)));
     }
     if ($request->getMasterTrackingId()) {
         $requestClient['RequestedShipment']['MasterTrackingId'] = $request->getMasterTrackingId();
     }
     // set dimensions
     if ($length || $width || $height) {
         $requestClient['RequestedShipment']['RequestedPackageLineItems']['Dimensions'] = array();
         $dimenssions =& $requestClient['RequestedShipment']['RequestedPackageLineItems']['Dimensions'];
         $dimenssions['Length'] = $length;
         $dimenssions['Width'] = $width;
         $dimenssions['Height'] = $height;
         $dimenssions['Units'] = $dimensionsUnits;
     }
     return $this->_getAuthDetails() + $requestClient;
 }
Example #2
0
 /**
  * Map request to shipment
  *
  * @param Varien_Object $request
  * @return null
  */
 protected function _mapRequestToShipment(Varien_Object $request)
 {
     $customsValue = $request->getPackageParams()->getCustomsValue();
     $request->setOrigPersonName($request->getShipperContactPersonName());
     $request->setOrigPostal($request->getShipperAddressPostalCode());
     $request->setOrigPhoneNumber($request->getShipperContactPhoneNumber());
     $request->setOrigCompanyName($request->getShipperContactCompanyName());
     $request->setOrigCountryId($request->getShipperAddressCountryCode());
     $request->setOrigState($request->getShipperAddressStateOrProvinceCode());
     $request->setOrigCity($request->getShipperAddressCity());
     $request->setOrigStreet($request->getShipperAddressStreet1() . ' ' . $request->getShipperAddressStreet2());
     $request->setOrigStreetLine2($request->getShipperAddressStreet2());
     $request->setDestPersonName($request->getRecipientContactPersonName());
     $request->setDestPostcode($request->getRecipientAddressPostalCode());
     $request->setDestPhoneNumber($request->getRecipientContactPhoneNumber());
     $request->setDestCompanyName($request->getRecipientContactCompanyName());
     $request->setDestCountryId($request->getRecipientAddressCountryCode());
     $request->setDestRegionCode($request->getRecipientAddressStateOrProvinceCode());
     $request->setDestCity($request->getRecipientAddressCity());
     $request->setDestStreet($request->getRecipientAddressStreet1());
     $request->setDestStreetLine2($request->getRecipientAddressStreet2());
     $request->setLimitMethod($request->getShippingMethod());
     $request->setPackageValue($customsValue);
     $request->setValueWithDiscount($customsValue);
     $request->setPackageCustomsValue($customsValue);
     $request->setFreeMethodWeight(0);
     $request->setDhlShipmentType($request->getPackagingType());
     $request->setBaseSubtotalInclTax($request->getBaseSubtotalInclTax());
 }
Example #3
0
 /**
  * Form XML for international shipment request
  * As integration guide it is important to follow appropriate sequence for tags e.g.: <FromLastName /> must be
  * after <FromFirstName />
  *
  * @param Varien_Object $request
  * @return string
  */
 protected function _formIntlShipmentRequest(Varien_Object $request)
 {
     $packageParams = $request->getPackageParams();
     $height = $packageParams->getHeight();
     $width = $packageParams->getWidth();
     $length = $packageParams->getLength();
     $girth = $packageParams->getGirth();
     $packageWeight = $request->getPackageWeight();
     if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
         $packageWeight = Mage::helper('usa')->convertMeasureWeight($request->getPackageWeight(), $packageParams->getWeightUnits(), Zend_Measure_Weight::POUND);
     }
     if ($packageParams->getDimensionUnits() != Zend_Measure_Length::INCH) {
         $length = round(Mage::helper('usa')->convertMeasureDimension($packageParams->getLength(), $packageParams->getDimensionUnits(), Zend_Measure_Length::INCH));
         $width = round(Mage::helper('usa')->convertMeasureDimension($packageParams->getWidth(), $packageParams->getDimensionUnits(), Zend_Measure_Length::INCH));
         $height = round(Mage::helper('usa')->convertMeasureDimension($packageParams->getHeight(), $packageParams->getDimensionUnits(), Zend_Measure_Length::INCH));
     }
     if ($packageParams->getGirthDimensionUnits() != Zend_Measure_Length::INCH) {
         $girth = round(Mage::helper('usa')->convertMeasureDimension($packageParams->getGirth(), $packageParams->getGirthDimensionUnits(), Zend_Measure_Length::INCH));
     }
     $container = $request->getPackagingType();
     switch ($container) {
         case 'VARIABLE':
             $container = 'VARIABLE';
             break;
         case 'FLAT RATE ENVELOPE':
             $container = 'FLATRATEENV';
             break;
         case 'FLAT RATE BOX':
             $container = 'FLATRATEBOX';
             break;
         case 'RECTANGULAR':
             $container = 'RECTANGULAR';
             break;
         case 'NONRECTANGULAR':
             $container = 'NONRECTANGULAR';
             break;
         default:
             $container = 'VARIABLE';
     }
     $shippingMethod = $request->getShippingMethod();
     list($fromZip5, $fromZip4) = $this->_parseZip($request->getShipperAddressPostalCode());
     // the wrap node needs for remove xml declaration above
     $xmlWrap = new SimpleXMLElement('<?xml version = "1.0" encoding = "UTF-8"?><wrap/>');
     $method = '';
     $service = $this->getCode('service_to_code', $shippingMethod);
     if ($service == 'Priority') {
         $method = 'Priority';
         $rootNode = 'PriorityMailIntlRequest';
         $xml = $xmlWrap->addChild($rootNode);
     } else {
         if ($service == 'First Class') {
             $method = 'FirstClass';
             $rootNode = 'FirstClassMailIntlRequest';
             $xml = $xmlWrap->addChild($rootNode);
         } else {
             $method = 'Express';
             $rootNode = 'ExpressMailIntlRequest';
             $xml = $xmlWrap->addChild($rootNode);
         }
     }
     $xml->addAttribute('USERID', $this->getConfigData('userid'));
     $xml->addAttribute('PASSWORD', $this->getConfigData('password'));
     $xml->addChild('Option');
     $xml->addChild('Revision', self::DEFAULT_REVISION);
     $xml->addChild('ImageParameters');
     $xml->addChild('FromFirstName', $request->getShipperContactPersonFirstName());
     $xml->addChild('FromLastName', $request->getShipperContactPersonLastName());
     $xml->addChild('FromFirm', $request->getShipperContactCompanyName());
     $xml->addChild('FromAddress1', $request->getShipperAddressStreet2());
     $xml->addChild('FromAddress2', $request->getShipperAddressStreet1());
     $xml->addChild('FromCity', $request->getShipperAddressCity());
     $xml->addChild('FromState', $request->getShipperAddressStateOrProvinceCode());
     $xml->addChild('FromZip5', $fromZip5);
     $xml->addChild('FromZip4', $fromZip4);
     $xml->addChild('FromPhone', $request->getShipperContactPhoneNumber());
     if ($method != 'FirstClass') {
         if ($request->getReferenceData()) {
             $referenceData = $request->getReferenceData() . ' P' . $request->getPackageId();
         } else {
             $referenceData = $request->getOrderShipment()->getOrder()->getIncrementId() . ' P' . $request->getPackageId();
         }
         $xml->addChild('FromCustomsReference', 'Order #' . $referenceData);
     }
     $xml->addChild('ToFirstName', $request->getRecipientContactPersonFirstName());
     $xml->addChild('ToLastName', $request->getRecipientContactPersonLastName());
     $xml->addChild('ToFirm', $request->getRecipientContactCompanyName());
     $xml->addChild('ToAddress1', $request->getRecipientAddressStreet1());
     $xml->addChild('ToAddress2', $request->getRecipientAddressStreet2());
     $xml->addChild('ToCity', $request->getRecipientAddressCity());
     $xml->addChild('ToProvince', $request->getRecipientAddressStateOrProvinceCode());
     $xml->addChild('ToCountry', $this->_getCountryName($request->getRecipientAddressCountryCode()));
     $xml->addChild('ToPostalCode', $request->getRecipientAddressPostalCode());
     $xml->addChild('ToPOBoxFlag', 'N');
     $xml->addChild('ToPhone', $request->getRecipientContactPhoneNumber());
     $xml->addChild('ToFax');
     $xml->addChild('ToEmail');
     if ($method != 'FirstClass') {
         $xml->addChild('NonDeliveryOption', 'Return');
     }
     if ($method == 'FirstClass') {
         if (stripos($shippingMethod, 'Letter') !== false) {
             $xml->addChild('FirstClassMailType', 'LETTER');
         } else {
             if (stripos($shippingMethod, 'Flat') !== false) {
                 $xml->addChild('FirstClassMailType', 'FLAT');
             } else {
                 $xml->addChild('FirstClassMailType', 'PARCEL');
             }
         }
     }
     if ($method != 'FirstClass') {
         $xml->addChild('Container', $container);
     }
     $shippingContents = $xml->addChild('ShippingContents');
     $packageItems = $request->getPackageItems();
     // get countries of manufacture
     $countriesOfManufacture = array();
     $productIds = array();
     foreach ($packageItems as $itemShipment) {
         $item = new Varien_Object();
         $item->setData($itemShipment);
         $productIds[] = $item->getProductId();
     }
     $productCollection = Mage::getResourceModel('catalog/product_collection')->addStoreFilter($request->getStoreId())->addFieldToFilter('entity_id', array('in' => $productIds))->addAttributeToSelect('country_of_manufacture');
     foreach ($productCollection as $product) {
         $countriesOfManufacture[$product->getId()] = $product->getCountryOfManufacture();
     }
     $packagePoundsWeight = $packageOuncesWeight = 0;
     // for ItemDetail
     foreach ($packageItems as $itemShipment) {
         $item = new Varien_Object();
         $item->setData($itemShipment);
         $itemWeight = $item->getWeight() * $item->getQty();
         if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
             $itemWeight = Mage::helper('usa')->convertMeasureWeight($itemWeight, $packageParams->getWeightUnits(), Zend_Measure_Weight::POUND);
         }
         if (!empty($countriesOfManufacture[$item->getProductId()])) {
             $countryOfManufacture = $this->_getCountryName($countriesOfManufacture[$item->getProductId()]);
         } else {
             $countryOfManufacture = '';
         }
         $itemDetail = $shippingContents->addChild('ItemDetail');
         $itemDetail->addChild('Description', $item->getName());
         $ceiledQty = ceil($item->getQty());
         if ($ceiledQty < 1) {
             $ceiledQty = 1;
         }
         $individualItemWeight = $itemWeight / $ceiledQty;
         $itemDetail->addChild('Quantity', $ceiledQty);
         $itemDetail->addChild('Value', $item->getCustomsValue() * $item->getQty());
         list($individualPoundsWeight, $individualOuncesWeight) = $this->_convertPoundOunces($individualItemWeight);
         $itemDetail->addChild('NetPounds', $individualPoundsWeight);
         $itemDetail->addChild('NetOunces', $individualOuncesWeight);
         $itemDetail->addChild('HSTariffNumber', 0);
         $itemDetail->addChild('CountryOfOrigin', $countryOfManufacture);
         list($itemPoundsWeight, $itemOuncesWeight) = $this->_convertPoundOunces($itemWeight);
         $packagePoundsWeight += $itemPoundsWeight;
         $packageOuncesWeight += $itemOuncesWeight;
     }
     $additionalPackagePoundsWeight = floor($packageOuncesWeight / self::OUNCES_POUND);
     $packagePoundsWeight += $additionalPackagePoundsWeight;
     $packageOuncesWeight -= $additionalPackagePoundsWeight * self::OUNCES_POUND;
     if ($packagePoundsWeight + $packageOuncesWeight / self::OUNCES_POUND < $packageWeight) {
         list($packagePoundsWeight, $packageOuncesWeight) = $this->_convertPoundOunces($packageWeight);
     }
     $xml->addChild('GrossPounds', $packagePoundsWeight);
     $xml->addChild('GrossOunces', $packageOuncesWeight);
     if ($packageParams->getContentType() == 'OTHER' && $packageParams->getContentTypeOther() != null) {
         $xml->addChild('ContentType', $packageParams->getContentType());
         $xml->addChild('ContentTypeOther ', $packageParams->getContentTypeOther());
     } else {
         $xml->addChild('ContentType', $packageParams->getContentType());
     }
     $xml->addChild('Agreement', 'y');
     $xml->addChild('ImageType', 'PDF');
     $xml->addChild('ImageLayout', 'ALLINONEFILE');
     if ($method == 'FirstClass') {
         $xml->addChild('Container', $container);
     }
     // set size
     if ($packageParams->getSize()) {
         $xml->addChild('Size', $packageParams->getSize());
     }
     // set dimensions
     $xml->addChild('Length', $length);
     $xml->addChild('Width', $width);
     $xml->addChild('Height', $height);
     if ($girth) {
         $xml->addChild('Girth', $girth);
     }
     $xml = $xmlWrap->{$rootNode}->asXML();
     return $xml;
 }
Example #4
0
 /**
  * Form XML for shipment request
  *
  * @param Varien_Object $request
  * @return string
  */
 protected function _formShipmentRequest(Varien_Object $request)
 {
     $packageParams = $request->getPackageParams();
     $height = $packageParams->getHeight();
     $width = $packageParams->getWidth();
     $length = $packageParams->getLength();
     $weightUnits = $packageParams->getWeightUnits() == Zend_Measure_Weight::POUND ? 'LBS' : 'KGS';
     $dimensionsUnits = $packageParams->getDimensionUnits() == Zend_Measure_Length::INCH ? 'IN' : 'CM';
     $itemsDesc = array();
     $itemsShipment = $request->getPackageItems();
     foreach ($itemsShipment as $itemShipment) {
         $item = new Varien_Object();
         $item->setData($itemShipment);
         $itemsDesc[] = $item->getName();
     }
     $xmlRequest = new SimpleXMLElement('<?xml version = "1.0" ?><ShipmentConfirmRequest xml:lang="en-US"/>');
     $requestPart = $xmlRequest->addChild('Request');
     $requestPart->addChild('RequestAction', 'ShipConfirm');
     $requestPart->addChild('RequestOption', 'nonvalidate');
     $shipmentPart = $xmlRequest->addChild('Shipment');
     if ($request->getIsReturn()) {
         $returnPart = $shipmentPart->addChild('ReturnService');
         // UPS Print Return Label
         $returnPart->addChild('Code', '9');
     }
     $shipmentPart->addChild('Description', substr(implode(' ', $itemsDesc), 0, 35));
     //empirical
     $shipperPart = $shipmentPart->addChild('Shipper');
     if ($request->getIsReturn()) {
         $shipperPart->addChild('Name', $request->getRecipientContactCompanyName());
         $shipperPart->addChild('AttentionName', $request->getRecipientContactPersonName());
         $shipperPart->addChild('ShipperNumber', $this->getConfigData('shipper_number'));
         $shipperPart->addChild('PhoneNumber', $request->getRecipientContactPhoneNumber());
         $addressPart = $shipperPart->addChild('Address');
         $addressPart->addChild('AddressLine1', $request->getRecipientAddressStreet());
         $addressPart->addChild('AddressLine2', $request->getRecipientAddressStreet2());
         $addressPart->addChild('City', $request->getRecipientAddressCity());
         $addressPart->addChild('CountryCode', $request->getRecipientAddressCountryCode());
         $addressPart->addChild('PostalCode', $request->getRecipientAddressPostalCode());
         if ($request->getRecipientAddressStateOrProvinceCode()) {
             $addressPart->addChild('StateProvinceCode', $request->getRecipientAddressStateOrProvinceCode());
         }
     } else {
         $shipperPart->addChild('Name', $request->getShipperContactCompanyName());
         $shipperPart->addChild('AttentionName', $request->getShipperContactPersonName());
         $shipperPart->addChild('ShipperNumber', $this->getConfigData('shipper_number'));
         $shipperPart->addChild('PhoneNumber', $request->getShipperContactPhoneNumber());
         $addressPart = $shipperPart->addChild('Address');
         $addressPart->addChild('AddressLine1', $request->getShipperAddressStreet());
         $addressPart->addChild('AddressLine2', $request->getShipperAddressStreet2());
         $addressPart->addChild('City', $request->getShipperAddressCity());
         $addressPart->addChild('CountryCode', $request->getShipperAddressCountryCode());
         $addressPart->addChild('PostalCode', $request->getShipperAddressPostalCode());
         if ($request->getShipperAddressStateOrProvinceCode()) {
             $addressPart->addChild('StateProvinceCode', $request->getShipperAddressStateOrProvinceCode());
         }
     }
     $shipToPart = $shipmentPart->addChild('ShipTo');
     $shipToPart->addChild('AttentionName', $request->getRecipientContactPersonName());
     $shipToPart->addChild('CompanyName', $request->getRecipientContactCompanyName() ? $request->getRecipientContactCompanyName() : 'N/A');
     $shipToPart->addChild('PhoneNumber', $request->getRecipientContactPhoneNumber());
     $addressPart = $shipToPart->addChild('Address');
     $addressPart->addChild('AddressLine1', $request->getRecipientAddressStreet1());
     $addressPart->addChild('AddressLine2', $request->getRecipientAddressStreet2());
     $addressPart->addChild('City', $request->getRecipientAddressCity());
     $addressPart->addChild('CountryCode', $request->getRecipientAddressCountryCode());
     $addressPart->addChild('PostalCode', $request->getRecipientAddressPostalCode());
     if ($request->getRecipientAddressStateOrProvinceCode()) {
         $addressPart->addChild('StateProvinceCode', $request->getRecipientAddressRegionCode());
     }
     if ($this->getConfigData('dest_type') == 'RES') {
         $addressPart->addChild('ResidentialAddress');
     }
     if ($request->getIsReturn()) {
         $shipFromPart = $shipmentPart->addChild('ShipFrom');
         $shipFromPart->addChild('AttentionName', $request->getShipperContactPersonName());
         $shipFromPart->addChild('CompanyName', $request->getShipperContactCompanyName() ? $request->getShipperContactCompanyName() : $request->getShipperContactPersonName());
         $shipFromAddress = $shipFromPart->addChild('Address');
         $shipFromAddress->addChild('AddressLine1', $request->getShipperAddressStreet1());
         $shipFromAddress->addChild('AddressLine2', $request->getShipperAddressStreet2());
         $shipFromAddress->addChild('City', $request->getShipperAddressCity());
         $shipFromAddress->addChild('CountryCode', $request->getShipperAddressCountryCode());
         $shipFromAddress->addChild('PostalCode', $request->getShipperAddressPostalCode());
         if ($request->getShipperAddressStateOrProvinceCode()) {
             $shipFromAddress->addChild('StateProvinceCode', $request->getShipperAddressStateOrProvinceCode());
         }
         $addressPart = $shipToPart->addChild('Address');
         $addressPart->addChild('AddressLine1', $request->getShipperAddressStreet1());
         $addressPart->addChild('AddressLine2', $request->getShipperAddressStreet2());
         $addressPart->addChild('City', $request->getShipperAddressCity());
         $addressPart->addChild('CountryCode', $request->getShipperAddressCountryCode());
         $addressPart->addChild('PostalCode', $request->getShipperAddressPostalCode());
         if ($request->getShipperAddressStateOrProvinceCode()) {
             $addressPart->addChild('StateProvinceCode', $request->getShipperAddressStateOrProvinceCode());
         }
         if ($this->getConfigData('dest_type') == 'RES') {
             $addressPart->addChild('ResidentialAddress');
         }
     }
     $servicePart = $shipmentPart->addChild('Service');
     $servicePart->addChild('Code', $request->getShippingMethod());
     $packagePart = $shipmentPart->addChild('Package');
     $packagePart->addChild('Description', substr(implode(' ', $itemsDesc), 0, 35));
     //empirical
     $packagePart->addChild('PackagingType')->addChild('Code', $request->getPackagingType());
     $packageWeight = $packagePart->addChild('PackageWeight');
     $packageWeight->addChild('Weight', $request->getPackageWeight());
     $packageWeight->addChild('UnitOfMeasurement')->addChild('Code', $weightUnits);
     // set dimensions
     if ($length || $width || $height) {
         $packageDimensions = $packagePart->addChild('Dimensions');
         $packageDimensions->addChild('UnitOfMeasurement')->addChild('Code', $dimensionsUnits);
         $packageDimensions->addChild('Length', $length);
         $packageDimensions->addChild('Width', $width);
         $packageDimensions->addChild('Height', $height);
     }
     // ups support reference number only for domestic service
     if ($this->_isUSCountry($request->getRecipientAddressCountryCode()) && $this->_isUSCountry($request->getShipperAddressCountryCode())) {
         if ($request->getReferenceData()) {
             $referenceData = $request->getReferenceData() . $request->getPackageId();
         } else {
             $referenceData = 'Order #' . $request->getOrderShipment()->getOrder()->getIncrementId() . ' P' . $request->getPackageId();
         }
         $referencePart = $packagePart->addChild('ReferenceNumber');
         $referencePart->addChild('Code', '02');
         $referencePart->addChild('Value', $referenceData);
     }
     $deliveryConfirmation = $packageParams->getDeliveryConfirmation();
     if ($deliveryConfirmation) {
         /** @var $serviceOptionsNode SimpleXMLElement */
         $serviceOptionsNode = null;
         switch ($this->_getDeliveryConfirmationLevel($request->getRecipientAddressCountryCode())) {
             case self::DELIVERY_CONFIRMATION_PACKAGE:
                 $serviceOptionsNode = $packagePart->addChild('PackageServiceOptions');
                 break;
             case self::DELIVERY_CONFIRMATION_SHIPMENT:
                 $serviceOptionsNode = $shipmentPart->addChild('ShipmentServiceOptions');
                 break;
         }
         if (!is_null($serviceOptionsNode)) {
             $serviceOptionsNode->addChild('DeliveryConfirmation')->addChild('DCISType', $packageParams->getDeliveryConfirmation());
         }
     }
     $shipmentPart->addChild('PaymentInformation')->addChild('Prepaid')->addChild('BillShipper')->addChild('AccountNumber', $this->getConfigData('shipper_number'));
     if ($request->getPackagingType() != $this->getCode('container', 'ULE') && $request->getShipperAddressCountryCode() == Mage_Usa_Model_Shipping_Carrier_Abstract::USA_COUNTRY_ID && ($request->getRecipientAddressCountryCode() == 'CA' || $request->getRecipientAddressCountryCode() == 'PR')) {
         $invoiceLineTotalPart = $shipmentPart->addChild('InvoiceLineTotal');
         $invoiceLineTotalPart->addChild('CurrencyCode', $request->getBaseCurrencyCode());
         $invoiceLineTotalPart->addChild('MonetaryValue', ceil($packageParams->getCustomsValue()));
     }
     $labelPart = $xmlRequest->addChild('LabelSpecification');
     $labelPart->addChild('LabelPrintMethod')->addChild('Code', 'GIF');
     $labelPart->addChild('LabelImageFormat')->addChild('Code', 'GIF');
     $this->setXMLAccessRequest();
     $xmlRequest = $this->_xmlAccessRequest . $xmlRequest->asXml();
     return $xmlRequest;
 }
Example #5
0
 /**
  * Prepare shipment request.
  * Validate and correct request information
  *
  * @param Varien_Object $request
  *
  */
 protected function _prepareShipmentRequest(Varien_Object $request)
 {
     $phonePattern = '/[\\s\\_\\-\\(\\)]+/';
     $phoneNumber = $request->getShipperContactPhoneNumber();
     $phoneNumber = preg_replace($phonePattern, '', $phoneNumber);
     $request->setShipperContactPhoneNumber($phoneNumber);
     $phoneNumber = $request->getRecipientContactPhoneNumber();
     $phoneNumber = preg_replace($phonePattern, '', $phoneNumber);
     $request->setRecipientContactPhoneNumber($phoneNumber);
 }
Example #6
0
 /**
  * Form array with appropriate structure for shipment request
  *
  * @param Varien_Object $request
  * @return array
  */
 protected function _formShipmentRequest(Varien_Object $request)
 {
     $r = new Varien_Object();
     $this->_request = $request;
     $this->_setAccessRequest($r);
     $packageItems = $request->getPackageItems();
     $shipRequest = new StdClass();
     $shipRequest->RequesterID = $r->getRequesterId();
     //$shipRequest->LabelSize = '4x8';
     if (Mage::getStoreConfig('carriers/wsaendicia/label_pdf')) {
         $shipRequest->ImageFormat = 'PDF';
         //EN-15
     }
     $shipRequest->AccountID = $r->getAccountId();
     $shipRequest->PassPhrase = $r->getPassword();
     $shipRequest->MailClass = $request->getShippingMethod();
     $shipRequest->CostCenter = 0;
     $shipRequest->Stealth = Mage::getStoreConfig('carriers/wsaendicia/stealth') ? 'TRUE' : 'FALSE';
     $shipRequest->Value = $request->getPackageValue();
     $shipRequest->Description = 'Goods purchased';
     $weightUnits = Zend_Measure_Weight::POUND;
     $shipDimensions = new stdClass();
     foreach ($request->getPackages() as $package) {
         $shipDimensions->Length = $this->_convertDimension($package['params']['length'], $package['params']['dimension_units']);
         $shipDimensions->Width = $this->_convertDimension($package['params']['width'], $package['params']['dimension_units']);
         $shipDimensions->Height = $this->_convertDimension($package['params']['height'], $package['params']['dimension_units']);
         $shipRequest->MailpieceShape = $this->checkContainerType($package['params']['container']);
         $weightUnits = $package['params']['weight_units'];
         break;
     }
     $shipRequest->WeightOz = $this->_convertWeight($request->getPackageWeight(), $weightUnits);
     $shipRequest->MailpieceDimensions = $shipDimensions;
     $isDomestic = $request->getRecipientAddressCountryCode() == self::USA_COUNTRY_ID;
     if (!$isDomestic) {
         $shipCustomsInfo = new stdClass();
         $shipCustomsInfo->ContentsType = 'Merchandise';
         $shipCustomsInfo->RestrictionType = 'None';
         $shipCustomsInfo->SendersCustomsReference = $request->getShipperContactCompanyName();
         $shipCustomsInfo->ImportersCustomsReference = $request->getRecipientContactPersonName();
         $shipCustomsInfo->LicenseNumber = '';
         $shipCustomsInfo->CertificateNumber = '';
         if ($invoice = $request->getOrderShipment()->getOrder()->getInvoice()) {
             $invoiceNum = $invoice->getIncrementId();
         } else {
             $invoiceNum = '';
         }
         $shipCustomsInfo->InvoiceNumber = $invoiceNum;
         $shipCustomsInfo->EelPfc = 'NOEEI 30.37(a)';
         $customItems = new stdClass();
         foreach ($packageItems as $item) {
             $oneCustomsItem = new stdClass();
             $oneCustomsItem->Description = $item['name'];
             $oneCustomsItem->Quantity = $item['qty'];
             $oneCustomsItem->Weight = $this->_convertWeight($item['weight'] * $item['qty'], $weightUnits);
             $oneCustomsItem->Value = $item['customs_value'] * $item['qty'];
             $customItems->CustomsItem[] = $oneCustomsItem;
         }
         $shipCustomsInfo->CustomsItems = $customItems;
         $shipRequest->CustomsInfo = $shipCustomsInfo;
         $shipRequest->CustomsCertify = 'FALSE';
         $shipRequest->CustomsSigner = '';
         $shipRequest->CustomsSendersCopy = 'true';
     }
     $shipRequest->SortType = 'Nonpresorted';
     $shipRequest->EntryFacility = "Other";
     $services = false;
     if ($isDomestic) {
         foreach ($this->getCode('delivery_conf_types') as $confCode => $description) {
             if ($request->getServices() != 'False' && $this->_mapServices($request->getServices()) == $confCode) {
                 if (!$services) {
                     $services = new stdClass();
                 }
                 $services->{$confCode} = "ON";
             }
         }
     }
     if ($request->getInsuranceRequired()) {
         if (!$services) {
             $services = new stdClass();
         }
         $services->InsuredMail = Mage::helper('wsaendicia')->getInsuranceProvider();
         $shipRequest->InsuredValue = $request->getInsuranceValue() ? $request->getInsuranceValue() : $request->getPackageValue();
     }
     if ($services) {
         $shipRequest->Services = $services;
     }
     $shipRequest->PartnerCustomerID = $request->getOrderShipment()->getOrder()->getIncrementId();
     $shipRequest->PartnerTransactionID = $request->getOrderShipment()->getOrder()->getIncrementId();
     if (Mage::getStoreConfig('carriers/wsaendicia/rubber_stamp_order')) {
         $shipRequest->RubberStamp1 = $request->getOrderShipment()->getOrder()->getIncrementId();
     }
     $rubberStamp1code = Mage::getStoreConfig('carriers/wsaendicia/rubber_stamp_1');
     $rubberStamp2code = Mage::getStoreConfig('carriers/wsaendicia/rubber_stamp_2');
     $rubberStamp3code = Mage::getStoreConfig('carriers/wsaendicia/rubber_stamp_3');
     if ($rubberStamp1code != '' || $rubberStamp2code != '' || $rubberStamp3code != '') {
         $product = new Varien_Object();
         foreach ($packageItems as $packageItem) {
             $product = Mage::getModel('catalog/product')->load($packageItem['product_id']);
             break;
         }
         try {
             if ($product->getData($rubberStamp1code)) {
                 $rubberStamp1 = $product->getAttributeText($rubberStamp1code) ? $product->getAttributeText($rubberStamp1code) : $product->getData($rubberStamp1code);
             } else {
                 $rubberStamp1 = "";
             }
             if ($product->getData($rubberStamp2code)) {
                 $rubberStamp2 = $product->getAttributeText($rubberStamp2code) ? $product->getAttributeText($rubberStamp2code) : $product->getData($rubberStamp2code);
             } else {
                 $rubberStamp2 = "";
             }
             if ($product->getData($rubberStamp3code)) {
                 $rubberStamp3 = $product->getAttributeText($rubberStamp3code) ? $product->getAttributeText($rubberStamp3code) : $product->getData($rubberStamp3code);
             } else {
                 $rubberStamp3 = "";
             }
             if ($rubberStamp1 != "") {
                 if (Mage::getStoreConfig('carriers/wsaendicia/rubber_stamp_order')) {
                     $shipRequest->RubberStamp1 = $request->getOrderShipment()->getOrder()->getIncrementId() . ": " . $rubberStamp1;
                 } else {
                     $shipRequest->RubberStamp1 = $rubberStamp1;
                 }
             }
             if ($rubberStamp2 != "") {
                 $shipRequest->RubberStamp2 = $rubberStamp2;
             }
             if ($rubberStamp3 != "") {
                 $shipRequest->RubberStamp3 = $rubberStamp3;
             }
         } catch (Exception $e) {
             Mage::logException($e);
         }
     }
     $shipRequest->FromName = $request->getShipperContactCompanyName();
     $shipRequest->ReturnAddress1 = $request->getShipperAddressStreet();
     $shipRequest->FromCity = $request->getShipperAddressCity();
     $shipRequest->FromState = $request->getShipperAddressStateOrProvinceCode();
     $shipRequest->FromPostalCode = substr($request->getShipperAddressPostalCode(), 0, 5);
     if ($isDomestic) {
         $shipRequest->FromCountry = $request->getShipperAddressCountryCode();
     }
     $shipRequest->FromPhone = $request->getShipperContactPhoneNumber();
     $shipRequest->ToName = $request->getRecipientContactPersonName();
     if ($request->getRecipientContactCompanyName()) {
         $shipRequest->ToCompany = $request->getRecipientContactCompanyName();
     }
     $shipRequest->ToAddress1 = $request->getRecipientAddressStreet();
     $shipRequest->ToCity = $request->getRecipientAddressCity();
     $shipRequest->ToState = $request->getRecipientAddressStateOrProvinceCode();
     $shipRequest->ToPostalCode = $isDomestic ? substr($request->getRecipientAddressPostalCode(), 0, 5) : substr($request->getRecipientAddressPostalCode(), 0, 15);
     if (!$isDomestic) {
         $shipRequest->ToCountryCode = $request->getRecipientAddressCountryCode();
     }
     if (!$isDomestic) {
         $shipRequest->ToCountry = Mage::getModel('directory/country')->load($request->getRecipientAddressCountryCode())->getName();
     }
     $shipRequest->ToPhone = $request->getRecipientContactPhoneNumber();
     $test = $this->getConfigFlag('sandbox_mode') ? 'YES' : "NO";
     $shipRequest->Test = $test;
     //  $shipRequest->ImageFormat = 'PDF';
     $wholeRequest = new stdClass();
     $wholeRequest->LabelRequest = $shipRequest;
     return $wholeRequest;
 }