cancel
Showing results for 
Search instead for 
Did you mean: 

How to apply magento default function to third party application?

SOLVED

Re: How to apply magento default function to third party application?

FYI -> Actually i tried for Observer, make sure your guide also Observer, if observer means what is my event,

<events>
       <salesrule_rule_save_before>
             <observers>
                 <Gta_ExtraFeesRemove_Model_Observer>
                           <type>singleton</type>
                           <class>Gta_ExtraFeesRemove_Model_Observer</class>
                           <method>beforecheckout</method>
                 </Gta_ExtraFeesRemove_Model_Observer>
           </observers>
    </salesrule_rule_save_before>
</events>

does my events right? <salesrule_rule_save_before>

 

Re: How to apply magento default function to third party application?

Shall i use your code into my app/code/local/Gta/ExtraFeesRemove/Model/Observer.php

 

<?php

class Gta_ExtraFeesRemove_Model_Observer extends Mage_Core_Block_Abstract
{
/**
* Get Source Model
*
* @return mixed
*/
public function getSource()
{
return $this->getParentBlock()->getSource();
}
/**
* Add this total to parent
*/
public function initTotals()
{
 $current_website = Mage::app()->getWebsite()->getId();
 $shipping_method = $this->getSource()->getShippingMethod();

 //Check for shipping method and website
 if($current_website == 2 && $shipping_method == 'flatrate'){
 return $this;
}

/* start custom code */

//if (Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod() === 'flatrate') {
//return $this;
//}
/* end custom code */



if ((float) $this->getSource()->getExtraFeeRuleAmount() <= 0) {
return $this;
}
if ($this->getSource()->getExtraFeeRuleDescription()) {
$discountLabel = $this->__('%s (%s)', Mage::helper('voronoy_extrafee')->getExtraFeeRuleLabel(),
$this->getSource()->getExtraFeeRuleDescription());
} else {
$discountLabel = Mage::helper('voronoy_extrafee')->getExtraFeeRuleLabel();
}
$total = new Varien_Object(array(
'code' => 'extra_fee_rule',
'field' => 'extra_fee_rule_amount',
'value' => $this->getSource()->getExtraFeeRuleAmount(),
'label' => $discountLabel
));
$this->getParentBlock()->addTotalBefore($total, 'grand_total');
return $this;
}
}

Re: How to apply magento default function to third party application?

If i wrong way pls correct me.. Thanks

Re: How to apply magento default function to third party application?

Hello @Aveeva ,

You can use the below code for observer:

<?php 
class Gta_ExtraFeesRemove_Model_Observer {
    public function beforecheckout($observer) {
        $quote = $observer->getEvent()->getQuote();
        $shippingAddress = $quote->getShippingAddress();
        if (!$shippingAddress instanceof Mage_Sales_Model_Quote_Address) {
            return;
        }
        $currentShippingMethod = $shippingAddress->getShippingMethod();
	$current_website = Mage::app()->getWebsite()->getId();
	//Check for shipping method and website 
        if($current_website == 2 && $currentShippingMethod == 'flatrate_flatrate'){
            return $this;
        }
    } 
}

Hope it will work.

Re: How to apply magento default function to third party application?

My complete Observer :

 

app/etc/modules/Gta_ExtraFeesRemove.xml

 

 

<?xml version="1.0"?>
<config>
    <modules>
        <Gta_ExtraFeesRemove>
            <codePool>local</codePool>
            <active>true</active> 
        </Gta_ExtraFeesRemove> 
    </modules>
</config>

 

 

app/code/local/Gta/ExtraFeesRemove/etc/config.xml

 

 

