public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } $result = Mage::getModel('shipping/rate_result'); $rates = $this->getRate($request); if (is_array($rates)) { foreach ($rates as $rate) { if (!empty($rate) && $rate['price'] >= 0) { /** @var Mage_Shipping_Model_Rate_Result_Method $method */ $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('eparcel'); $method->setCarrierTitle($this->getConfigData('title')); if ($this->_getChargeCode($rate)) { $_method = strtolower(str_replace(' ', '_', $this->_getChargeCode($rate))); } else { $_method = strtolower(str_replace(' ', '_', $rate['delivery_type'])); } $method->setMethod($_method); if ($this->getConfigData('carriers/eparcel/name')) { $method->setMethodTitle($this->getConfigData('carriers/eparcel/name')); } else { $method->setMethodTitle($rate['delivery_type']); } $method->setMethodChargeCodeIndividual($rate['charge_code_individual']); $method->setMethodChargeCodeBusiness($rate['charge_code_business']); $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']); $method->setPrice($shippingPrice); $method->setCost($rate['cost']); $method->setDeliveryType($rate['delivery_type']); $result->append($method); } } } else { if (!empty($rates) && $rates['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('eparcel'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); $method->setMethodChargeCodeIndividual($rates['charge_code_individual']); $method->setMethodChargeCodeBusiness($rates['charge_code_business']); $shippingPrice = $this->getFinalPriceWithHandlingFee($rates['price']); $method->setPrice($shippingPrice); $method->setCost($rates['cost']); $method->setDeliveryType($rates['delivery_type']); $result->append($method); } } return $result; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } $result = Mage::getModel('shipping/rate_result'); $rates = $this->getRate($request); if (is_array($rates)) { foreach ($rates as $rate) { if (!empty($rate) && $rate['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('eparcel'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($rate['delivery_type']); $method->setMethodTitle($rate['delivery_type']); $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']); $method->setPrice($shippingPrice); $method->setCost($rate['cost']); $method->setDeliveryType($rate['delivery_type']); $result->append($method); } } } else { if (!empty($rates) && $rates['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('eparcel'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); $shippingPrice = $this->getFinalPriceWithHandlingFee($rates['price']); $method->setPrice($shippingPrice); $method->setCost($rates['cost']); $method->setDeliveryType($rates['delivery_type']); $result->append($method); } } return $result; }
/** * Enter description here... * * @param Mage_Shipping_Model_Rate_Request $data * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name')); } $result = Mage::getModel('shipping/rate_result'); $rate = $this->getRate($request); if (!empty($rate) && $rate['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('tablerate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); $shippingPrice = $rate['price'] + $this->getConfigData('handling_fee'); $method->setPrice($shippingPrice); $method->setCost($rate['cost']); $result->append($method); } return $result; }
/** * Enter description here... * * @param Mage_Shipping_Model_Rate_Request $data * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } // exclude Virtual products price from Package value if pre-configured if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getProduct()->isVirtual()) { $request->setPackageValue($request->getPackageValue() - $child->getBaseRowTotal()); } } } elseif ($item->getProduct()->isVirtual()) { $request->setPackageValue($request->getPackageValue() - $item->getBaseRowTotal()); } } } // Free shipping by qty $freeQty = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeQty += $item->getQty() * ($child->getQty() - (is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0)); } } } elseif ($item->getFreeShipping()) { $freeQty += $item->getQty() - (is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0); } } } if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); $result = Mage::getModel('Mage_Shipping_Model_Rate_Result'); $rate = $this->getRate($request); $request->setPackageWeight($oldWeight); $request->setPackageQty($oldQty); if (!empty($rate) && $rate['price'] >= 0) { $method = Mage::getModel('Mage_Shipping_Model_Rate_Result_Method'); $method->setCarrier('tablerate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $freeQty) { $shippingPrice = 0; } else { $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']); } $method->setPrice($shippingPrice); $method->setCost($rate['cost']); $result->append($method); } return $result; }
/** * Collect and get rates * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } // exclude Virtual products price from Package value if pre-configured if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getProduct()->isVirtual()) { $request->setPackageValue($request->getPackageValue() - $child->getBaseRowTotal()); } } } elseif ($item->getProduct()->isVirtual()) { $request->setPackageValue($request->getPackageValue() - $item->getBaseRowTotal()); } } } // Free shipping by qty $freeQty = 0; if ($request->getAllItems()) { $freePackageValue = 0; foreach ($request->getAllItems() as $item) { if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeShipping = is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0; $freeQty += $item->getQty() * ($child->getQty() - $freeShipping); } } } elseif ($item->getFreeShipping()) { $freeShipping = is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0; $freeQty += $item->getQty() - $freeShipping; $freePackageValue += $item->getBaseRowTotal(); } } $oldValue = $request->getPackageValue(); $request->setPackageValue($oldValue - $freePackageValue); } if ($freePackageValue) { $request->setPackageValue($request->getPackageValue() - $freePackageValue); } if (!$request->getConditionName()) { $conditionName = $this->getConfigData('condition_name'); $request->setConditionName($conditionName ? $conditionName : $this->_default_condition_name); } // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); $result = $this->_getModel('shipping/rate_result'); $rate = $this->getRate($request); $request->setPackageWeight($oldWeight); $request->setPackageQty($oldQty); if (!empty($rate) && $rate['price'] >= 0) { $method = $this->_getModel('shipping/rate_result_method'); $method->setCarrier('tablerate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $freeQty) { $shippingPrice = 0; } else { $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']); } $method->setPrice($shippingPrice); $method->setCost($rate['cost']); $result->append($method); } elseif (empty($rate) && $request->getFreeShipping() === true) { /** * was applied promotion rule for whole cart * other shipping methods could be switched off at all * we must show table rate method with 0$ price, if grand_total more, than min table condition_value * free setPackageWeight() has already was taken into account */ $request->setPackageValue($freePackageValue); $request->setPackageQty($freeQty); $rate = $this->getRate($request); if (!empty($rate) && $rate['price'] >= 0) { $method = $this->_getModel('shipping/rate_result_method'); $method->setCarrier('tablerate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); $method->setPrice(0); $method->setCost(0); $result->append($method); } } else { $error = $this->_getModel('shipping/rate_result_error'); $error->setCarrier('tablerate'); $error->setCarrierTitle($this->getConfigData('title')); $error->setErrorMessage($this->getConfigData('specificerrmsg')); $result->append($error); } return $result; }
/** * Collect rate to get shipping method * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Rate_Request $request */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { $result = ""; $ship_price = 0; if (!$this->getConfigFlag('active')) { return false; } $website_id = (int) $request->getWebsiteId(); // Default condition Name: Weight vs. Destination $weight = $request->getPackageWeight(); // Check Weight Limit if ($this->getConfigFlag('active_weight_limit') && $weight >= $this->getConfigData('weight_limit')) { return false; } // Condition Name: Price Vs. Destination if ($this->getConfigData('condition_name') != $this->_default_condition_name) { // The weight is now the price $weight = Mage::helper('mmshippingplus')->getOrderAmount(); } // Get country, region and postcode data $country = Mage::helper('mmshippingplus')->getCustomerCountryCode(); $region = Mage::helper('mmshippingplus')->getCustomerRegionCode(); $postcode = Mage::helper('mmshippingplus')->getCustomerPostcode(); // Free shipping by qty $freeQty = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeQty += $item->getQty() * ($child->getQty() - (is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0)); } } } elseif ($item->getFreeShipping()) { $freeQty += $item->getQty() - (is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0); } } } if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } // Check tablerate with condition $tablerate = Mage::getModel('mmshippingplus/shippingplus')->getCollection()->setOrder('weight', 'DESC')->addFieldToFilter('website_id', array('in' => $website_id))->addFieldToFilter('dest_country', array('in' => array('*', $country)))->addFieldToFilter('dest_zip', array('in' => array('*', $postcode)))->addFieldToFilter('dest_region', array('in' => array('*', $region)))->addFieldToFilter('weight', array('lteq' => $weight))->addFieldToFilter('type', array('eq' => $this->getConfigData('condition_name'))); // Tablerate price $ship_price = $tablerate->getFirstItem()->getPrice(); // Price with shipping weight range if ($this->getConfigFlag('active_ship_kg')) { if ($this->getConfigData('ship_kg_country')) { $kg_country = explode(',', $this->getConfigData('ship_kg_country')); } $country = Mage::helper('mmshippingplus')->getCustomerCountryCode(2); if (in_array($country, $kg_country)) { if ($weight >= $this->getConfigData('ship_from_kg') && $weight <= $this->getConfigData('ship_to_kg')) { $ship_price = $this->getConfigData('ship_kg_price'); } } } // Price with shipping price range if ($this->getConfigFlag('active_ship_price')) { if ($this->getConfigData('ship_price_country')) { $price_country = explode(',', $this->getConfigData('ship_price_country')); } $country = Mage::helper('mmshippingplus')->getCustomerCountryCode(2); if (in_array($country, $price_country)) { $amount = Mage::helper('mmshippingplus')->getOrderAmount(); if ($amount >= $this->getConfigData('ship_from_price') && $amount <= $this->getConfigData('ship_to_price')) { $ship_price = $this->getConfigData('ship_price_price'); } } } if (!is_null($ship_price) && $ship_price != 0) { // Free shipping by tablerate $ship_price = $ship_price == $this->_free_ship_tablerate ? 0 : $ship_price; // Check if price has charge $charge = $tablerate->getFirstItem()->getCharge(); if ($charge > 0) { $amount = Mage::helper('mmshippingplus')->getOrderAmount(MMind_Shippingplus_Model_Config_Source_Rangeprice::TYPE_SUBTOTAL); // Charge type if ($this->getConfigData('charge_type') == MMind_Shippingplus_Model_Config_Source_Charge::TYPE_CHARGE_FIX) { // Fix price $ship_price += $charge; } else { // Percentage price $ship_price += $amount * $charge / 100; } } // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); $result = Mage::getModel('shipping/rate_result'); $request->setPackageWeight($oldWeight); $request->setPackageQty($oldQty); $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->_code); $method->setMethodTitle($this->getConfigData('method_name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $freeQty) { $ship_price = 0; } $method->setPrice($ship_price); $method->setCost(0); $result->append($method); return $result; } else { // View method also with zero price if ($this->getConfigData('active_shipping_zeroprice')) { // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); $result = Mage::getModel('shipping/rate_result'); $request->setPackageWeight($oldWeight); $request->setPackageQty($oldQty); $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->_code); $method->setMethodTitle($this->getConfigData('method_name')); $ship_price = 0; $method->setPrice($ship_price); $method->setCost(0); $result->append($method); return $result; } } }
/** * Collect shipping method price and set all data selected in config. * * @param Mage_Shipping_Model_Rate_Request $request * @return bool|false|Mage_Core_Model_Abstract */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!Mage::getStoreConfig('carriers/' . $this->_code . '/active')) { return false; } $method = Mage::getModel('shipping/rate_result_method'); $result = Mage::getModel('shipping/rate_result'); if (!$this->getConfigData('ratetype')) { $price = $this->getConfigData('flatrateprice'); if ($request->getFreeShipping() === true) { $price = 0; } } else { $freeQty = 0; if ($request->getAllItems()) { $freePackageValue = 0; foreach ($request->getAllItems() as $item) { if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeShipping = is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0; $freeQty += $item->getQty() * ($child->getQty() - $freeShipping); } } } elseif ($item->getFreeShipping()) { $freeShipping = is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0; $freeQty += $item->getQty() - $freeShipping; $freePackageValue += $item->getBaseRowTotal(); } } $oldValue = $request->getPackageValue(); $request->setPackageValue($oldValue - $freePackageValue); } if ($freePackageValue) { $request->setPackageValue($request->getPackageValue() - $freePackageValue); } $conditionName = $this->getConfigData('condition_name'); $request->setConditionName($conditionName ? $conditionName : $this->_default_condition_name); $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); $rate = $this->getRate($request); $request->setPackageWeight($oldWeight); $request->setPackageQty($oldQty); if (!empty($rate) && $rate['price'] >= 0) { if ($request->getFreeShipping() === true || $request->getPackageQty() == $freeQty) { $price = 0; } else { $price = $rate['price']; } } elseif (empty($rate) && $request->getFreeShipping() === true) { $request->setPackageValue($freePackageValue); $request->setPackageQty($freeQty); $rate = $this->getRate($request); if (!empty($rate) && $rate['price'] >= 0) { $price = 0; } } else { $error = Mage::getModel('shipping/rate_result_error'); $error->setCarrier($this->_code); $error->setCarrierTitle($this->getConfigData('title')); $error->setErrorMessage(Mage::helper('dpd')->__('This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.')); $result->append($error); return $result; } } $method->setCarrier($this->_code); $method->setMethod($this->_code); $method->setMethodTitle($this->getConfigData('name')); $method->setCarrierTitle($this->getConfigData('carrier')); $method->setPrice($price); $method->setCost($price); $result->append($method); return $result; }
/** * Enter description here... * * @param Mage_Shipping_Model_Rate_Request $data * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } /* // exclude Virtual products price from Package value if pre-configured if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getProduct()->isVirtual() || $item->getProductType() == 'downloadable') { $request->setPackageValue($request->getPackageValue() - $child->getBaseRowTotal()); } } } elseif ($item->getProduct()->isVirtual() || $item->getProductType() == 'downloadable') { $request->setPackageValue($request->getPackageValue() - $item->getBaseRowTotal()); } } } */ // Free shipping by qty $freeQty = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeQty += $item->getQty() * ($child->getQty() - (is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0)); } } } elseif ($item->getFreeShipping()) { $freeQty += $item->getQty() - (is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0); } } } // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } $result = Mage::getModel('shipping/rate_result'); $ratearray = $this->getRate($request); $freeShipping = false; if (is_numeric($this->getConfigData('free_shipping_threshold')) && $this->getConfigData('free_shipping_threshold') > 0 && $request->getPackageValue() > $this->getConfigData('free_shipping_threshold')) { $freeShipping = true; } if ($this->getConfigData('allow_free_shipping_promotions') && ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes())) { $freeShipping = true; } if ($freeShipping) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('matrixrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('matrixrate_free'); $method->setPrice('0.00'); $method->setMethodTitle($this->getConfigData('free_method_text')); $result->append($method); if ($this->getConfigData('show_only_free')) { return $result; } } foreach ($ratearray as $rate) { if (!empty($rate) && $rate['shipping_charge'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('matrixrate'); $method->setCarrierTitle($this->getConfigData('title')); //$method->setMethod('matrixrate_' . $rate['pk']); $method->setMethod($rate['shipping_provider'] . '_' . $rate['delivery_type']); $method->setMethodTitle(Mage::helper('matrixrate')->__($rate['delivery_type'])); $method->setDeliveryType($rate['delivery_type']); $method->setShippingCharge($rate['shipping_charge']); $tempPrice = $request->getData($request->getConditionName()) * $rate['shipping_charge'] / 100; $shippingPrice = $this->getFinalPriceWithHandlingFee($tempPrice); $method->setPrice($shippingPrice); $result->append($method); } } return $result; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } // exclude Virtual products price from Package value if pre-configured if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) { $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId(); foreach ($request->getAllItems() as $item) { if ($item->getParentItem()) { continue; } /* * Changes for the individual product shipping in Fixed Priced bundle */ $finalPrice = 0; if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($item->getProductType() == 'bundle' && $item->getProduct()->getPriceType() == Mage_Bundle_Model_Product_Price::PRICE_TYPE_FIXED) { $child->getProduct()->setCustomerGroupId($groupId); $price = $child->getProduct()->getPriceModel()->getFinalPrice($child->getQty(), $child->getProduct()) * $item->getQty(); if (!$child->getProduct()->isVirtual()) { $finalPrice = $finalPrice + $price; } } else { if ($child->getProduct()->isVirtual()) { $request->setPackageValue($request->getPackageValue() - $child->getBaseRowTotal()); } } } if ($item->getProductType() == 'bundle' && $item->getProduct()->getPriceType() == Mage_Bundle_Model_Product_Price::PRICE_TYPE_FIXED) { $request->setPackageValue($request->getPackageValue() - $item->getBaseRowTotal()); $request->setPackagePhysicalValue($request->getPackagePhysicalValue() - $item->getBaseRowTotal()); $request->setPackageValue($request->getPackageValue() + $finalPrice); $request->setPackagePhysicalValue($request->getPackagePhysicalValue() + $finalPrice); } } elseif ($item->getProduct()->isVirtual()) { $request->setPackageValue($request->getPackageValue() - $item->getBaseRowTotal()); } } } // Free shipping by qty $freeQty = 0; $freePackageValue = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeQty += $item->getQty() * ($child->getQty() - (is_numeric($child->getFreeShipping()) ? $child->getFreeShipping() : 0)); } } } elseif ($item->getFreeShipping()) { $freeQty += $item->getQty() - (is_numeric($item->getFreeShipping()) ? $item->getFreeShipping() : 0); $freePackageValue += $item->getRowTotal(); } } } if ($freePackageValue) { $request->setPackageValue($request->getPackageValue() - $freePackageValue); } if (!$request->getConditionName()) { $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); $result = Mage::getModel('shipping/rate_result'); $rate = $this->getRate($request); $request->setPackageWeight($oldWeight); $request->setPackageQty($oldQty); if (!empty($rate) && $rate['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('tablerate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $freeQty) { $shippingPrice = 0; } elseif (isset($rate['calculation_type']) && $rate['calculation_type'] == ICC_TableRateMixed_Model_Resource_Carrier_Tablerate::CALCULATION_TYPE_PERCENTAGE) { $shippingPrice = $this->_getPercentPriceOfCartSubtotal($rate['price'], $request); } else { $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']); } $method->setPrice($shippingPrice); $method->setCost($rate['cost']); $result->append($method); } elseif (empty($rate) && $request->getFreeShipping() === true) { /** * was applied promotion rule for whole cart * other shipping methods could be switched off at all * we must show table rate method with 0$ price, if grand_total more, than min table condition_value * free setPackageWeight() has already was taken into account */ $request->setPackageValue($freePackageValue); $request->setPackageQty($freeQty); $rate = $this->getRate($request); if (!empty($rate) && $rate['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('tablerate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('bestway'); $method->setMethodTitle($this->getConfigData('name')); $method->setPrice(0); $method->setCost(0); $result->append($method); } } return $result; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { try { $result = Mage::getModel('shipping/rate_result'); if (!$this->getConfigData('active')) { return $result; } $shipping_free_cart_price = null; if ($this->getConfigData('free_active')) { $shipping_free_cart_price = $this->getConfigData('free_price'); } $request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); if ($this->getConfigData('package_weight')) { $request->_data['package_weight'] = $request->_data['package_weight'] + $this->getConfigData('package_weight') / 1000; } $quote = Mage::getModel('sales/quote'); if (isset($data['cart'])) { foreach ($data['cart'] as $id => $itemqty) { $item = Mage::getModel('sales/quote_item')->load($id); if (!$quote->getId()) { $quote->load($item->getQuoteId()); } $item->setQuote($quote); $product = $item->getProduct(); if ($product->getTypeId() != 'configurable') { $process['products'][] = array("product" => $product, "qtycart" => $itemqty); } } } else { $cart = Mage::getModel('checkout/cart')->getQuote(); foreach ($cart->getAllItems() as $item) { $product = Mage::getModel('catalog/product')->load($item->getProduct()->getId()); if ($product->getTypeId() != 'configurable') { $process['products'][] = array("product" => $product, "qtycart" => $item->getQty()); } } } if (isset($process['products'])) { foreach ($process['products'] as $product) { $rates = $this->getRate($request, $product['product'], $product['qtycart']); //$productShippingPrice = $rate['price']; //$productn = $product['product']; /*if ($productShippingPrice > $maxProductShippingPrice) { $maxProductShippingPrice = $productShippingPrice; if ($product['qty']>1){ $maxProductShippingPrice *= $coeff; } }*/ } } $cartTmp = $request->_data['package_value_with_discount']; $weghtTmp = $request->_data['package_weight']; foreach ($rates as $rate) { if (!empty($rate) && $rate['price'] >= 0) { /*---------------------------------------- Liste des points relais -----------------------------------------*/ // On met en place les paramètres de la requète $params = array('Enseigne' => $this->getConfigData('enseigne'), 'Pays' => $request->_data['dest_country_id'], 'CP' => $request->_data['dest_postcode']); //On crée le code de sécurité $code = implode("", $params); $code .= $this->getConfigData('cle'); //On le rajoute aux paramètres $params["Security"] = strtoupper(md5($code)); // On se connecte $client = new SoapClient("http://www.mondialrelay.fr/WebService/Web_Services.asmx?WSDL"); // Et on effectue la requète $points_relais = $client->WSI2_RecherchePointRelais($params)->WSI2_RecherchePointRelaisResult; $i = 0; // On cr�e une m�thode de livraison par point relais foreach ($points_relais as $point_relais) { if (is_object($point_relais) && trim($point_relais->Num) != '') { $i++; $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('pointsrelais'); $method->setCarrierTitle($this->getConfigData('title')); $methodTitle = $point_relais->LgAdr1 . ' - ' . $point_relais->Ville . ' <a href="#" onclick="PointsRelais.showInfo(\'' . $point_relais->Num . '\'); return false;">Détails</a> - <span style="display:none;" id="pays">' . $request->_data['dest_country_id'] . '</span>'; $method->setMethod($point_relais->Num); $method->setMethodTitle($methodTitle); if ($shipping_free_cart_price != null && ($cartTmp > $shipping_free_cart_price && $weghtTmp > 0.101)) { $price = $rate['price'] = 0; $rate['cost'] = 0; $method->setPrice($price); $method->setCost($rate['cost']); } else { $price = $rate['price']; $method->setPrice($this->getFinalPriceWithHandlingFee($price)); $method->setCost($rate['cost']); } $result->append($method); } } if (!$i) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('pointsrelais'); $method->setCarrierTitle(''); $method->setMethod('000'); $method->setMethodTitle("Livraison"); $method->setPrice(0); $method->setCost(0); $result->append($method); } } } //echo "<pre>" . var_dump($result) .'</pre>'; return $result; } catch (exception $e) { return 0; } }