public function testGetCarrierConfigValue() { $carrierCode = 'carrier1'; $configPath = 'title'; $configValue = 'some title'; $this->scopeConfig->expects($this->once())->method('getValue')->with(sprintf('carriers/%s/%s', $carrierCode, $configPath), \Magento\Store\Model\ScopeInterface::SCOPE_STORE)->will($this->returnValue($configValue)); $this->assertEquals($configValue, $this->helper->getCarrierConfigValue($carrierCode, $configPath)); }
/** * Define params and variables * * @return void */ public function _construct() { parent::_construct(); $this->setInch($this->carrierDhl->getCode('unit_of_dimension_cut', 'I')); $this->setCm($this->carrierDhl->getCode('unit_of_dimension_cut', 'C')); $this->setHeight($this->carrierDhl->getCode('dimensions', 'height')); $this->setDepth($this->carrierDhl->getCode('dimensions', 'depth')); $this->setWidth($this->carrierDhl->getCode('dimensions', 'width')); $kgWeight = 70; $this->setDivideOrderWeightNoteKg(__('Select this to allow DHL to optimize shipping charges by splitting the order if it exceeds %1 %2.', $kgWeight, 'kg')); $weight = round($this->carrierHelper->convertMeasureWeight($kgWeight, \Zend_Measure_Weight::KILOGRAM, \Zend_Measure_Weight::POUND), 3); $this->setDivideOrderWeightNoteLbp(__('Select this to allow DHL to optimize shipping charges by splitting the order if it exceeds %1 %2.', $weight, 'pounds')); $this->setTemplate('unitofmeasure.phtml'); }
/** * Define params and variables * * @return void */ public function _construct() { parent::_construct(); $carrierModel = $this->carrierDhl; $this->setInch($this->escapeJsQuote($carrierModel->getCode('unit_of_dimension_cut', 'I'))); $this->setCm($this->escapeJsQuote($carrierModel->getCode('unit_of_dimension_cut', 'C'))); $this->setHeight($this->escapeJsQuote($carrierModel->getCode('dimensions', 'height'))); $this->setDepth($this->escapeJsQuote($carrierModel->getCode('dimensions', 'depth'))); $this->setWidth($this->escapeJsQuote($carrierModel->getCode('dimensions', 'width'))); $kgWeight = 70; $this->setDivideOrderWeightNoteKg($this->escapeJsQuote(__('This allows breaking total order weight into smaller pieces if it exceeds %1 %2 to ensure accurate calculation of shipping charges.', $kgWeight, 'kg'))); $weight = round($this->_carrierHelper->convertMeasureWeight($kgWeight, \Zend_Measure_Weight::KILOGRAM, \Zend_Measure_Weight::POUND), 3); $this->setDivideOrderWeightNoteLbp($this->escapeJsQuote(__('This allows breaking total order weight into smaller pieces if it exceeds %1 %2 to ensure accurate calculation of shipping charges.', $weight, 'pounds'))); $this->setTemplate('unitofmeasure.phtml'); }
/** * 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 \Magento\Framework\DataObject $request * @return string * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function _formIntlShipmentRequest(\Magento\Framework\DataObject $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 = $this->_carrierHelper->convertMeasureWeight($request->getPackageWeight(), $packageParams->getWeightUnits(), \Zend_Measure_Weight::POUND); } if ($packageParams->getDimensionUnits() != \Zend_Measure_Length::INCH) { $length = round($this->_carrierHelper->convertMeasureDimension($packageParams->getLength(), $packageParams->getDimensionUnits(), \Zend_Measure_Length::INCH)); $width = round($this->_carrierHelper->convertMeasureDimension($packageParams->getWidth(), $packageParams->getDimensionUnits(), \Zend_Measure_Length::INCH)); $height = round($this->_carrierHelper->convertMeasureDimension($packageParams->getHeight(), $packageParams->getDimensionUnits(), \Zend_Measure_Length::INCH)); } if ($packageParams->getGirthDimensionUnits() != \Zend_Measure_Length::INCH) { $girth = round($this->_carrierHelper->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 = $this->_xmlElFactory->create(['data' => '<?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 = []; $productIds = []; foreach ($packageItems as $itemShipment) { $item = new \Magento\Framework\DataObject(); $item->setData($itemShipment); $productIds[] = $item->getProductId(); } $productCollection = $this->_productCollectionFactory->create()->addStoreFilter($request->getStoreId())->addFieldToFilter('entity_id', ['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 \Magento\Framework\DataObject(); $item->setData($itemShipment); $itemWeight = $item->getWeight() * $item->getQty(); if ($packageParams->getWeightUnits() != \Zend_Measure_Weight::POUND) { $itemWeight = $this->_carrierHelper->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; }
/** * Convert item dimension to needed dimension based on config dimension unit of measure * * @param float $dimension * @param string|bool $configWeightUnit * @return float */ protected function _getDimension($dimension, $configWeightUnit = false) { if (!$configWeightUnit) { $configWeightUnit = $this->getCode('dimensions_variables', (string) $this->getConfigData('unit_of_measure')); } else { $configWeightUnit = $this->getCode('dimensions_variables', $configWeightUnit); } if ($configWeightUnit == \Zend_Measure_Weight::POUND) { $configDimensionUnit = \Zend_Measure_Length::INCH; } else { $configDimensionUnit = \Zend_Measure_Length::CENTIMETER; } $countryDimensionUnit = $this->getCode('dimensions_variables', $this->_getDimensionUnit()); if ($configDimensionUnit != $countryDimensionUnit) { $dimension = $this->_carrierHelper->convertMeasureDimension(round($dimension, 3), $configDimensionUnit, $countryDimensionUnit); } return round($dimension, 3); }
/** * Draw packages block * * @param \Zend_Pdf_Page $page * @return \Magento\Shipping\Model\Order\Pdf\Packaging * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ protected function _drawPackageBlock(\Zend_Pdf_Page $page) { if ($this->getPackageShippingBlock()) { $packaging = $this->getPackageShippingBlock(); } else { $packaging = $this->_layout->getBlockSingleton('Magento\\Shipping\\Block\\Adminhtml\\Order\\Packaging'); } $packages = $packaging->getPackages(); $packageNum = 1; foreach ($packages as $package) { $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92)); $page->drawRectangle(25, $this->y + 15, 190, $this->y - 35); $page->drawRectangle(190, $this->y + 15, 350, $this->y - 35); $page->drawRectangle(350, $this->y + 15, 570, $this->y - 35); $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1)); $page->drawRectangle(520, $this->y + 15, 570, $this->y - 5); $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0)); $packageText = __('Package') . ' ' . $packageNum; $page->drawText($packageText, 525, $this->y, 'UTF-8'); $packageNum++; $package = new \Magento\Framework\DataObject($package); $params = new \Magento\Framework\DataObject($package->getParams()); $dimensionUnits = $this->_carrierHelper->getMeasureDimensionName($params->getDimensionUnits()); $typeText = __('Type') . ' : ' . $packaging->getContainerTypeByCode($params->getContainer()); $page->drawText($typeText, 35, $this->y, 'UTF-8'); if ($params->getLength() != null) { $lengthText = $params->getLength() . ' ' . $dimensionUnits; } else { $lengthText = '--'; } $lengthText = __('Length') . ' : ' . $lengthText; $page->drawText($lengthText, 200, $this->y, 'UTF-8'); if ($params->getDeliveryConfirmation() != null) { $confirmationText = __('Signature Confirmation') . ' : ' . $packaging->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()); $page->drawText($confirmationText, 355, $this->y, 'UTF-8'); } $this->y = $this->y - 10; if ($packaging->displayCustomsValue() != null) { $customsValueText = __('Customs Value') . ' : ' . $packaging->displayPrice($params->getCustomsValue()); $page->drawText($customsValueText, 35, $this->y, 'UTF-8'); } if ($params->getWidth() != null) { $widthText = $params->getWidth() . ' ' . $dimensionUnits; } else { $widthText = '--'; } $widthText = __('Width') . ' : ' . $widthText; $page->drawText($widthText, 200, $this->y, 'UTF-8'); if ($params->getContentType() != null) { if ($params->getContentType() == 'OTHER') { $contentsValue = $params->getContentTypeOther(); } else { $contentsValue = $packaging->getContentTypeByCode($params->getContentType()); } $contentsText = __('Contents') . ' : ' . $contentsValue; $page->drawText($contentsText, 355, $this->y, 'UTF-8'); } $this->y = $this->y - 10; $weightText = __('Total Weight') . ' : ' . $params->getWeight() . ' ' . $this->_carrierHelper->getMeasureWeightName($params->getWeightUnits()); $page->drawText($weightText, 35, $this->y, 'UTF-8'); if ($params->getHeight() != null) { $heightText = $params->getHeight() . ' ' . $dimensionUnits; } else { $heightText = '--'; } $heightText = __('Height') . ' : ' . $heightText; $page->drawText($heightText, 200, $this->y, 'UTF-8'); $this->y = $this->y - 10; if ($params->getSize()) { $sizeText = __('Size') . ' : ' . ucfirst(strtolower($params->getSize())); $page->drawText($sizeText, 35, $this->y, 'UTF-8'); } if ($params->getGirth() != null) { $dimensionGirthUnits = $this->_carrierHelper->getMeasureDimensionName($params->getGirthDimensionUnits()); $girthText = __('Girth') . ' : ' . $params->getGirth() . ' ' . $dimensionGirthUnits; $page->drawText($girthText, 200, $this->y, 'UTF-8'); } $this->y = $this->y - 5; $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1)); $page->drawRectangle(25, $this->y, 570, $this->y - 30 - count($package->getItems()) * 12); $this->y = $this->y - 10; $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0)); $page->drawText(__('Items in the Package'), 30, $this->y, 'UTF-8'); $txtIndent = 5; $itemCollsNumber = $packaging->displayCustomsValue() ? 5 : 4; $itemCollsX[0] = 30; // coordinate for Product name $itemCollsX[1] = 250; // coordinate for Product name $itemCollsXEnd = 565; $itemCollsXStep = round(($itemCollsXEnd - $itemCollsX[1]) / ($itemCollsNumber - 1)); // calculate coordinates for all other cells (Weight, Customs Value, Qty Ordered, Qty) for ($i = 2; $i <= $itemCollsNumber; $i++) { $itemCollsX[$i] = $itemCollsX[$i - 1] + $itemCollsXStep; } $i = 0; $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92)); $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsXEnd, $this->y - 15); $this->y = $this->y - 12; $i = 0; $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0)); $page->drawText(__('Product'), $itemCollsX[$i] + $txtIndent, $this->y, 'UTF-8'); $page->drawText(__('Weight'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); if ($packaging->displayCustomsValue()) { $page->drawText(__('Customs Value'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); } $page->drawText(__('Qty Ordered'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); $page->drawText(__('Qty'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); $i = 0; foreach ($package->getItems() as $itemId => $item) { $item = new \Magento\Framework\DataObject($item); $i = 0; $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1)); $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15); $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsXEnd, $this->y - 15); $this->y = $this->y - 12; $i = 0; $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0)); $page->drawText($item->getName(), $itemCollsX[$i] + $txtIndent, $this->y, 'UTF-8'); $page->drawText($item->getWeight(), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); if ($packaging->displayCustomsValue()) { $page->drawText($packaging->displayPrice($item->getCustomsValue()), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); } $page->drawText($packaging->getQtyOrderedItem($item->getOrderItemId()), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); $page->drawText($item->getQty() * 1, $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8'); } $this->y = $this->y - 30; } return $this; }
public function testIsCountryInEU() { $this->scopeConfig->expects($this->exactly(2))->method('getValue')->with('general/country/eu_countries', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)->will($this->returnValue("GB")); $this->assertEquals(true, $this->helper->isCountryInEU("GB")); $this->assertEquals(false, $this->helper->isCountryInEU("US")); }
/** * Check if shipping is domestic * * @param string $origCountryCode * @param string $destCountryCode * @return bool */ protected function _checkDomesticStatus($origCountryCode, $destCountryCode) { $this->_isDomestic = false; $origCountry = (string) $this->getCountryParams($origCountryCode)->getData('name'); $destCountry = (string) $this->getCountryParams($destCountryCode)->getData('name'); $isDomestic = (string) $this->getCountryParams($destCountryCode)->getData('domestic'); if ($origCountry == $destCountry && $isDomestic || $this->_carrierHelper->isCountryInEU($origCountryCode) && $this->_carrierHelper->isCountryInEU($destCountryCode)) { $this->_isDomestic = true; } return $this->_isDomestic; }