<?xml version="1.0"?>
<config>
    <modules>
        <Gta_ExtraFeesRemove>
            <version>1.0.0</version>
        </Gta_ExtraFeesRemove>
    </modules>
    <global>
        <models>
            <gta_extrafeesremove>
                <class>Gta_ExtraFeesRemove_Model</class>
            </gta_extrafeesremove>
        </models>
    </global>
    <frontend>
        <events>
            <salesrule_rule_save_before>
                <observers>
                    <Gta_ExtraFeesRemove_Model_Observer>
                        <type>singleton</type>
                        <class>Gta_ExtraFeesRemove_Model_Observer</class>
                        <method>beforecheckout</method>
                    </Gta_ExtraFeesRemove_Model_Observer>
                </observers>
            </salesrule_rule_save_before>
        </events>
    </frontend>
</config>

 

 

app/code/local/Gta/ExtraFeesRemove/Model/Observer.php

 

 

<?php 
class Gta_ExtraFeesRemove_Model_Observer {
    public function beforecheckout($observer) 
    {
        $quote = $observer->getEvent()->getQuote();
        $shippingAddress = $quote->getShippingAddress();
        if (!$shippingAddress instanceof Mage_Sales_Model_Quote_Address)
        {
            return;
        }

        $currentShippingMethod = $shippingAddress->getShippingMethod();
	    $current_website = Mage::app()->getWebsite()->getId();
        //Check for shipping method and website 
        
        if($current_website == 2 && $currentShippingMethod == 'flatrate')
        {
            return $this;
        }
    } 
}

 

 

FYI -> I found my available shipping method by following way,

 

 

<?php
require_once('app/Mage.php'); 
umask(0);
Mage::app();

$website_id = Mage::app()->getWebsite(2)->getDefaultGroup()->getDefaultStoreId();
Mage::app()->setCurrentStore($website_id);


$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
$shipMethods = array();

foreach ($methods as $shippigCode=>$shippingModel)
    {
        $shippingTitle = Mage::getStoreConfig('carriers/'.$shippigCode.'/title');
        $shipMethods[$shippigCode] = $shippingTitle;
    }
    
Mage::log($shipMethods, null, 'logfile.log');

?>

 

 

output :

 

(
   [flatrate] => Pick From Store
   [m2eproshipping] => M2E Pro Shipping
   [sendle] => Sendle Shipping Method 
   [customshipprice] => Custom Shipping Price
)
Still not working, if i choose pick from store :
 
 
still extra fees adding :
 
 
 

Re: How to apply magento default function to third party application?

@Sarvagya Pandey  Anything else i need to update?

Re: How to apply magento default function to third party application?

Hello @Aveeva ,

Actually salesrule_rule_save_before is not triggered. So please override the file https://github.com/yvoronoy/magento-extension-extra-fee/blob/master/app/code/local/Voronoy/ExtraFee/...

and update the collect function as : 

public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        if (!Mage::helper('voronoy_extrafee')->isRuleExtraFeeEnabled()) {
            return $this;
        }
        parent::collect($address);
        $quote = $address->getQuote();
        $shipping_method = $quote->getShippingAddress()->getShippingMethod();

        /* Flat Rate Condition Start*/
        if($shipping_method != 'flatrate_flatrate'):
            $store = Mage::app()->getStore($quote->getStoreId());
            $this->_calculator->reset($address);

            $items = $this->_getAddressItems($address);
            if (!count($items)) {
                return $this;
            }

            $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $quote->getCouponCode());
            $this->_calculator->initTotals($items, $address);

            $items = $this->_calculator->sortItemsByPriority($items);
            foreach ($items as $item) {
                if ($item->getParentItemId()) {
                    continue;
                }
                if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                    foreach ($item->getChildren() as $child) {
                        $this->_calculator->process($child);
                        $this->_addAmount($child->getExtraFeeRuleAmount());
                        $this->_addBaseAmount($child->getBaseExtraFeeRuleAmount());
                    }
                } else {
                    $this->_calculator->process($item);
                    $this->_addAmount($item->getExtraFeeRuleAmount());
                    $this->_addBaseAmount($item->getBaseExtraFeeRuleAmount());
                }
            }
            $this->_calculator->prepareDescription($address);
        endif;
        / Flat Rate Condition End /
    }

I hope this will work for you.

 

Re: How to apply magento default function to third party application?

