Duplicating flat rate shipping module

Last modified by rathethi on Fri, June 25, 2010 09:27
Source|Old Revisions  

This is an old revision of the document!


This technique can be used to ship(Flatrate method) to customer with specified flat rate amount based on country they ship to.

Important – We are going to create duplicate of flat rate module called ‘flatrateuk’ For this we have to Create/Modify two files 1.Create Mage/AdminHtml/Model/System/Config/Source/Shipping/Flatrateuk.php

Paste the following code on it

  1. <?php
  2. class Mage_Adminhtml_Model_System_Config_Source_Shipping_Flatrateuk
  3. {
  4.     public function toOptionArray()
  5.     {
  6.         return array(
  7.             array('value'=>'', 'label'=> Mage::helper('adminhtml')->__('None')),
  8.             array('value'=>'O', 'label'=>Mage::helper('adminhtml')->__('Per Order')),
  9.             array('value'=>'I', 'label'=>Mage::helper('adminhtml')->__('Per Item')),
  10.         );
  11.     }
  12. }
  13. ?>

2.Mage/Shipping/Model/Carrier/Flatrateuk.php Paste the following code on it

  1. <?php
  2.  
  3. class Mage_Shipping_Model_Carrier_Flatrateuk
  4.     extends Mage_Shipping_Model_Carrier_Abstract
  5.     implements Mage_Shipping_Model_Carrier_Interface
  6. {
  7.  
  8.     protected $_code = 'flatrateuk';
  9.  
  10.     /**
  11.      * Enter description here...
  12.      *
  13.      * @param Mage_Shipping_Model_Rate_Request $data
  14.      * @return Mage_Shipping_Model_Rate_Result
  15.      */
  16.     public function collectRates(Mage_Shipping_Model_Rate_Request $request)
  17.     {
  18.         if (!$this->getConfigFlag('active')) {
  19.             return false;
  20.         }
  21.  
  22.         $freeBoxes = 0;
  23.         if ($request->getAllItems()) {
  24.             foreach ($request->getAllItems() as $item) {
  25.                 if ($item->getFreeShipping() && !$item->getProduct()->isVirtual()) {
  26.                     $freeBoxes+=$item->getQty();
  27.                 }
  28.             }
  29.         }
  30.         $this->setFreeBoxes($freeBoxes);
  31.  
  32.         $result = Mage::getModel('shipping/rate_result');
  33.         if ($this->getConfigData('type') == 'O') { // per order
  34.             $shippingPrice = $this->getConfigData('price');
  35.         } elseif ($this->getConfigData('type') == 'I') { // per item
  36.             $shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price'));
  37.         } else {
  38.             $shippingPrice = false;
  39.         }
  40.  
  41.         $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);
  42.  
  43.         if ($shippingPrice !== false) {
  44.             $method = Mage::getModel('shipping/rate_result_method');
  45.  
  46.             $method->setCarrier('flatrateuk');
  47.             $method->setCarrierTitle($this->getConfigData('title'));
  48.  
  49.             $method->setMethod('flatrateuk');
  50.             $method->setMethodTitle($this->getConfigData('name'));
  51.  
  52.             if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
  53.                 $shippingPrice = '0.00';
  54.             }
  55.  
  56.  
  57.             $method->setPrice($shippingPrice);
  58.             $method->setCost($shippingPrice);
  59.  
  60.             $result->append($method);
  61.         }
  62.  
  63.         return $result;
  64.     }
  65.  
  66.     public function getAllowedMethods()
  67.     {
  68.         return array('flatrateuk'=>$this->getConfigData('name'));
  69.     }
  70.  
  71. }
  72. ?>

