Показывать цену без налогов во внешнем интерфейсе для группы клиентов

magento.stackexchange https://magento.stackexchange.com//questions/58794

Вопрос

Я хотел бы показать цену без налогов в каталоге для клиентов B2B, но рассчитывать с налогами, как обычно.

Я знаю, что это можно сделать с помощью второго представления магазина, но возможно ли это без второго представления?

Это было полезно?

Решение

Даже если на этот вопрос принят ответ, я хочу дать несколько дополнительных советов:

Поскольку я не создал наблюдателя, а клонировал app/code/core/Mage/Tax/Model/Config.php на локальный, я изменил getPriceDisplayType функция с некоторыми доп.

Принятый ответ проверяет только идентификатор группы.Я пошел дальше и проверил TaxClassId.На данный момент это жестко запрограммировано, но это можно сделать и через настройку конфигурации в бэкэнде, если обернуть его в наблюдателя или расширение.

Мои модифицированные функции выглядят так

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);
    }
}

Это сделало все, что мне было нужно, и до сих пор у меня не было отображения или логической «ошибки».

Настройки немного «немецкие», так как общие итоги отображаются с учетом налогов, тогда как другие значения указаны без налогов.Надеюсь, это поможет и другим.

Другие советы

Перейти к системе> Конфигурация> Налог и там, ищите последнюю вкладку «Дисплей».В разделе «Цены на продукцию» выбирают «в том числе и исключая налог», а затем сохранить конфин.

На основе https://github.com/astorm/Хаос Я создал наблюдателя, который меняет значение конфигурации tax/calculation/price_includes_tax для временного отображения цен без налога в зависимости от страницы и группы пользователей.

Здесь мало комментариев, но это может кому-то помочь:

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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top