/** * 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; } $freeBoxes = 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()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('zabstorepickup'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('storepickup'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $address = $this->getAddress(); $additional = false; if ($address) { /**@var $address Mage_Customer_Model_Address**/ $address = $address->format('html'); $additional = Mage::helper('zab_storepickup')->__("Pickup in:") . "<br/>" . "<address>{$address}</address><br/>"; } if ($this->getConfigData('instruction')) { $additional .= $this->getConfigData('instruction'); } $method->setAdditionalInfo($additional); $result->append($method); } return $result; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } $freeBoxes = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getFreeShipping() && !$item->getProduct()->isVirtual()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $quoteId = Mage::getSingleton('core/session')->proposal_quote_id; if ($quoteId) { $price = Mage::app()->getHelper('qquoteadv')->getQquoteShipPriceById($quoteId); $result = Mage::getModel('shipping/rate_result'); /* if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $price; } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = ($request->getPackageQty() * $price) - ($this->getFreeBoxes() * $price); } else { $shippingPrice = false; }*/ $type = Mage::app()->getHelper('qquoteadv')->getShipTypeByQuote(); if ($type == 'O') { // per order $shippingPrice = $price; } elseif ($type == 'I') { // per item $shippingPrice = $request->getPackageQty() * $price - $this->getFreeBoxes() * $price; } else { $shippingPrice = false; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('qquoteshiprate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('qquoteshiprate'); if ($type == 'I') { $method->setMethodTitle('Price per Item'); } else { $method->setMethodTitle($this->getConfigData('name')); } if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; } return false; }
/** * Collect and get rates * * @param Mage_Shipping_Model_Rate_Request $request * @return Mage_Shipping_Model_Rate_Result|bool|null */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } $activeForCustomerGroup = Mage::helper('emjainteractive_shippingoption')->isShippingMethodAvailable(); if (!$activeForCustomerGroup) { return false; } $freeBoxes = 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()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('umosaco'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('umosaco'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } $freeBoxes = 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()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } if (Mage_Shipping_Model_Carrier_Abstract::HANDLING_TYPE_PERCENT == $this->getConfigData('shipper_type')) { $shippingPrice = $request->getData('base_subtotal_incl_tax') * $shippingPrice / 100; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('flatrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('flatrate'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; }
/** * Sets the request with new values where required for shipping calculation * * @param Mage_Shipping_Model_Rate_Request $request */ public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $freeShippingOnly = 0; $this->oldWeight = $request->getPackageWeight(); $this->oldQty = $request->getPackageQty(); $this->oldPrice = $request->getPackageValue(); $request->setPRConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); $this->_rawRequest = $request; //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()); } } } $this->_rawRequest->setIgnoreFreeItems(false); }
/** * 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; } $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price'); } else { $shippingPrice = false; } $shippingPrice += $this->getConfigData('handling_fee'); if ($shippingPrice) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('flatrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('flatrate'); $method->setMethodTitle($this->getConfigData('name')); $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $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; } $freeBoxes = 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()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } $voucher_code = Mage::getSingleton('core/session')->getData('voucher_code'); $voucher = $this->verify_voucher_code($voucher_code); if ($voucher['order_type'] == '3MM') { $shippingPrice = 18; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('flatrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('flatrate'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { if (!$this->getConfigFlag('active')) { return false; } $freeBoxes = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { if ($item->getFreeShipping() && !$item->getProduct()->isVirtual()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->_code); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $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; } $allow = $request->getmultiflat(); $result = Mage::getModel('shipping/rate_result'); $packageValue = $request->getBaseCurrency()->convert($request->getPackageValue(), $request->getPackageCurrency()); for ($i = 0; $i <= 10; $i++) { if ($this->getConfigData('type' . $i) == 'O') { // per order $shippingPrice = $this->getConfigData('price' . $i); } elseif ($this->getConfigData('type' . $i) == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price' . $i) - $this->getFreeBoxes() * $this->getConfigData('price' . $i); } else { $shippingPrice = $this->getConfigData('price' . $i); } $shippingName = $this->getConfigData('name' . $i); if ($shippingName != "" && ($packageValue >= $this->getConfigData('min_shipping' . $i) && $packageValue <= $this->getConfigData('max_shipping' . $i)) or $shippingName != "" && $this->getConfigData('max_shipping' . $i) == "") { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('msmultiflat'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->getConfigData('name' . $i)); $method->setMethodTitle($this->getConfigData('name' . $i)); $method->setMethodDetails($this->getConfigData('details' . $i)); $method->setMethodDescription($this->getConfigData('details' . $i)); $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } else { if ($shippingName == "") { } } } return $result; }
/** * applies filters for rate on request * * @param array $rate * @param Mage_Shipping_Model_Rate_Request $request * @return boolean */ public function checkRate(array $rate, Mage_Shipping_Model_Rate_Request $request) { if (!Mage::getSingleton('checkout/session')->getQuoteId()) { return true; } if (!isset($rate['filter'])) { return true; } $filters = explode(';', $rate['filter']); $passed = true; foreach ($filters as $filter) { $filter = explode(':', $filter); $condition = $filter[0]; $value = isset($filter[1]) && $filter[1] ? $filter[1] : false; if ($value === false) { continue; } switch ($condition) { case 'min_qty': if ($request->getPackageQty() < $value) { $passed = false; } break; case 'max_qty': if ($request->getPackageQty() > $value) { $passed = false; } break; case 'min_subtotal': if ($request->getPackageValueWithDiscount() < $value) { $passed = false; } break; case 'max_subtotal': if ($request->getPackageValueWithDiscount() > $value) { $passed = false; } break; case 'min_weight': if ($request->getPackageWeight() < $value) { $passed = false; } break; case 'max_weight': if ($request->getPackageWeight() > $value) { $passed = false; } break; case 'countries': $dest = strtolower($request->getDestCountryId()); if ($value[0] == '!') { $exclude = true; $value[0] = ' '; // will be removed with trim() ;-) } else { $exclude = false; } $allowed = explode(',', strtolower($value)); foreach ($allowed as $k => $v) { $allowed[$k] = trim($v); } if ($exclude) { if (in_array($dest, $allowed) && count($allowed)) { $passed = false; } } else { if (!in_array($dest, $allowed) && count($allowed)) { $passed = false; } } break; } } return $passed; }
/** * Enter description here... * * @param FCM_Shipping_Model_Rate_Request $data * @return FCM_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request) { /* It will check whether Express shipping method is enable or not if not it will return to calling function without executing further */ if (!$this->getConfigFlag('active')) { return false; } $freeBoxes = 0; if ($request->getAllItems()) { foreach ($request->getAllItems() as $item) { // Below line will check whether the product in question is virtual one or not if ($item->getProduct()->isVirtual() || $item->getParentItem()) { continue; } // Below line will be executed whether item in cart are shipped seperatly or not if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); // this one check whether shipping will be calculated per order wise if ($this->getConfigData('type') == 'O') { $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); //Set Shipping Carrier name as Express $method->setCarrier('express'); //Fetch Express Shipping title which we have set from admin $method->setCarrierTitle($this->getConfigData('title')); //Set Shipping method name as express $method->setMethod('express'); //Fetch Express Shipping name which we have set from admin $method->setMethodTitle($this->getConfigData('name')); /* Check whether any free shipping promotion is being applied or not if free shipping applied, below condition make the shipping price as 0 */ if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } /* set shipping Price and Cost as mention in admin configuration or Zero if any free shipping promotion rule is applied */ $method->setPrice($shippingPrice); $method->setCost($shippingPrice); /* Append this shipping method with other shipping method which are in Enable state */ $result->append($method); } 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; } } }
/** * 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; } $freeBoxes = 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()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item $shippingPrice = $request->getPackageQty() * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } //$shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); $custom_ship = $this->get_pro_ship(); /*Mage::getSingleton('core/session', array('name'=>'frontend')); $session = Mage::getSingleton('checkout/session'); $cart_items = $session->getQuote()->getAllItems(); $_helper = Mage::helper('catalog/output'); $product_shipping_price=0; $flat_shipping_price = 0; foreach( $cart_items as $items ){ $cur_fproduct = Mage::getModel('catalog/product')->load($items->getProduct_id()); $product_shipping_price = $_helper->productAttribute($cur_fproduct, $cur_fproduct->getShippingFlatratePerProduct(), 'shipping_flatrate_per_product'); if ($product_shipping_price == '') { $flat_shipping_price += ($items) * ($this->getConfigData('price')); } }*/ //$shippingPrice = $custom_ship + $flat_shipping_price; $shippingPrice = $custom_ship; if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('flatrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('flatrate'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $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); } } } if (!$request->getMRConditionName()) { $request->setMRConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name); } // Package weight and qty free shipping $oldWeight = $request->getPackageWeight(); $oldQty = $request->getPackageQty(); if ($this->getConfigData('allow_free_shipping_promotions') && !$this->getConfigData('include_free_ship_items')) { $request->setPackageWeight($request->getFreeMethodWeight()); $request->setPackageQty($oldQty - $freeQty); } $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['price'] >= 0) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('matrixrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('matrixrate_' . $rate['pk']); $method->setMethodTitle(Mage::helper('matrixrate')->__($rate['delivery_type'])); $shippingPrice = $this->getFinalPriceWithHandlingFee($rate['price']); $method->setCost($rate['cost']); $method->setDeliveryType($rate['delivery_type']); $method->setPrice($shippingPrice); $result->append($method); } } return $result; }
private function _getProductionShipmentFields(Mage_Shipping_Model_Rate_Request $mgrequest) { $regionId = $mgrequest->getRegionId(); $region = Mage::getModel('directory/region')->load($regionId); $request->Shipment->SenderInformation->Address->Name = "Aaron Summer"; //$request->Shipment->SenderInformation->Address->StreetNumber = "1234"; $request->Shipment->SenderInformation->Address->StreetName = $mgrequest->getStreet(); $request->Shipment->SenderInformation->Address->City = $mgrequest->getCity(); $request->Shipment->SenderInformation->Address->Province = $region->getCode(); $request->Shipment->SenderInformation->Address->Country = $mgrequest->getCountryId(); $request->Shipment->SenderInformation->Address->PostalCode = $mgrequest->getPostcode(); $request->Shipment->SenderInformation->Address->PhoneNumber->CountryCode = "1"; $request->Shipment->SenderInformation->Address->PhoneNumber->AreaCode = "905"; $request->Shipment->SenderInformation->Address->PhoneNumber->Phone = substr("123456789", -7); //Populate the Desination Information $request->Shipment->ReceiverInformation->Address->Name = "Aaron Summer"; $request->Shipment->ReceiverInformation->Address->StreetName = $mgrequest->getDestStreet(); $request->Shipment->ReceiverInformation->Address->City = $mgrequest->getDestCity(); $regionId = $mgrequest->getDestRegionId(); $region = Mage::getModel('directory/region')->load($regionId); $request->Shipment->ReceiverInformation->Address->Province = $region->getCode(); $request->Shipment->ReceiverInformation->Address->Country = $mgrequest->getDestCountryId(); $request->Shipment->ReceiverInformation->Address->PostalCode = $mgrequest->getDestPostcode(); $request->Shipment->ReceiverInformation->Address->PhoneNumber->CountryCode = "1"; $request->Shipment->ReceiverInformation->Address->PhoneNumber->AreaCode = "604"; $request->Shipment->ReceiverInformation->Address->PhoneNumber->Phone = substr("123456789", -7); //Future Dated Shipments - YYYY-MM-DD format $request->Shipment->ShipmentDate = Mage::getModel('core/date')->date('Y-m-d'); //Populate the Package Information $request->Shipment->PackageInformation->TotalWeight->Value = $mgrequest->getPackageWeight(); $request->Shipment->PackageInformation->TotalWeight->WeightUnit = "lb"; $request->Shipment->PackageInformation->TotalPieces = $mgrequest->getPackageQty(); $request->Shipment->PackageInformation->ServiceID = "PurolatorExpress"; //Populate the Payment Information $request->Shipment->PaymentInformation->PaymentType = "Sender"; $request->Shipment->PaymentInformation->BillingAccountNumber = $this->BILLING_ACCOUNT; $request->Shipment->PaymentInformation->RegisteredAccountNumber = $this->REGISTERED_ACCOUNT; //Populate the Pickup Information $request->Shipment->PickupInformation->PickupType = "DropOff"; $request->ShowAlternativeServicesIndicator = "true"; //OriginSignatureNotRequired $request->Shipment->PackageInformation->OptionsInformation->Options->OptionIDValuePair->ID = "OriginSignatureNotRequired"; $request->Shipment->PackageInformation->OptionsInformation->Options->OptionIDValuePair->Value = "true"; return $request; }
public function collectRates(Mage_Shipping_Model_Rate_Request $request) { 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; }
/** * 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; }
/** * 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 ($request->getAllItems()) { $exprees_shipping = array(); foreach ($request->getAllItems() as $item) { $product_id = $item->getProductId(); $productObj = Mage::getModel('catalog/product')->load($product_id); $exprees_shipping_available = $productObj->getData('exprees_shipping_available'); //our shipping attribute code array_push($exprees_shipping, $exprees_shipping_available); $newArray = array_count_values($exprees_shipping); $priceapply = count($newArray); } } if (!$this->getConfigFlag('active') || $priceapply == '1') { return false; } $freeBoxes = 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()) { $freeBoxes += $item->getQty() * $child->getQty(); } } } elseif ($item->getFreeShipping()) { $freeBoxes += $item->getQty(); } } } $this->setFreeBoxes($freeBoxes); $result = Mage::getModel('shipping/rate_result'); if ($this->getConfigData('type') == 'O') { // per order $shippingPrice = $this->getConfigData('price'); } elseif ($this->getConfigData('type') == 'I') { // per item //$shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price')); $shippingPrice = $priceapply * $this->getConfigData('price') - $this->getFreeBoxes() * $this->getConfigData('price'); } else { $shippingPrice = false; } $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice); if ($shippingPrice !== false) { $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('flatrate'); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod('flatrate'); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; }
public function setRequest(Mage_Shipping_Model_Rate_Request $request) { $this->_request = $request; $r = new Varien_Object(); if ($request->getLimitMethod()) { $r->setService($request->getLimitMethod()); } else { $r->setService('ALL'); } if ($request->getAramexUserid()) { $userId = $request->getAramexUserid(); } else { $userId = $this->getConfigData('userid'); } $r->setUserId($userId); /* if ($request->getAramexContainer()) { $container = $request->getAramexContainer(); } else { $container = $this->getConfigData('container'); } $r->setContainer($container); */ if ($request->getAramexSize()) { $size = $request->getAramexSize(); } else { $size = $this->getConfigData('size'); } $r->setSize($size); if ($request->getAramexMachinable()) { $machinable = $request->getAramexMachinable(); } else { $machinable = $this->getConfigData('machinable'); } $r->setMachinable($machinable); if ($request->getOrigPostcode()) { $r->setOrigPostal($request->getOrigPostcode()); } else { $r->setOrigPostal(Mage::getStoreConfig('shipping/origin/postcode')); } if ($request->getDestCountryId()) { $destCountry = $request->getDestCountryId(); } else { $destCountry = self::USA_COUNTRY_ID; } $r->setDestCountryId($destCountry); $countries = Mage::getResourceModel('directory/country_collection')->addCountryIdFilter($destCountry)->load()->getItems(); $country = array_shift($countries); $countryName = $country->getName(); $r->setDestCountryName($countryName); if ($request->getDestCity()) { $r->setDestCity($request->getDestCity()); } if ($request->getDestPostcode()) { $r->setDestPostal($request->getDestPostcode()); } $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $weight = $this->getTotalNumOfBoxes($request->getPackageWeight()); $r->setWeightPounds($weight); $r->setPackageQty($request->getPackageQty()); $r->setWeightOunces(round(($weight - floor($weight)) * 16, 1)); if ($request->getFreeMethodWeight() != $request->getPackageWeight()) { $r->setFreeMethodWeight($request->getFreeMethodWeight()); } $r->setDestState($request->getDestRegionCode()); $r->setValue($request->getPackageValue()); $r->setValueWithDiscount($request->getPackageValueWithDiscount()); $this->_rawRequest = $r; return $this; }
/** * 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()) { $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 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) { // skip if not enabled if (!Mage::getStoreConfig('carriers/' . $this->_code . '/active')) { return false; } $result = Mage::getModel('shipping/rate_result'); $packageValue = $request->getBaseCurrency()->convert($request->getPackageValue(), $request->getPackageCurrency()); $temp = array(); //get sheepla module config $sConfig = Mage::getStoreConfig('sheepla'); //if user is using dynamic pricing if ($sConfig['advanced']['use_dynamic_pricing']) { //support admin and user checkout if (Mage::getSingleton('admin/session')->isLoggedIn()) { //admin $quote = Mage::getSingleton('adminhtml/session_quote')->getQuote(); } else { //user $quote = Mage::getSingleton('checkout/session')->getQuote(); } $items = $quote->getAllVisibleItems(); $address = $quote->getShippingAddress(); try { $this->initSheeplaObjects(); $dpRates = $this->sp->getClient()->getDynamicPricing($address, $items); $availableDynamicTemplateIds = array(); foreach ($dpRates as $rate) { $availableDynamicTemplateIds[] = $rate['shipmentTemplateId']; } } catch (Exception $e) { $dpRates = false; Mage::Log('[Sheepla][' . date('Y-m-d H:i:s') . ']' . $e->getMessage()); } } else { $dpRates = false; } for ($i = 1; $i <= 10; $i++) { if ($this->getMethodConfig('allowspecific', $i)) { $availableCountries = explode(',', $this->getMethodConfig('specificcountry', $i)); if (!($availableCountries && in_array($request->getDestCountryId(), $availableCountries))) { continue; } } $shippingName = $this->getMethodConfig('name', $i); $shippingPrice = $this->getMethodConfig('price', $i); if (!empty($shippingName)) { //if dynamic pricing enabled and method is not at dpRates table, skip this method if (is_array($dpRates)) { $shippingTemplateId = $this->getMethodConfig('template_id', $i); if ($shippingTemplateId != '0' && !in_array($shippingTemplateId, $availableDynamicTemplateIds)) { continue; } } $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier('sheepla'); $method->setMethod('method_' . $i); $method->setMethodTitle($this->getMethodConfig('name', $i)); $method->setMethodDetails($this->getMethodConfig('desc', $i)); $method->setMethodDescription($this->getMethodConfig('desc', $i)); $method->setPrice(preg_replace('/,/', '.', $shippingPrice)); $method->setCost($this->getMethodConfig('cost', $i)); if (isset($sConfig['advanced']['custom_label']) && !empty($sConfig['advanced']['custom_label'])) { $method->setCarrierTitle($sConfig['advanced']['custom_label']); } else { $method->setCarrierTitle(Mage::helper('sheepla/data')->__('Robust delivery by Sheepla!')); } //dynamic price calculate if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) { $method->setPrice('0.00'); } elseif (is_array($dpRates)) { foreach ($sConfig as $k => $v) { if ($method->getMethod() == $k) { foreach ($dpRates as $rule) { if ($rule['shipmentTemplateId'] == $v['template_id']) { $method->setPrice($rule['price']); } } } } } $temp[$this->getMethodConfig('sort_order', $i)] = $method; } } foreach ($temp as $m) { $result->append($m); } return $result; }