@Sarvagya Pandey  Just for clarification, where i put above code? in observer?

 

Re: How to apply magento default function to third party application?

No, firstly please apply the code in app/code/local/Voronoy/ExtraFee/Model/Quote/Address/Total/Fee/Rule.php#L44 and test that is it works for you.

If it works then please create a custom module and override this file in you module.

For model rewrite in custom module you can take help from https://code.tutsplus.com/tutorials/understand-overriding-in-magento-models--cms-23354

Hope this will help you.

Re: How to apply magento default function to third party application?

app/code/local/Voronoy/ExtraFee/Model/Quote/Address/Total/Fee/Rule.php

 

<?php
/**
 * Magento Extra Fee Extension
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @copyright Copyright (c) 2015 by Yaroslav Voronoy (y.voronoy@gmail.com)
 * @license   http://www.gnu.org/licenses/
 */

class Voronoy_ExtraFee_Model_Quote_Address_Total_Fee_Rule extends Mage_Sales_Model_Quote_Address_Total_Abstract
{
    /**
     * Discount calculation object
     *
     * @var Mage_SalesRule_Model_Validator
     */
    protected $_calculator;

    /**
     * Initialize discount collector
     */
    public function __construct()
    {
        $this->_calculator = Mage::getSingleton('voronoy_extrafee/salesRule_validator');
    }

    /**
     * @param Mage_Sales_Model_Quote_Address $address
     *
     * @return Mage_Sales_Model_Quote_Address_Total_Abstract
     */

    public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        if (!Mage::helper('voronoy_extrafee')->isRuleExtraFeeEnabled()) {
            return $this;
        }
        parent::collect($address);
        $quote = $address->getQuote();
        $shipping_method = $quote->getShippingAddress()->getShippingMethod();

        /* Flat Rate Condition Start*/
        if($shipping_method != 'flatrate'):
            $store = Mage::app()->getStore($quote->getStoreId());
            $this->_calculator->reset($address);

            $items = $this->_getAddressItems($address);
            if (!count($items)) {
                return $this;
            }

            $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $quote->getCouponCode());
            $this->_calculator->initTotals($items, $address);

            $items = $this->_calculator->sortItemsByPriority($items);
            foreach ($items as $item) {
                if ($item->getParentItemId()) {
                    continue;
                }
                if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                    foreach ($item->getChildren() as $child) {
                        $this->_calculator->process($child);
                        $this->_addAmount($child->getExtraFeeRuleAmount());
                        $this->_addBaseAmount($child->getBaseExtraFeeRuleAmount());
                    }
                } else {
                    $this->_calculator->process($item);
                    $this->_addAmount($item->getExtraFeeRuleAmount());
                    $this->_addBaseAmount($item->getBaseExtraFeeRuleAmount());
                }
            }
            $this->_calculator->prepareDescription($address);
        endif;
        // / Flat Rate Condition End /
    }
    

    /**
     * Fetch Totals
     *
     * @param Mage_Sales_Model_Quote_Address $address
     *
     * @return Voronoy_ExtraFee_Model_Quote_Address_Total_Fee_Rule
     */
    public function fetch(Mage_Sales_Model_Quote_Address $address)
    {
        if (!Mage::helper('voronoy_extrafee')->isRuleExtraFeeEnabled()) {
            return $this;
        }
        $amount = $address->getExtraFeeRuleAmount();
        if ($address->getExtraFeeRuleDescription()) {
            $discountLabel = Mage::helper('voronoy_extrafee')->__('%s (%s)',
                Mage::helper('voronoy_extrafee')->getExtraFeeRuleLabel(), $address->getExtraFeeRuleDescription());
        } else {
            $discountLabel = Mage::helper('voronoy_extrafee')->getExtraFeeRuleLabel();
        }

        if ($amount > 0) {
            $address->addTotal(array(
                'code'  => $this->getCode(),
                'title' => $discountLabel,
                'value' => $amount
            ));
        }
        return $this;
    }
}

still not working.