3.Modify the xml file Mage/Shipping/etc/System.xm/ and append the following code inside of <group> (inside of the tag <carriers translate=”label” module=”shipping”> Hint: Just find the keyword Flatrate)

  1. <flatrateuk translate="label">
  2.                     <label>Flat Rate In UK</label>
  3.                     <frontend_type>text</frontend_type>
  4.                     <sort_order>2</sort_order>
  5.                     <show_in_default>1</show_in_default>
  6.                     <show_in_website>1</show_in_website>
  7.                     <show_in_store>1</show_in_store>
  8.                     <fields>
  9.                         <active translate="label">
  10.                             <label>Enabled</label>
  11.                             <frontend_type>select</frontend_type>
  12.                             <source_model>adminhtml/system_config_source_yesno</source_model>
  13.                             <sort_order>1</sort_order>
  14.                             <show_in_default>1</show_in_default>
  15.                             <show_in_website>1</show_in_website>
  16.                             <show_in_store>0</show_in_store>
  17.                         </active>
  18.                         <name translate="label">
  19.                             <label>Method name</label>
  20.                             <frontend_type>text</frontend_type>
  21.                             <sort_order>3</sort_order>
  22.                             <show_in_default>1</show_in_default>
  23.                             <show_in_website>1</show_in_website>
  24.                             <show_in_store>1</show_in_store>
  25.                         </name>
  26.                         <price translate="label">
  27.                             <label>Price</label>
  28.                             <frontend_type>text</frontend_type>
  29.                             <sort_order>5</sort_order>
  30.                             <show_in_default>1</show_in_default>
  31.                             <show_in_website>1</show_in_website>
  32.                             <show_in_store>0</show_in_store>
  33.                         </price>
  34.                         <handling_type translate="label">
  35.                             <label>Calculate Handling Fee</label>
  36.                             <frontend_type>select</frontend_type>
  37.                             <source_model>shipping/source_handlingType</source_model>
  38.                             <sort_order>7</sort_order>
  39.                             <show_in_default>1</show_in_default>
  40.                             <show_in_website>1</show_in_website>
  41.                             <show_in_store>0</show_in_store>
  42.                         </handling_type>
  43.                         <handling_fee translate="label">
  44.                             <label>Handling Fee</label>
  45.                             <frontend_type>text</frontend_type>
  46.                             <sort_order>8</sort_order>
  47.                             <show_in_default>1</show_in_default>
  48.                             <show_in_website>1</show_in_website>
  49.                             <show_in_store>0</show_in_store>
  50.                         </handling_fee>
  51.                         <sort_order translate="label">
  52.                             <label>Sort order</label>
  53.                             <frontend_type>text</frontend_type>
  54.                             <sort_order>100</sort_order>
  55.                             <show_in_default>1</show_in_default>
  56.                             <show_in_website>1</show_in_website>
  57.                             <show_in_store>0</show_in_store>
  58.                         </sort_order>
  59.                         <title translate="label">
  60.                             <label>Title</label>
  61.                             <frontend_type>text</frontend_type>
  62.                             <sort_order>2</sort_order>
  63.                             <show_in_default>1</show_in_default>
  64.                             <show_in_website>1</show_in_website>
  65.                             <show_in_store>1</show_in_store>
  66.                         </title>
  67.                         <type translate="label">
  68.                             <label>Type</label>
  69.                             <frontend_type>select</frontend_type>
  70.                             <source_model>adminhtml/system_config_source_shipping_flatrate</source_model>
  71.                             <sort_order>4</sort_order>
  72.                             <show_in_default>1</show_in_default>
  73.                             <show_in_website>1</show_in_website>
  74.                             <show_in_store>0</show_in_store>
  75.                         </type>
  76.                         <sallowspecific translate="label">
  77.                             <label>Ship to applicable countries</label>
  78.                             <frontend_type>select</frontend_type>
  79.                             <sort_order>90</sort_order>
  80.                             <frontend_class>shipping-applicable-country</frontend_class>
  81.                             <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
  82.                             <show_in_default>1</show_in_default>
  83.                             <show_in_website>1</show_in_website>
  84.                             <show_in_store>0</show_in_store>
  85.                         </sallowspecific>
  86.                         <specificcountry translate="label">
  87.                             <label>Ship to Specific countries</label>
  88.                             <frontend_type>multiselect</frontend_type>
  89.                             <sort_order>91</sort_order>
  90.                             <source_model>adminhtml/system_config_source_country</source_model>
  91.                             <show_in_default>1</show_in_default>
  92.                             <show_in_website>1</show_in_website>
  93.                             <show_in_store>0</show_in_store>
  94.                         </specificcountry>
  95.                         <showmethod translate="label">
  96.                             <label>Show method if not applicable</label>
  97.                             <frontend_type>select</frontend_type>
  98.                             <sort_order>92</sort_order>
  99.                             <source_model>adminhtml/system_config_source_yesno</source_model>
  100.                             <show_in_default>1</show_in_default>
  101.                             <show_in_website>1</show_in_website>
  102.                             <show_in_store>0</show_in_store>
  103.                         </showmethod>
  104.                         <specificerrmsg translate="label">
  105.                             <label>Displayed Error Message</label>
  106.                             <frontend_type>textarea</frontend_type>
  107.                             <sort_order>80</sort_order>
  108.                             <show_in_default>1</show_in_default>
  109.                             <show_in_website>1</show_in_website>
  110.                             <show_in_store>1</show_in_store>
  111.                         </specificerrmsg>
  112.                     </fields>
  113.                 </flatrateuk>

4.Modify the xml file Mage/Shipping/etc/config.xml and append the following code on to the file

  1. <flatrateuk>
  2.                 <active>1</active>
  3.                 <sallowspecific>0</sallowspecific>
  4.                 <model>shipping/carrier_flatrate1</model>
  5.                 <name>Fixed</name>
  6.                 <price>5.00</price>
  7.                 <title>Flat Rate in UK</title>
  8.                 <type>I</type>
  9.                 <specificerrmsg>This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.</specificerrmsg>
  10.                 <handling_type>F</handling_type>
  11.             </flatrateuk>

Thats it Now clear your cache and go in Admin and alter the Shipping methodes in your way




 

Magento 2 GitHub Repository

Magento Job Board - Some sort of tag line goes here

Latest Posts| View all Jobs