public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); if ($request->getLimitMethod()) { $r->setService($request->getLimitMethod()); } if ($request->getTntAccount()) { $r->setTntAccount($request->getTntAccount()); } else { $r->setTntAccount($this->getConfigData('account')); } if ($request->getExpZipCode()) { $r->setExpZipCode($request->getExpZipCode()); } else { $r->setExpZipCode(Mage::getStoreConfig('carriers/tnt/code_postal', $this->getStore())); } if ($request->getExpCity()) { $r->setExpCity($request->getExpCity()); } else { $r->setExpCity(Mage::getStoreConfig('carriers/tnt/ville', $this->getStore())); } if ($request->getDestPostcode()) { $r->setDestPostcode($request->getDestPostcode()); } else { } if ($request->getDestCity()) { $r->setDestCity($request->getDestCity()); } else { } $this->_rawRequest = $r; return $this; }
protected function _getCourierRate(Mage_Shipping_Model_Rate_Request $request) { $package_cost = $request->getPackageValueWithDiscount(); $shipping_settings = Mage::helper('altteam_qwintry')->getShippingSettings(); $pounds = $request->getPackageWeight(); $currencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies(); $currency = $request->getPackageCurrency(); if (in_array('USD', $currencies)) { Mage::helper('directory')->currencyConvert($package_cost, $currency->getCurrencyCode(), 'USD'); } elseif ($currency->getCurrencyCode() == 'EUR') { $package_cost = $package_cost * 1.097; } elseif ($currency->getCurrencyCode() == 'RMB') { $package_cost = $package_cost * 1.157; } $data = array('params' => array('method' => 'qwair', 'hub_code' => empty($shipping_settings['hub']) ? 'DE1' : $shipping_settings['hub'], 'insurance' => false, 'retail_pricing' => false, 'weight' => $pounds > 0.1 ? $pounds : (empty($shipping_settings['default_weight']) ? 4 : $shipping_settings['default_weight']), 'items_value' => $package_cost, 'addr_country' => $request->getDestCountryId(), 'addr_zip' => $request->getDestPostcode(), 'addr_line1' => $request->getDestStreet(), 'addr_line2' => '', 'addr_city' => $request->getDestCity(), 'addr_state' => $request->getDestRegionCode())); $response = Mage::helper('altteam_qwintry')->sendApiRequest('cost', $data); if (!$response || empty($response->success) || !$response->success) { return false; } $rate = Mage::getModel('shipping/rate_result_method'); $rate->setCarrier($this->_code); $rate->setCarrierTitle($this->getConfigData('title')); $rate->setMethod('courier'); $rate->setMethodTitle('Courier'); $rate->setPrice($response->result->total); $rate->setCost(0); return $rate; }
/** * @param Mage_Shipping_Model_Rate_Request $request * @return false|Mage_Core_Model_Abstract */ protected function getShippingRate(Mage_Shipping_Model_Rate_Request $request) { $helper = Mage::helper('etrans'); $address = $helper->formatAddress($request->getDestStreet()); if ($request->getDestCity()) { $city = $request->getDestCity(); } else { $city = '-'; } $data = array('calle' => $address['street'], 'numero_puerta' => $address['number'], 'piso' => '', 'dpto_oficina' => '', 'bque_torre' => '', 'cp' => $request->getDestPostcode(), 'localidad' => $city, 'partido' => '', 'provincia' => $this->getRegionName($request->getDestRegionId()), 'email' => '*****@*****.**', 'celular' => '', 'nombre_razon_social' => 'Guest', 'dni_cuit' => '', 'telefono' => '', 'seguro' => $this->getConfigData('insurance'), 'horario_retiro' => $this->getConfigData('pickup_time'), 'horario_entrega' => $this->getConfigData('delivery_time')); $items = $request->getAllItems(); if ($items) { $i = 1; foreach ($items as $item) { $item_qty = (int) $item->getQty(); $dimensions = $helper->getProductDimensions($item->getProductId()); if ($item_qty > 1) { $item_number = 1; while ($item_number <= $item_qty) { $data['bulto_' . $i] = array('alto' => $dimensions['height'], 'ancho' => $dimensions['width'], 'profundidad' => $dimensions['depth'], 'peso' => $dimensions['weight'], 'valor_declarado' => $dimensions['price']); $i++; $item_number++; } } else { $data['bulto_' . $i] = array('alto' => $dimensions['height'], 'ancho' => $dimensions['width'], 'profundidad' => $dimensions['depth'], 'peso' => $dimensions['weight'], 'valor_declarado' => $dimensions['price']); } $i++; } } $etrans = new Dc_Etrans_Client($this->getConfigData('api_key'), $this->getConfigData('api_secret')); $response = $etrans->crear_parametros($data); if (is_array($response) && !empty($response['response']['response']['Costo'])) { $rate = Mage::getModel('shipping/rate_result_method'); $rate->setCarrier($this->_code); $rate->setCarrierTitle($this->getConfigData('title')); $rate->setMethod('standand'); $rate->setMethodTitle($this->getConfigData('name')); $rate->setPrice($response['response']['response']['Costo']); $rate->setCost(0); return $rate; } else { return false; } }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!Mage::getStoreConfig('carriers/' . $this->_code . '/active')) { return false; } $destinationData = array('city' => ucwords(strtolower($request->getDestCity())), 'country_id' => $request->getDestCountryId(), 'postcode' => $request->getDestPostcode()); $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); $quote = Mage::getModel("sales/quote")->load($quoteId); $result = Mage::getModel('aramexshipping/shipping')->getRatesAndPackages($quote, true, $destinationData); $error = $result['error']; $error_msg = isset($result['error_msg']) ? 'Aramex Error: ' . $result['error_msg'] : ''; $price = $result['price']; $methodTitle = $request->getFreeShipping() ? Mage::helper('aramexshipping')->__('Free shipping applied') : ''; $handling = Mage::getStoreConfig('carriers/' . $this->_code . '/handling'); $result = Mage::getModel('shipping/rate_result'); if (!$error && $price > 0 || !$error && $request->getFreeShipping()) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setMethod($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethodTitle($methodTitle); $method->setPrice($price); $method->setCost($price); $result->append($method); } else { $error = Mage::getModel('shipping/rate_result_error'); $error->setCarrier($this->_code); $error->setCarrierTitle($this->getConfigData('title')); $error->setErrorMessage($error_msg ? $error_msg : $this->getConfigData('specificerrmsg')); $result->append($error); if ($error_msg) { Mage::helper('aramexshipping')->log($error_msg, '', 'aramex_collect_rates'); Mage::helper('aramexshipping')->sendLogEmail(array('subject' => 'Collect Rates Error Log', 'content' => $error_msg)); } } return $result; }
public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); $r->setStoreId($request->getStoreId()); if ($request->getLimitMethod()) { $r->setService($request->getLimitMethod()); } if ($request->getDhlId()) { $id = $request->getDhlId(); } else { $id = $this->getConfigData('id'); } $r->setId($id); if ($request->getDhlPassword()) { $password = $request->getDhlPassword(); } else { $password = $this->getConfigData('password'); } $r->setPassword($password); if ($request->getDhlAccount()) { $accountNbr = $request->getDhlAccount(); } else { $accountNbr = $this->getConfigData('account'); } $r->setAccountNbr($accountNbr); if ($request->getDhlShippingKey()) { $shippingKey = $request->getDhlShippingKey(); } else { $shippingKey = $this->getConfigData('shipping_key'); } $r->setShippingKey($shippingKey); if ($request->getDhlShippingIntlKey()) { $shippingKey = $request->getDhlShippingIntlKey(); } else { $shippingKey = $this->getConfigData('shipping_intlkey'); } $r->setShippingIntlKey($shippingKey); if ($request->getDhlShipmentType()) { $shipmentType = $request->getDhlShipmentType(); } else { $shipmentType = $this->getConfigData('shipment_type'); } $r->setShipmentType($shipmentType); if ($request->getDhlDutiable()) { $shipmentDutible = $request->getDhlDutiable(); } else { $shipmentDutible = $this->getConfigData('dutiable'); } $r->setDutiable($shipmentDutible); if ($request->getDhlDutyPaymentType()) { $dutypaytype = $request->getDhlDutyPaymentType(); } else { $dutypaytype = $this->getConfigData('dutypaymenttype'); } $r->setDutyPaymentType($dutypaytype); if ($request->getDhlContentDesc()) { $contentdesc = $request->getDhlContentDesc(); } else { $contentdesc = $this->getConfigData('contentdesc'); } $r->setContentDesc($contentdesc); if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } if ($request->getOrigCountry()) { $origCountry = $request->getOrigCountry(); } else { $origCountry = Mage::getStoreConfig('shipping/origin/country_id', $this->getStore()); } $r->setOrigCountry($origCountry); /* * DHL only accepts weight as a whole number. Maximum length is 3 digits. */ $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $shippingWeight = round(max(1, $weight), 0); $r->setValue(round($request->getPackageValue(), 2)); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); $r->setDestStreet(Mage::helper('core/string')->substr($request->getDestStreet(), 0, 35)); $r->setDestCity($request->getDestCity()); if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } //for DHL, puero rico state for US will assume as puerto rico country //for puerto rico, dhl will ship as international if ($destCountry == self::USA_COUNTRY_ID && ($request->getDestPostcode() == '00912' || $request->getDestRegionCode() == self::PUERTORICO_COUNTRY_ID)) { $destCountry = self::PUERTORICO_COUNTRY_ID; } $r->setDestCountryId($destCountry); $r->setDestState($request->getDestRegionCode()); $r->setWeight($shippingWeight); $r->setFreeMethodWeight($request->getFreeMethodWeight()); $this->_rawRequest = $r; // $methods = explode(',', $this->getConfigData('allowed_methods')); // // $freeMethod = $this->getConfigData('free_method'); // // $internationcode = $this->getCode('international_searvice'); // $minOrderAmount = $this->getConfigData('cutoff_cost') ? $this->getConfigData('cutoff_cost') : 0; // if ($shippingWeight>0) { // $this->_rawRequest->setWeight($shippingWeight); // $this->_getQuotes(); // foreach ($methods as $method) { // if(($method==$internationcode && ($r->getDestCountryId() != self::USA_COUNTRY_ID)) || // ($method!=$internationcode && ($r->getDestCountryId() == self::USA_COUNTRY_ID))) // { // $weight = $freeMethod==$method && $this->getConfigData('cutoff_cost') <= $r->getValue() ? 0 : $shippingWeight; // if ($weight>0) { // $this->_rawRequest->setWeight($weight); // $this->_rawRequest->setService($method); // $this->_getQuotes(); // } else { // $this->_dhlRates[$method] = array( // 'term' => $this->getCode('service', $method), // 'price_total' => 0, // ); // } // } // } // } else { // $this->_errors[] = Mage::helper('usa')->__('Please enter the package weight'); // } return $this; }
public function getNewRate(Mage_Shipping_Model_Rate_Request $request, $zipRangeSet = 0) { $read = $this->_getReadAdapter(); $write = $this->_getWriteAdapter(); $postcode = $request->getDestPostcode(); $table = Mage::getSingleton('core/resource')->getTableName('matrixrate_shipping/matrixrate'); if ($zipRangeSet && is_numeric($postcode)) { # Want to search for postcodes within a range $zipSearchString = ' AND ' . $postcode . ' BETWEEN dest_zip AND dest_zip_to )'; } else { $zipSearchString = $read->quoteInto(" AND ? LIKE dest_zip )", $postcode); } for ($j = 0; $j < 10; $j++) { $select = $read->select()->from($table); switch ($j) { case 0: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()) . $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 ", $request->getDestCity()) . $zipSearchString); break; case 1: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_region_id=? AND dest_city=''", $request->getDestRegionId()) . $zipSearchString); break; case 2: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()) . $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_zip='')", $request->getDestCity())); break; case 3: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_region_id='0'", $request->getDestCity()) . $zipSearchString); break; case 4: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND STRCMP(LOWER(dest_city),LOWER(?)) = 0 AND dest_region_id='0' AND dest_zip='') ", $request->getDestCity())); break; case 5: $select->where($read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_city='' ", $request->getDestCountryId()) . $zipSearchString); break; case 6: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_region_id=? AND dest_city='' AND dest_zip='') ", $request->getDestRegionId())); break; case 7: $select->where($read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_city='' AND dest_zip='') ", $request->getDestCountryId())); break; case 8: $select->where(" (dest_country_id='0' AND dest_region_id='0'" . $zipSearchString); break; case 9: $select->where(" (dest_country_id='0' AND dest_region_id='0' AND dest_zip='')"); break; } if (is_array($request->getMRConditionName())) { $i = 0; foreach ($request->getMRConditionName() as $conditionName) { if ($i == 0) { $select->where('condition_name=?', $conditionName); } else { $select->orWhere('condition_name=?', $conditionName); } $select->where('condition_from_value<=?', $request->getData($conditionName)); $i++; } } else { $select->where('condition_name=?', $request->getMRConditionName()); $select->where('condition_from_value<=?', $request->getData($request->getMRConditionName())); $select->where('condition_to_value>=?', $request->getData($request->getMRConditionName())); } $select->where('website_id=?', $request->getWebsiteId()); if ($filter = $request->getData('filter')) { $select->where('filter IN (?)', $filter); } $select->order('dest_country_id DESC'); $select->order('dest_region_id DESC'); $select->order('dest_zip DESC'); $select->order('condition_from_value DESC'); /* pdo has an issue. we cannot use bind */ $newdata = array(); $row = $read->fetchAll($select); if (!empty($row)) { // have found a result or found nothing and at end of list! foreach ($row as $data) { $newdata[] = $data; } break; } } return $newdata; }
public function process(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); if ($request->getLimitMethod()) { $r->setService($request->getLimitMethod()); } if ($request->getDhlId()) { $id = $request->getDhlId(); } else { $id = $this->getConfigData('id'); } $r->setId($id); if ($request->getDhlPassword()) { $password = $request->getDhlPassword(); } else { $password = $this->getConfigData('password'); } $r->setPassword($password); if ($request->getDhlAccount()) { $accountNbr = $request->getDhlAccount(); } else { $accountNbr = $this->getConfigData('account'); } $r->setAccountNbr($accountNbr); if ($request->getDhlShippingKey()) { $shippingKey = $request->getDhlShippingKey(); } else { $shippingKey = $this->getConfigData('shipping_key'); } $r->setShippingKey($shippingKey); if ($request->getDhlShippingIntlKey()) { $shippingKey = $request->getDhlShippingIntlKey(); } else { $shippingKey = $this->getConfigData('shipping_intlkey'); } $r->setShippingIntlKey($shippingKey); if ($request->getDhlShipmentType()) { $shipmentType = $request->getDhlShipmentType(); } else { $shipmentType = $this->getConfigData('shipment_type'); } $r->setShipmentType($shipmentType); if ($request->getDhlDutiable()) { $shipmentDutible = $request->getDhlDutiable(); } else { $shipmentDutible = $this->getConfigData('dutiable'); } $r->setDutiable($shipmentDutible); if ($request->getDhlDutyPaymentType()) { $dutypaytype = $request->getDhlDutyPaymentType(); } else { $dutypaytype = $this->getConfigData('dutypaymenttype'); } $r->setDutyPaymentType($dutypaytype); if ($request->getDhlContentDesc()) { $contentdesc = $request->getDhlContentDesc(); } else { $contentdesc = $this->getConfigData('contentdesc'); } $r->setContentDesc($contentdesc); if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } if ($request->getOrigCountry()) { $origCountry = $request->getOrigCountry(); } else { $origCountry = Mage::getStoreConfig('shipping/origin/country_id', $this->getStore()); } $r->setOrigCountry($origCountry); /* * DHL only accepts weight as a whole number. Maximum length is 3 digits. */ $shippingWeight = round(min(1, $request->getPackageWeight()), 0); $freeMethodWeight = round(min(1, $request->getFreeMethodWeight()), 0); $r->setValue(round($request->getPackageValue(), 2)); $r->setDestStreet(substr($request->getDestStreet(), 0, 35)); $r->setDestCity($request->getDestCity()); $r->setDestCountryId($request->getDestCountryId()); $r->setDestState($request->getDestRegionCode()); $this->_rawRequest = $r; $methods = explode(',', $this->getConfigData('allowed_methods')); $freeMethod = $this->getConfigData('free_method'); $internationcode = $this->getCode('international_searvice'); foreach ($methods as $method) { if ($method == $internationcode && $r->getDestCountryId() != self::USA_COUNTRY_ID || $method != $internationcode && $r->getDestCountryId() == self::USA_COUNTRY_ID) { $weight = $freeMethod == $method ? $freeMethodWeight : $shippingWeight; if ($weight > 0) { $this->_rawRequest->setWeight($weight); $this->_rawRequest->setService($method); $this->_getQuotes(); } else { $this->_dhlRates[$method] = array('term' => $this->getCode('service', $method), 'price_total' => 0); } } } return $this; }
public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); if ($request->getLimitMethod()) { $r->setService($request->getLimitMethod()); } else { $r->setService('ALL'); } if ($request->getAramexUserid()) { $userId = $request->getAramexUserid(); } else { $userId = $this->getConfigData('userid'); } $r->setUserId($userId); /* if ($request->getAramexContainer()) { $container = $request->getAramexContainer(); } else { $container = $this->getConfigData('container'); } $r->setContainer($container); */ if ($request->getAramexSize()) { $size = $request->getAramexSize(); } else { $size = $this->getConfigData('size'); } $r->setSize($size); if ($request->getAramexMachinable()) { $machinable = $request->getAramexMachinable(); } else { $machinable = $this->getConfigData('machinable'); } $r->setMachinable($machinable); if ($request->getOrigPostcode()) { $r->setOrigPostal($request->getOrigPostcode()); } else { $r->setOrigPostal(Mage::getStoreConfig('shipping/origin/postcode')); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } $r->setDestCountryId($destCountry); $countries = Mage::getResourceModel('directory/country_collection')->addCountryIdFilter($destCountry)->load()->getItems(); $country = array_shift($countries); $countryName = $country->getName(); $r->setDestCountryName($countryName); if ($request->getDestCity()) { $r->setDestCity($request->getDestCity()); } if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $r->setWeightPounds($weight); $r->setPackageQty($request->getPackageQty()); $r->setWeightOunces(round(($weight - floor($weight)) * 16, 1)); if ($request->getFreeMethodWeight() != $request->getPackageWeight()) { $r->setFreeMethodWeight($request->getFreeMethodWeight()); } $r->setDestState($request->getDestRegionCode()); $r->setValue($request->getPackageValue()); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); $this->_rawRequest = $r; return $this; }
/** * @param Mage_Shipping_Model_Rate_Request $requestVar * @return array */ private function _submitRequest(Mage_Shipping_Model_Rate_Request $requestVar) { $shipwireAvailableServices = $this->getConfigData('availableservices'); $shipwireUsername = $this->getConfigData('shipwire_email'); $shipwirePassword = $this->getConfigData('shipwire_password'); $orderCurrencyCode = 'USD'; /** * @var $orderCurrency Mage_Directory_Model_Currency */ $orderCurrency = $requestVar->getBaseCurrency(); if (!empty($orderCurrency)) { $orderCurrencyCode = $orderCurrency->getCode(); } $orderNumber = uniqid('magento', TRUE); $shipToAddress1 = $requestVar->getDestStreet(); $shipToCity = $requestVar->getDestCity(); $shipToRegion = $requestVar->getDestRegionCode(); $shipToCountry = $requestVar->getDestCountryId(); $shiptoPostalCode = $requestVar->getDestPostcode(); $requestItems = $requestVar->getAllItems(); $itemXml = $this->_buildRequestItemXml($requestItems); $rateRequestXml = <<<XML <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE RateRequest SYSTEM "http://www.shipwire.com/exec/download/RateRequest.dtd"> <RateRequest currency="{$orderCurrencyCode}"> <Username><![CDATA[{$shipwireUsername}]]></Username> <Password><![CDATA[{$shipwirePassword}]]></Password> <Source>{$this->_version}</Source> <Order id="{$orderNumber}"> <AddressInfo type="ship"> <Address1><![CDATA[{$shipToAddress1}]]></Address1> <City><![CDATA[{$shipToCity}]]></City> <State><![CDATA[{$shipToRegion}]]></State> <Country><![CDATA[{$shipToCountry}]]></Country> <Zip><![CDATA[{$shiptoPostalCode}]]></Zip> </AddressInfo> {$itemXml} </Order> </RateRequest> XML; $curlSession = curl_init(); curl_setopt($curlSession, CURLOPT_URL, $this->_apiEndpoint); curl_setopt($curlSession, CURLOPT_POST, true); curl_setopt($curlSession, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); curl_setopt($curlSession, CURLOPT_POSTFIELDS, $rateRequestXml); curl_setopt($curlSession, CURLOPT_HEADER, false); curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true); curl_setopt($curlSession, CURLOPT_TIMEOUT, 60); $response = curl_exec($curlSession); $emptyRateResult = array(); if (FALSE === $response) { return $emptyRateResult; } $parser = xml_parser_create(); xml_parse_into_struct($parser, $response, $xmlVals, $xmlIndex); xml_parser_free($parser); foreach ($xmlVals as $key) { if ($key['tag'] == 'STATUS') { if ($key['value'] != 'OK') { return $emptyRateResult; } } } $code = array(); $method = array(); $cost = array(); $supportedServices = explode(',', $shipwireAvailableServices); foreach ($xmlVals as $key) { if ($key['tag'] == 'QUOTE' && $key['type'] == 'open' && $key['level'] == 4) { $code[] = $key['attributes']['METHOD']; } if ($key['tag'] == 'SERVICE' && $key['type'] == 'complete' && $key['level'] == 5) { $method[] = $key['value']; } if ($key['tag'] == 'COST' && $key['type'] == 'complete' && $key['level'] == 5) { $cost[] = $key['value']; } } $la = count($code); $lb = count($method); $lc = count($cost); $rateResult = array(); if ($la == $lb && $lb == $lc) { foreach ($code as $index => $value) { if (in_array($value, $supportedServices)) { $rateResult[] = array('code' => $code[$index], 'title' => $method[$index], 'amount' => $cost[$index]); } } } return $rateResult; }
private function _getProductionShipmentFields(Mage_Shipping_Model_Rate_Request $mgrequest) { $regionId = $mgrequest->getRegionId(); $region = Mage::getModel('directory/region')->load($regionId); $request->Shipment->SenderInformation->Address->Name = "Aaron Summer"; //$request->Shipment->SenderInformation->Address->StreetNumber = "1234"; $request->Shipment->SenderInformation->Address->StreetName = $mgrequest->getStreet(); $request->Shipment->SenderInformation->Address->City = $mgrequest->getCity(); $request->Shipment->SenderInformation->Address->Province = $region->getCode(); $request->Shipment->SenderInformation->Address->Country = $mgrequest->getCountryId(); $request->Shipment->SenderInformation->Address->PostalCode = $mgrequest->getPostcode(); $request->Shipment->SenderInformation->Address->PhoneNumber->CountryCode = "1"; $request->Shipment->SenderInformation->Address->PhoneNumber->AreaCode = "905"; $request->Shipment->SenderInformation->Address->PhoneNumber->Phone = substr("123456789", -7); //Populate the Desination Information $request->Shipment->ReceiverInformation->Address->Name = "Aaron Summer"; $request->Shipment->ReceiverInformation->Address->StreetName = $mgrequest->getDestStreet(); $request->Shipment->ReceiverInformation->Address->City = $mgrequest->getDestCity(); $regionId = $mgrequest->getDestRegionId(); $region = Mage::getModel('directory/region')->load($regionId); $request->Shipment->ReceiverInformation->Address->Province = $region->getCode(); $request->Shipment->ReceiverInformation->Address->Country = $mgrequest->getDestCountryId(); $request->Shipment->ReceiverInformation->Address->PostalCode = $mgrequest->getDestPostcode(); $request->Shipment->ReceiverInformation->Address->PhoneNumber->CountryCode = "1"; $request->Shipment->ReceiverInformation->Address->PhoneNumber->AreaCode = "604"; $request->Shipment->ReceiverInformation->Address->PhoneNumber->Phone = substr("123456789", -7); //Future Dated Shipments - YYYY-MM-DD format $request->Shipment->ShipmentDate = Mage::getModel('core/date')->date('Y-m-d'); //Populate the Package Information $request->Shipment->PackageInformation->TotalWeight->Value = $mgrequest->getPackageWeight(); $request->Shipment->PackageInformation->TotalWeight->WeightUnit = "lb"; $request->Shipment->PackageInformation->TotalPieces = $mgrequest->getPackageQty(); $request->Shipment->PackageInformation->ServiceID = "PurolatorExpress"; //Populate the Payment Information $request->Shipment->PaymentInformation->PaymentType = "Sender"; $request->Shipment->PaymentInformation->BillingAccountNumber = $this->BILLING_ACCOUNT; $request->Shipment->PaymentInformation->RegisteredAccountNumber = $this->REGISTERED_ACCOUNT; //Populate the Pickup Information $request->Shipment->PickupInformation->PickupType = "DropOff"; $request->ShowAlternativeServicesIndicator = "true"; //OriginSignatureNotRequired $request->Shipment->PackageInformation->OptionsInformation->Options->OptionIDValuePair->ID = "OriginSignatureNotRequired"; $request->Shipment->PackageInformation->OptionsInformation->Options->OptionIDValuePair->Value = "true"; return $request; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { //pega os dados de entrega /* [dest_country_id] => US [dest_region_id] => 3 [dest_region_code] => AS [dest_street] => teste [dest_city] => São lourenço [dest_postcode] => 43243 [package_value] => 2 [package_value_with_discount] => 2 [package_weight] => 180 [package_qty] => 2 [package_physical_value] => 2 [free_method_weight] => 180 [store_id] => 1 [website_id] => 1 [free_shipping] => 0 [base_subtotal_incl_tax] => 2 [country_id] => US [region_id] => 12 [postcode] => 90034 */ $cep = str_replace('-', '', $request->getDestPostcode()); $this->_condicoes[] = array('pais', 'finset', $request->getDestCountryId()); $this->_condicoes[] = array('estado', 'finset', $request->getDestRegionCode()); $this->_condicoes[] = array('cep_de', 'lteq', $cep); $this->_condicoes[] = array('cep_ate', 'gteq', $cep); $this->_condicoes[] = array('website', 'finset', $request->getWebsiteId()); $this->_condicoes[] = array('cidade', 'like', $request->getDestCity()); $produtoEnviavel = false; foreach ($request->getAllItems() as $item) { /* [item_id] => 10 [quote_id] => 9 [product_id] => 2 [store_id] => 1 [is_virtual] => 0 [sku] => 324 [name] => Teste 2 [free_shipping] => [weight] => 90.0000 [qty] => 1 [price] => 1 [base_price] => 1 [base_row_total] => 1 [row_weight] => 90 [product_type] => simple */ $pesoTotal = 0; //Verifica o tipo de produto if ($item->getProductType() != Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL && $item->getProductType() != 'downloadable') { $produtoEnviavel = true; //Se calculo for por produto, adiciona o peso de cada produto a condição if ($this->getConfigData('fretePorProduto')) { $this->_condicoes[] = array('peso_de', 'lteq', $item->getWeight()); $this->_condicoes[] = array('peso_ate', 'gteq', $item->getWeight()); } //pega o peso total dos produtos $pesoTotal += $item->getWeight() * $item->getQty(); $quantidadeTotal += $item->getQty(); } } //caso o frete não seja por produto, adiciona a condição do peso total dos produtos if (!$this->getConfigData('fretePorProduto')) { $this->_condicoes[] = array('peso_de', 'lteq', $pesoTotal); $this->_condicoes[] = array('peso_ate', 'gteq', $pesoTotal); } if ($produtoEnviavel) { $result = Mage::getModel('shipping/rate_result'); //verifica quais regras se encaixam nas condições adicionadas acima $regras = $this->getRegras(); foreach ($regras as $regra) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->_code); $method->setMethodTitle($regra->getTitulo()); if ($this->getConfigData('fretePorProduto')) { $method->setPrice($regra->getValor() * $quantidadeTotal); $method->setCost($regra->getCusto() * $quantidadeTotal); } else { $method->setPrice($regra->getValor()); $method->setCost($regra->getCusto()); } $result->append($method); } return $result; } else { //se não houver nenhum produto que possa ser enviado, finaliza o modelo return true; } }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { try { $helper = Mage::helper('localexpress_shipping'); $fields = $helper->getFields(); // skip if not processable if (!$helper->isProcessable()) { return false; } // return $result = Mage::getModel('shipping/rate_result'); $human_id = Mage::getSingleton('checkout/session')->getData('localexpress_shipping_human_id'); // collect order information $quote = Mage::getSingleton('checkout/session')->getQuote(); $firstname = $quote->getShippingAddress()->getFirstname(); $lastname = $quote->getShippingAddress()->getLastname(); $address = $request->getDestStreet(); $city = $request->getDestCity(); $zip = $request->getDestPostcode(); $country_iso639_2 = $request->getDestCountryId(); $country = Mage::getModel('directory/country')->loadByCode($country_iso639_2); $country_name = $country->getName(); $store_currency = Mage::app()->getStore()->getCurrentCurrencyCode(); // get order totals $order_info = Localexpress_Shipping_Helper_Data::getOrderTotals($request, Localexpress_Shipping_Helper_Data::catageryOnly(), Localexpress_Shipping_Helper_Data::attributesOnly()); if ($order_info['notPossible']) { return false; } // addresses $addr_origin = Localexpress_Shipping_Helper_Data::getAddressOrigin(); $addr_dest = Localexpress_Shipping_Helper_Data::buildAddress($country_iso639_2, $country_name, $address, $zip, $firstname . " " . $lastname, $city); //TODO: demension attribute!! $dimensions = Localexpress_Shipping_Helper_Data::buildDimensions(1, 1, 1); // request quote $available = $helper->shipmentAvailable($country_iso639_2, $address, $zip); if (!$available) { return false; } $quote = $helper->shipmentQuote($order_info["qty"], $order_info["weight"], $order_info["price"], $store_currency, $dimensions, $addr_origin, $addr_dest, "Quote request!", false, $human_id); // invalid server response if ($quote["info"]["http_code"] != 201 && $quote["info"]["http_code"] != 200) { return false; } // list details $human_id = Mage::getSingleton('checkout/session')->setData('localexpress_shipping_human_id', $quote['body']->shipment_quote->human_id); $carrier_name = $fields["title"]; $service_name = $fields["service_name"]; $service_id = "1"; $service_price = $quote["body"]->shipment_quote->price; // build response $method = Mage::getModel('shipping/rate_result_method'); // carrier $method->setCarrier(Localexpress_Shipping_Helper_Data::NAME); $method->setCarrierTitle($fields['title'] . " (" . $carrier_name . ")"); // methods $method->setMethod(Localexpress_Shipping_Helper_Data::SERVICE_NAME . '_' . $service_id); $method->setMethodTitle($service_name); $method->setPrice($service_price); $method->setCost($service_price); $result->append($method); return $result; } catch (\Exception $e) { Localexpress_Shipping_Helper_Data::log($e->getMessage()); Localexpress_Shipping_Helper_Data::log($e->getTraceAsString()); // halt order checkout on error die; return false; } }