Example #1
0
 /**
  * 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;
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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;
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 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;
 }
Example #8
0
 /**
  * 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;
 }
Example #9
0
 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;
 }
Example #10
0
 /**
  * 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;
 }
Example #11
0
 /**
  * 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;
 }
Example #12
0
 /**
  * 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;
 }
Example #14
0
 /**
  * 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);
     }
 }