Mostrar preço sem impostos no frontend para grupo de clientes
-
12-12-2019 - |
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?
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;
}
}