/** * Collect rates for this shipping method based on information in $request * * @param Mage_Shipping_Model_Rate_Request $data * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigData('active')) { return false; } $result = Mage::getModel('shipping/rate_result'); $collection = Mage::getResourceModel('amtable/method_collection')->addFieldToFilter('is_active', 1)->addStoreFilter($request->getStoreId())->addCustomerGroupFilter($this->getCustomerGroupId($request))->setOrder('pos'); $rates = Mage::getModel('amtable/rate')->findBy($request, $collection); foreach ($collection as $customMethod) { // create new instance of method rate $method = Mage::getModel('shipping/rate_result_method'); // record carrier information $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); // record method information $method->setMethod($this->_code . $customMethod->getId()); $method->setMethodTitle(Mage::helper('amtable')->__($customMethod->getName())); if (isset($rates[$customMethod->getId()])) { $method->setCost($rates[$customMethod->getId()]); $method->setPrice($rates[$customMethod->getId()]); // add this rate to the result $result->append($method); } } return $result; }
/** * Retrieve all methods for supplied shipping data * * @todo make it ordered * @param Mage_Shipping_Model_Shipping_Method_Request $data * @return Mage_Shipping_Model_Shipping */ public function collectRatesWithAddress(Mage_Shipping_Model_Rate_Request $request, $address) { $storeId = $request->getStoreId(); if (!$request->getOrig()) { $request->setCountryId(Mage::getStoreConfig(Mage_Shipping_Model_Config::XML_PATH_ORIGIN_COUNTRY_ID, $storeId))->setRegionId(Mage::getStoreConfig(Mage_Shipping_Model_Config::XML_PATH_ORIGIN_REGION_ID, $storeId))->setCity(Mage::getStoreConfig(Mage_Shipping_Model_Config::XML_PATH_ORIGIN_CITY, $storeId))->setPostcode(Mage::getStoreConfig(Mage_Shipping_Model_Config::XML_PATH_ORIGIN_POSTCODE, $storeId)); } $limitCarrier = $request->getLimitCarrier(); if (!$limitCarrier) { $carriers = Mage::getStoreConfig('carriers', $storeId); foreach ($carriers as $carrierCode => $carrierConfig) { $this->collectCarrierRatesWithAddress($carrierCode, $request, $address); } } else { if (!is_array($limitCarrier)) { $limitCarrier = array($limitCarrier); } foreach ($limitCarrier as $carrierCode) { $carrierConfig = Mage::getStoreConfig('carriers/' . $carrierCode, $storeId); if (!$carrierConfig) { continue; } $this->collectCarrierRatesWithAddress($carrierCode, $request, $address); } } return $this; }
public function collectRates2(Mage_Shipping_Model_Rate_Request $request) { $storeId = $request->getStoreId(); if (!$request->getOrig()) { $request->setCountryId(Mage::getStoreConfig(self::XML_PATH_STORE_COUNTRY_ID, $request->getStore()))->setRegionId(Mage::getStoreConfig(self::XML_PATH_STORE_REGION_ID, $request->getStore()))->setCity(Mage::getStoreConfig(self::XML_PATH_STORE_CITY, $request->getStore()))->setPostcode(Mage::getStoreConfig(self::XML_PATH_STORE_ZIP, $request->getStore())); } $limitCarrier = $request->getLimitCarrier(); $carriers = Mage::getStoreConfig('carriers', $storeId); foreach ($carriers as $carrierCode => $carrierConfig) { if (!in_array($carrierCode, $limitCarrier)) { $this->collectCarrierRates($carrierCode, $request); } //echo $carrierCode; } return $this; }
/** * Prepare and set request to this instance * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Usa_Model_Shipping_Carrier_Fedex */ 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->getFedexAccount()) { $account = $request->getFedexAccount(); } else { $account = $this->getConfigData('account'); } $r->setAccount($account); if ($request->getFedexDropoff()) { $dropoff = $request->getFedexDropoff(); } else { $dropoff = $this->getConfigData('dropoff'); } $r->setDropoffType($dropoff); if ($request->getFedexPackaging()) { $packaging = $request->getFedexPackaging(); } else { $packaging = $this->getConfigData('packaging'); } $r->setPackaging($packaging); if ($request->getOrigCountry()) { $origCountry = $request->getOrigCountry(); } else { $origCountry = Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_COUNTRY_ID, $request->getStoreId()); } $r->setOrigCountry(Mage::getModel('directory/country')->load($origCountry)->getIso2Code()); if ($request->getOrigPostcode()) { $r->setOrigPostal($request->getOrigPostcode()); } else { $r->setOrigPostal(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_ZIP, $request->getStoreId())); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } $r->setDestCountry(Mage::getModel('directory/country')->load($destCountry)->getIso2Code()); if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } else { } $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $r->setWeight($weight); if ($request->getFreeMethodWeight() != $request->getPackageWeight()) { $r->setFreeMethodWeight($request->getFreeMethodWeight()); } $r->setValue($request->getPackagePhysicalValue()); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); $r->setMeterNumber($this->getConfigData('meter_number')); $r->setKey($this->getConfigData('key')); $r->setPassword($this->getConfigData('password')); $r->setIsReturn($request->getIsReturn()); $r->setBaseSubtotalInclTax($request->getBaseSubtotalInclTax()); $this->_rawRequest = $r; return $this; }
/** * Prepare and set request to this instance * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Usa_Model_Shipping_Carrier_Usps */ 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->getUspsUserid()) { $userId = $request->getUspsUserid(); } else { $userId = $this->getConfigData('userid'); } $r->setUserId($userId); if ($request->getUspsContainer()) { $container = $request->getUspsContainer(); } else { $container = $this->getConfigData('container'); } $r->setContainer($container); if ($request->getUspsSize()) { $size = $request->getUspsSize(); } else { $size = $this->getConfigData('size'); } $r->setSize($size); if ($request->getGirth()) { $girth = $request->getGirth(); } else { $girth = $this->getConfigData('girth'); } $r->setGirth($girth); if ($request->getHeight()) { $height = $request->getHeight(); } else { $height = $this->getConfigData('height'); } $r->setHeight($height); if ($request->getLength()) { $length = $request->getLength(); } else { $length = $this->getConfigData('length'); } $r->setLength($length); if ($request->getWidth()) { $width = $request->getWidth(); } else { $width = $this->getConfigData('width'); } $r->setWidth($width); if ($request->getUspsMachinable()) { $machinable = $request->getUspsMachinable(); } else { $machinable = $this->getConfigData('machinable'); } $r->setMachinable($machinable); if ($request->getOrigPostcode()) { $r->setOrigPostal($request->getOrigPostcode()); } else { $r->setOrigPostal(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_ZIP, $request->getStoreId())); } if ($request->getOrigCountryId()) { $r->setOrigCountryId($request->getOrigCountryId()); } else { $r->setOrigCountryId(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_COUNTRY_ID, $request->getStoreId())); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } $r->setDestCountryId($destCountry); if (!$this->_isUSCountry($destCountry)) { $r->setDestCountryName($this->_getCountryName($destCountry)); } if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $r->setWeightPounds(floor($weight)); $r->setWeightOunces(round(($weight - floor($weight)) * self::OUNCES_POUND, 1)); if ($request->getFreeMethodWeight() != $request->getPackageWeight()) { $r->setFreeMethodWeight($request->getFreeMethodWeight()); } $r->setValue($request->getPackageValue()); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); $r->setBaseSubtotalInclTax($request->getBaseSubtotalInclTax()); $this->_rawRequest = $r; return $this; }
/** * Prepare and set request to this instance * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Usa_Model_Shipping_Carrier_Ups */ public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); if ($request->getLimitMethod()) { $r->setAction($this->getCode('action', 'single')); $r->setProduct($request->getLimitMethod()); } else { $r->setAction($this->getCode('action', 'all')); $r->setProduct('GND' . $this->getConfigData('dest_type')); } if ($request->getUpsPickup()) { $pickup = $request->getUpsPickup(); } else { $pickup = $this->getConfigData('pickup'); } $r->setPickup($this->getCode('pickup', $pickup)); if ($request->getUpsContainer()) { $container = $request->getUpsContainer(); } else { $container = $this->getConfigData('container'); } $r->setContainer($this->getCode('container', $container)); if ($request->getUpsDestType()) { $destType = $request->getUpsDestType(); } else { $destType = $this->getConfigData('dest_type'); } $r->setDestType($this->getCode('dest_type', $destType)); if ($request->getOrigCountry()) { $origCountry = $request->getOrigCountry(); } else { $origCountry = Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_COUNTRY_ID, $request->getStoreId()); } $r->setOrigCountry(Mage::getModel('directory/country')->load($origCountry)->getIso2Code()); if ($request->getOrigRegionCode()) { $origRegionCode = $request->getOrigRegionCode(); } else { $origRegionCode = Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_REGION_ID, $request->getStoreId()); } if (is_numeric($origRegionCode)) { $origRegionCode = Mage::getModel('directory/region')->load($origRegionCode)->getCode(); } $r->setOrigRegionCode($origRegionCode); if ($request->getOrigPostcode()) { $r->setOrigPostal($request->getOrigPostcode()); } else { $r->setOrigPostal(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_ZIP, $request->getStoreId())); } if ($request->getOrigCity()) { $r->setOrigCity($request->getOrigCity()); } else { $r->setOrigCity(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_CITY, $request->getStoreId())); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } //for UPS, puero rico state for US will assume as puerto rico country if ($destCountry == self::USA_COUNTRY_ID && ($request->getDestPostcode() == '00912' || $request->getDestRegionCode() == self::PUERTORICO_COUNTRY_ID)) { $destCountry = self::PUERTORICO_COUNTRY_ID; } // For UPS, Guam state of the USA will be represented by Guam country if ($destCountry == self::USA_COUNTRY_ID && $request->getDestRegionCode() == self::GUAM_REGION_CODE) { $destCountry = self::GUAM_COUNTRY_ID; } $r->setDestCountry(Mage::getModel('directory/country')->load($destCountry)->getIso2Code()); $r->setDestRegionCode($request->getDestRegionCode()); if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } else { } $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $weight = $this->_getCorrectWeight($weight); $r->setWeight($weight); if ($request->getFreeMethodWeight() != $request->getPackageWeight()) { $r->setFreeMethodWeight($request->getFreeMethodWeight()); } $r->setValue($request->getPackageValue()); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); if ($request->getUpsUnitMeasure()) { $unit = $request->getUpsUnitMeasure(); } else { $unit = $this->getConfigData('unit_of_measure'); } $r->setUnitMeasure($unit); $r->setIsReturn($request->getIsReturn()); $this->_rawRequest = $r; return $this; }
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; }
/** * Retrieve all methods for supplied shipping data * * @todo make it ordered * @param Mage_Shipping_Model_Shipping_Method_Request $data * @return Mage_Shipping_Model_Shipping */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$request->getOrig()) { $request->setCountryId(Mage::getStoreConfig('shipping/origin/country_id', $request->getStore()))->setRegionId(Mage::getStoreConfig('shipping/origin/region_id', $request->getStore()))->setCity(Mage::getStoreConfig('shipping/origin/city', $request->getStore()))->setPostcode(Mage::getStoreConfig('shipping/origin/postcode', $request->getStore())); } $limitCarrier = $request->getLimitCarrier(); if (!$limitCarrier) { $carriers = Mage::getStoreConfig('carriers', $request->getStoreId()); foreach ($carriers as $carrierCode => $carrierConfig) { $this->collectCarrierRates($carrierCode, $request); } } else { if (!is_array($limitCarrier)) { $limitCarrier = array($limitCarrier); } foreach ($limitCarrier as $carrierCode) { $carrierConfig = Mage::getStoreConfig('carriers/' . $carrierCode, $request->getStoreId()); if (!$carrierConfig) { continue; } $this->collectCarrierRates($carrierCode, $request); } } return $this; }
public function getRate(Mage_Shipping_Model_Rate_Request $request) { $read = $this->_getReadAdapter(); $postcode = $request->getDestPostcode(); $table = $this->getMainTable(); $storeId = $request->getStoreId(); $insuranceStep = (double) Mage::getStoreConfig('carriers/eparcel/insurance_step', $storeId); $insuranceCostPerStep = (double) Mage::getStoreConfig('carriers/eparcel/insurance_cost_per_step', $storeId); $signatureRequired = Mage::getStoreConfigFlag('carriers/eparcel/signature_required', $storeId); if ($signatureRequired) { $signatureCost = (double) Mage::getStoreConfig('carriers/eparcel/signature_cost', $storeId); } else { $signatureCost = 0; } for ($j = 0; $j < 5; $j++) { $select = $read->select()->from($table); // Support for Multi Warehouse Extension. if ($request->getWarehouseId() > 0) { $select->where('stock_id = ?', $request->getWarehouseId()); } switch ($j) { case 0: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_region_id=? ", $request->getDestRegionId()) . $read->quoteInto(" AND dest_zip=?) ", $postcode)); break; case 1: $select->where($read->quoteInto(" (dest_country_id=? ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_region_id=? AND dest_zip='0000') ", $request->getDestRegionId())); break; case 2: $select->where($read->quoteInto(" (dest_country_id=? AND dest_region_id='0' AND dest_zip='0000') ", $request->getDestCountryId())); break; case 3: $select->where($read->quoteInto(" (dest_country_id=? AND dest_region_id='0' ", $request->getDestCountryId()) . $read->quoteInto(" AND dest_zip=?) ", $postcode)); break; case 4: $select->where(" (dest_country_id='0' AND dest_region_id='0' AND dest_zip='0000')"); break; } if (is_array($request->getConditionName())) { $i = 0; foreach ($request->getConditionName() as $conditionName) { if ($i == 0) { $select->where('condition_name=?', $conditionName); } else { $select->orWhere('condition_name=?', $conditionName); } $select->where('condition_from_value<=?', $request->getData($conditionName)); $select->where('condition_to_value>=?', $request->getData($conditionName)); $i++; } } else { $select->where('condition_name=?', $request->getConditionName()); $select->where('condition_from_value<=?', $request->getData($request->getConditionName())); $select->where('condition_to_value>=?', $request->getData($request->getConditionName())); } $select->where('website_id=?', $request->getWebsiteId()); $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) && $j < 5) { // have found a result or found nothing and at end of list! foreach ($row as $data) { try { $price = (double) $data['price']; // add per-Kg cost $conditionValue = (double) $request->getData($request->getConditionName()); $price += (double) $data['price_per_kg'] * $conditionValue; // add signature cost $price += $signatureCost; // add version without insurance $data['price'] = (string) $price; $newdata[] = $data; if (Mage::getStoreConfig('carriers/eparcel/insurance_enable', $storeId)) { // add version with insurance // work out how many insurance 'steps' we have $steps = ceil($request->getPackageValue() / $insuranceStep); // add on number of 'steps' multiplied by the // insurance cost per step $insuranceCost = $insuranceCostPerStep * $steps; $price += $insuranceCost; $data['price'] = (string) $price; $data['delivery_type'] .= " with TransitCover"; $newdata[] = $data; } } catch (Exception $e) { Mage::log($e->getMessage()); } } break; } } return $newdata; }
/** * Collect rates of given carrier * * @param string $carrierCode * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Shipping */ public function collectCarrierRates($carrierCode, $request) { /* @var $carrier Mage_Shipping_Model_Carrier_Abstract */ $carrier = $this->getCarrierByCode($carrierCode, $request->getStoreId()); if (!$carrier) { return $this; } $carrier->setActiveFlag($this->_availabilityConfigField); $result = $carrier->checkAvailableShipCountries($request); if (false !== $result && !$result instanceof Mage_Shipping_Model_Rate_Result_Error) { $result = $carrier->proccessAdditionalValidation($request); } /* * Result will be false if the admin set not to show the shipping module * if the delivery country is not within specific countries */ if (false !== $result) { if (!$result instanceof Mage_Shipping_Model_Rate_Result_Error) { if ($carrier->getConfigData('shipment_requesttype')) { $packages = $this->composePackagesForCarrier($carrier, $request); if (!empty($packages)) { $sumResults = array(); foreach ($packages as $weight => $packageCount) { //clone carrier for multi-requests $carrierObj = clone $carrier; $request->setPackageWeight($weight); $result = $carrierObj->collectRates($request); if (!$result) { return $this; } else { $result->updateRatePrice($packageCount); } $sumResults[] = $result; } if (!empty($sumResults) && count($sumResults) > 1) { $result = array(); foreach ($sumResults as $res) { if (empty($result)) { $result = $res; continue; } foreach ($res->getAllRates() as $method) { foreach ($result->getAllRates() as $resultMethod) { if ($method->getMethod() == $resultMethod->getMethod()) { $resultMethod->setPrice($method->getPrice() + $resultMethod->getPrice()); continue; } } } } } } else { $result = $carrier->collectRates($request); } } else { $result = $carrier->collectRates($request); } if (!$result) { return $this; } } if ($carrier->getConfigData('showmethod') == 0 && $result->getError()) { return $this; } // sort rates by price if (method_exists($result, 'sortRatesByPrice')) { $result->sortRatesByPrice(); } $this->getResult()->append($result); } return $this; }
/** * Collect rates of given carrier * * @param string $carrierCode * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Shipping */ public function collectCarrierRates($carrierCode, $request) { /* @var $carrier Mage_Shipping_Model_Carrier_Abstract */ $carrier = $this->getCarrierByCode($carrierCode, $request->getStoreId()); if (!$carrier) { return $this; } $carrier->setActiveFlag($this->_availabilityConfigField); $result = $carrier->checkAvailableShipCountries($request); if (false !== $result && !$result instanceof Mage_Shipping_Model_Rate_Result_Error) { $result = $carrier->processAdditionalValidation($request); } /* * Result will be false if the admin set not to show the shipping module * if the delivery country is not within specific countries */ if (false !== $result) { if (!$result instanceof Mage_Shipping_Model_Rate_Result_Error) { $result = $carrier->collectRates($request); if (!$result) { return $this; } } if ($carrier->getConfigData('showmethod') == 0 && $result->getError()) { return $this; } // sort rates by price if (method_exists($result, 'sortRatesByPrice')) { $result->sortRatesByPrice(); } $this->getResult()->append($result); } return $this; }
/** * Retrieve all methods for supplied shipping data * * @todo make it ordered * @param Mage_Shipping_Model_Shipping_Method_Request $data * @return Mage_Shipping_Model_Shipping */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { Mage::dispatchEvent(self::$_eventPrefix . '_collectRates_before', array(self::$_eventObject => $this, 'request' => $request)); //DROP-111 $storeId = ''; if (Mage::app()->getStore()->isAdmin()) { $storeId = $request->getStoreId(); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Dropcommon', 'carriers/dropship/active', $storeId)) { if (Mage::helper('dropcommon')->calculateDropshipRates($storeId)) { //DROP-98 if (!Mage::registry('dropcommon_shipmodel')) { $model = Mage::getModel('dropcommon/shipping_shipping'); Mage::register('dropcommon_shipmodel', $model); } Mage::registry('dropcommon_shipmodel')->resetResult(); return Mage::registry('dropcommon_shipmodel')->collectRates($request); } } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Dropship', 'carriers/dropship/active', $storeId)) { if (Mage::helper('dropcommon')->calculateDropshipRates()) { //DROP-98 if (!Mage::registry('dropship_shipmodel')) { $model = Mage::getModel('dropship/shipping_shipping'); Mage::register('dropship_shipmodel', $model); } Mage::registry('dropship_shipmodel')->resetResult(); return Mage::registry('dropship_shipmodel')->collectRates($request); } } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Rgshipping', 'shipping/rgshipping/active')) { if (!Mage::registry('rgshipping_shipmodel')) { $model = Mage::getModel('rgshipping/shipping_shipping'); Mage::register('rgshipping_shipmodel', $model); } Mage::registry('rgshipping_shipmodel')->resetResult(); return Mage::registry('rgshipping_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Shipmanager', 'carriers/shipmanager/active', $storeId)) { if (!Mage::registry('shipmanager_shipmodel')) { $model = Mage::getModel('shipmanager/shipping_shipping'); Mage::register('shipmanager_shipmodel', $model); } Mage::registry('shipmanager_shipmodel')->resetResult(); return Mage::registry('shipmanager_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Shippingoverride2', 'shipping/shippingoverride2/active')) { if (!Mage::registry('override2_shipmodel')) { $model = Mage::getModel('shippingoverride2/shipping_shipping'); Mage::register('override2_shipmodel', $model); } Mage::registry('override2_shipmodel')->resetResult(); return Mage::registry('override2_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Freightrate', 'carriers/freightrate/active')) { if (!Mage::registry('freightrate_shipmodel')) { $model = Mage::getModel('freightrate/shipping_shipping'); Mage::register('freightrate_shipmodel', $model); } Mage::registry('freightrate_shipmodel')->resetResult(); return Mage::registry('freightrate_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Wsafreightcommon', 'shipping/wsafreightcommon/active')) { if (!Mage::registry('wsafreightcommon_shipmodel')) { $model = Mage::getModel('wsafreightcommon/shipping_shipping'); Mage::register('wsafreightcommon_shipmodel', $model); } Mage::registry('wsafreightcommon_shipmodel')->resetResult(); return Mage::registry('wsafreightcommon_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Estesfreight', 'carriers/estesfreight/active')) { if (!Mage::registry('estes_shipmodel')) { $model = Mage::getModel('estesfreight/shipping_shipping'); Mage::register('estes_shipmodel', $model); } Mage::registry('estes_shipmodel')->resetResult(); return Mage::registry('estes_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Conwayfreight', 'carriers/conwayfreight/active')) { if (!Mage::registry('conway_shipmodel')) { $model = Mage::getModel('conwayfreight/shipping_shipping'); Mage::register('conway_shipmodel', $model); } Mage::registry('conway_shipmodel')->resetResult(); return Mage::registry('conway_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Wsafedexfreight', 'carriers/wsafedexfreight/active')) { if (!Mage::registry('wsafedexfreight_shipmodel')) { $model = Mage::getModel('wsafedexfreight/shipping_shipping'); Mage::register('wsafedexfreight_shipmodel', $model); } Mage::registry('wsafedexfreight_shipmodel')->resetResult(); return Mage::registry('wsafedexfreight_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Usslogistics', 'carriers/usslogistics/active')) { if (!Mage::registry('usslogistics_shipmodel')) { $model = Mage::getModel('usslogistics/shipping_shipping'); Mage::register('usslogistics_shipmodel', $model); } Mage::registry('usslogistics_shipmodel')->resetResult(); return Mage::registry('usslogistics_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Abffreight', 'carriers/abffreight/active')) { if (!Mage::registry('abffreight_shipmodel')) { $model = Mage::getModel('abffreight/shipping_shipping'); Mage::register('abffreight_shipmodel', $model); } Mage::registry('abffreight_shipmodel')->resetResult(); return Mage::registry('abffreight_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Wsaupsfreight', 'carriers/wsaupsfreight/active')) { if (!Mage::registry('wsaupfreight_shipmodel')) { $model = Mage::getModel('wsaupsfreight/shipping_shipping'); Mage::register('wsaupfreight_shipmodel', $model); } Mage::registry('wsaupfreight_shipmodel')->resetResult(); return Mage::registry('wsaupfreight_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Yrcfreight', 'carriers/yrcfreight/active')) { if (!Mage::registry('yrc_shipmodel')) { $model = Mage::getModel('yrcfreight/shipping_shipping'); Mage::register('yrc_shipmodel', $model); } Mage::registry('yrc_shipmodel')->resetResult(); return Mage::registry('yrc_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Rlfreight', 'carriers/rlfreight/active')) { if (!Mage::registry('rlfreight_shipmodel')) { $model = Mage::getModel('rlfreight/shipping_shipping'); Mage::register('rlfreight_shipmodel', $model); } Mage::registry('rlfreight_shipmodel')->resetResult(); return Mage::registry('rlfreight_shipmodel')->collectRates($request); } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Handlingproduct', 'shipping/handlingproduct/active')) { if (!Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Shipusa', 'shipping/shipusa/active')) { if (Mage::registry('handlingproduct_shipmodel')) { Mage::registry('handlingproduct_shipmodel')->resetResult(); } } } // This method of handling rewrites is now deprecated in favour of using event logic for handling matrix // Only remains in case Handling Matrix code has not been updated if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Handlingmatrix', 'shipping/handlingmatrix/active') && Mage::helper('wsacommon')->getNumericExtensionVersion('handlingmatrix') < 100) { if (Mage::registry('handlingmatrix_shipmodel')) { Mage::registry('handlingmatrix_shipmodel')->resetResult(); } } if (Mage::helper('wsacommon')->isModuleEnabled('Webshopapps_Insurance', 'shipping/insurance/active')) { if (Mage::registry('insurance_shipmodel')) { Mage::registry('insurance_shipmodel')->resetResult(); } } parent::collectRates($request); Mage::dispatchEvent(self::$_eventPrefix . '_collectRates_after', array(self::$_eventObject => $this, 'request' => $request)); return $this; }
/** * Prepare and set request to this instance * * @param Mage_Shipping_Model_Rate_Request $request * @return Curkle_EasyPost_Model_Carrier_Easypost */ public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); if ($request->getOrigCountry()) { $origCountry = $request->getOrigCountry(); } else { $origCountry = Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_COUNTRY_ID, $request->getStoreId()); } $r->setOrigCountry(Mage::getModel('directory/country')->load($origCountry)->getIso2Code()); if ($request->getOrigRegionCode()) { $origRegionCode = $request->getOrigRegionCode(); } else { $origRegionCode = Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_REGION_ID, $request->getStoreId()); } if (is_numeric($origRegionCode)) { $origRegionCode = Mage::getModel('directory/region')->load($origRegionCode)->getCode(); } $r->setOrigRegionCode($origRegionCode); if ($request->getOrigPostcode()) { $r->setOrigPostal($request->getOrigPostcode()); } else { $r->setOrigPostal(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_ZIP, $request->getStoreId())); } if ($request->getOrigCity()) { $r->setOrigCity($request->getOrigCity()); } else { $r->setOrigCity(Mage::getStoreConfig(Mage_Shipping_Model_Shipping::XML_PATH_STORE_CITY, $request->getStoreId())); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } $r->setDestCountry(Mage::getModel('directory/country')->load($destCountry)->getIso2Code()); $r->setDestRegionCode($request->getDestRegionCode()); if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } else { } $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $weight = $this->_getCorrectWeight($weight); $r->setWeight($weight); if ($request->getFreeMethodWeight() != $request->getPackageWeight()) { $r->setFreeMethodWeight($request->getFreeMethodWeight()); } $r->setValue($request->getPackageValue()); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); if ($request->getUpsUnitMeasure()) { $unit = $request->getUpsUnitMeasure(); } else { $unit = $this->getConfigData('unit_of_measure'); } $r->setUnitMeasure($unit); $r->setIsReturn($request->getIsReturn()); $r->setBaseSubtotalInclTax($request->getBaseSubtotalInclTax()); $this->_rawRequest = $r; return $this; }
/** * We calculate the shipping price based on the price / rate mentioned in * the rates table. If a "markup_type" (percent) indicated we travel to DPD WS * to calculate the final price based on the shipping cost with * his ws. If the price / percentage is less than zero indicates that the rate is not available. * * @param array $rate * @param Mage_Shipping_Model_Rate_Request $request * * @return array|boolean */ protected function _calculateDPDPrice(array $rate, Mage_Shipping_Model_Rate_Request $request) { if (!$rate['markup_type']) { if ($rate['price'] >= 0) { return $rate['price']; } else { return false; } } $apiParams = $this->_getWsHelper()->getShipmentParams($request->getStoreId()); $apiParams['method'] = Zitec_Dpd_Api_Configs::METHOD_SHIPMENT_CALCULATE_PRICE; try { $dpdApi = new Zitec_Dpd_Api($apiParams); $calculatePrice = $dpdApi->getApiMethodObject(); $postCode = Mage::helper('zitec_dpd/postcode_search')->extractPostCodeForShippingRequest($request); $calculatePrice->setReceiverAddress($request->getDestStreet(), $request->getDestCity(), $postCode, $request->getDestCountryId())->addParcel($request->getPackageWeight())->setShipmentServiceCode($rate['method']); $insurance = Mage::helper('zitec_dpd')->extractInsuranceValuesByRequest($request); $calculatePrice = $calculatePrice->setAdditionalHighInsurance($insurance['goodsValue'], $insurance['currency'], $insurance['content']); $calculatePrice->execute(); } catch (Exception $e) { $this->_getHelper()->log("An error occurred whilst calculating the DPD price for the shipment {$e->getMessage()}"); return false; } $response = $calculatePrice->getCalculatePriceResponse(); if ($response->hasError()) { $this->_getHelper()->log("DPD returned the following error whilst attempting to calculate the price of a shipment: {$response->getErrorText()}"); return false; } if ($request->getBaseCurrency()->getCode() == $response->getCurrency()) { $dpdPrice = $response->getAmount(); } else { if ($request->getBaseCurrency()->getCode() == $response->getCurrencyLocal()) { $dpdPrice = $response->getAmountLocal(); } else { $this->_getHelper()->log("An error occurred whilst calculating the price of a shipment. The currency of the shipment ({$request->getBaseCurrency()->getCode()}) does not correspond to the currency ({$response->getCurrency()}) or the local currency ({$response->getCurrencyLocal()}) used by DPD. "); return false; } } if ($rate['markup_type'] == 1) { return $dpdPrice * (1 + $rate['price'] / 100); } else { return $dpdPrice + round(floatval($rate['price']), 2); } }