Pergunta

Gostaria de mostrar o preço sem impostos no catálogo para clientes B2B, mas calcular com impostos normalmente.

Eu sei que isso pode ser feito com uma segunda visualização da loja, mas é possível sem uma segunda visualização?

Foi útil?

Solução

Mesmo que seja uma pergunta aceita como resposta, quero dar alguns conselhos adicionais:

Como não criei um observador, mas sim clonei app/code/core/Mage/Tax/Model/Config.php para local, mudei o getPriceDisplayType função com alguns adicionais.

A resposta aceita verifica apenas o ID do grupo.Fui mais longe e verifiquei o TaxClassId.Agora já está codificado, mas também pode ser feito por meio de uma configuração no back-end, quando agrupado em um observador ou extensão.

Minhas funções modificadas se parecem

public function getPriceDisplayType($store = null)
{
    $customerGroupId = Mage::getModel('customer/customer')->getGroupId();
    $customerGroup = Mage::getModel('customer/group')->load($customerGroupId);
    $customerTaxId = $customerGroup->getTaxClassId($customerGroupId);

    if ($customerTaxId == 5) {
        $this->changeConfigTemp('tax/cart_display/price', '1');
        $this->changeConfigTemp('tax/cart_display/subtotal', '1');
        $this->changeConfigTemp('tax/display/type', '1');
        $this->changeConfigTemp('tax/sales_display/price', '1');
        $this->changeConfigTemp('tax/sales_display/subtotal', '1');
        $this->changeConfigTemp('tax/display/show_in_catalog', '1');
    } else {
        return (int)$this->_getStoreConfig(self::CONFIG_XML_PATH_PRICE_DISPLAY_TYPE, $store);
    }
}

Isso fez tudo que eu precisava e não tive nenhuma exibição ou "erro" lógico até agora.

As configurações são um pouco 'alemãs', pois os totais gerais são exibidos incluindo impostos, enquanto outros valores são sem impostos.Espero que isso ajude outras pessoas também.

Outras dicas

Vá para Sistema> Configuração> Imposto e lá, procure a última guia "Display".Em "O preço dos produtos de exibição" escolhe "incluindo e excluindo o imposto" e depois salve a configuração.

Baseado em https://github.com/astorm/Chaos Eu criei um observador que altera o valor de configuração de tax/calculation/price_includes_tax para mostrar preços temporários sem impostos, dependendo da página e do grupo de usuários.

São poucos comentários, mas pode ajudar alguém:

class YourThing_TaxChanger_Model_Observer
{
    static protected $_hasRun = false;

    public function setup($observer)
    {
        if($this->_shouldBail($observer))
        {
            return;
        }

        $roleId = Mage::getSingleton('customer/session')->getCustomerGroupId();
        //echo Mage::getSingleton('customer/group')->load($roleId)->getData('customer_group_code');
        $page = Mage::app()->getFrontController()->getRequest()->getControllerName();

        // check user group and page
        if ($roleId == 2 && (in_array($page, array('product', 'category', 'result'))))
        {
            // show price without tax
            $this->changeConfigTemp('tax/calculation/price_includes_tax', '1');
            // germansetup tax info
            //$this->changeConfigTemp('tax/sales_display/price', Mage_Tax_Model_Config::DISPLAY_TYPE_EXCLUDING_TAX);
        }
    }

    /**
     * Change a config value without saving it.
     */
    protected function changeConfigTemp($path, $value)
    {
        $config = Mage::getConfig();
        $store = Mage::app()->getStore();
        $code  = $store->getCode();
        $config->setNode("stores/$code/" . $path, $value);
    }

    protected function _shouldBail($observer)
    {
        $config = Mage::getConfig();
        if(!$config)
        {
            return true;
        }
        if(Mage::app()->getStore()->isAdmin())
        {
            return true;
        }

        return false;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top