Magento两次使用税(VAT)

时间:2013-07-11 09:54:44

标签: magento

我终于在我的网站上工作了增值税(税),价格在目录INCLUSIVE税中输入。然后决定输入值EXCLUSIVE of tax。一个小SQL允许我更改所有存储的价格,但是,当显示目录页面时,显示错误的值...税正在应用两次!

税率为20%,如果产品的税收独家价格为10英镑,则显示为独家税,12.00英镑和含税14.40英镑。

如果我点击产品,那么产品页面会显示10英镑和12英镑的正确值。

显示目录价格的模板是catalog / product / price.phtml,在那里我看到了我不理解的代码(即我认为它是正确的,因为这是一个很好用的产品,但它没有意义我!)

我看到(在template / catalog / product / price.phtml中),首先,变量被设置......

$_price = $_taxHelper->getPrice($_product, $_product->getPrice())
$_finalPrice = $_taxHelper->getPrice($_product, $_product->getFinalPrice())
$_finalPriceInclTax = $_taxHelper->getPrice($_product, $_product->getFinalPrice(), true)

和调试语句显示这些将按预期返回10.00英镑和12.00英镑 - 然后是14.40英镑(不像预期的那样!)。

此外,在输出值的地方,我看到......

   <span class="price-excluding-tax <?=$groupclass?>">
        <span class="label"><?php echo $this->helper('tax')->__('Excl. Tax:') ?></span>
        <span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
              <?php if ($_finalPrice == $_price): ?>
                    <?php echo $_coreHelper->currency($_price, true, false) ?>
              <?php else: ?>
                    <?php echo $_coreHelper->currency($_finalPrice, true, false) ?>
              <?php endif; ?>
        </span>
   </span>

所以在我看来,最终价格实际上应该是独家价格,但实际上包括税,然后再加入!

这似乎是机制,但我认为我在某个地方设置错误或者其他人在此之前很久就会大喊大叫!

在配置中,我已经确定目录价格不含税,原产国和默认目的地都是英国。

那我错过了什么? 这是Magento 1.7.0.2

2 个答案:

答案 0 :(得分:0)

在管理中转到settings > sales > tax > calculation -

这里将“税基于”设置为最后一项(包裹来源或类似的东西)。 条款并不完美,

或者您可以根据需要在购物车中更改设置。

如果您的代码完美,那么您只是缺少一些配置。

此外,您可以将所有内部标签投入税收计算。

我希望它一定能帮到你

答案 1 :(得分:0)

我也在这个问题上花了几天时间,我意识到有时总计会以错误的顺序收集。

特别是在我的情况下,我使用的目录价格包含税,我想出 Mage_Sales_Model_Quote_Address_Total_Subtotal :: collect() Mage_Tax_Model_Sales_Total_Quote_Subtotal :: collect()之前运行,当 base_price 字段正确设置时,您可以理解同样的问题 sales_flat_quote_item 不含税的价格值和 价格 字段使用价格总值(包括税)进行设置。

您可以检查app / code / core / Mage / Sales / Model / Quote / Address.php中每个总计的收集方法的执行顺序#1004行

/**
 * Collect address totals
 *
 * @return Mage_Sales_Model_Quote_Address
 */
public function collectTotals()
{
    Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_before', array($this->_eventObject => $this));
    foreach ($this->getTotalCollector()->getCollectors() as $model) {
        // this is the loop where totals are collected
        $model->collect($this);
    }
    Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_after', array($this->_eventObject => $this));
    return $this;
}

修复此类问题,您必须在自定义模块的config.xml中定义总计在必要时定义<after><before>的依赖项

<config>

    ...

    <global>
        <sales>
            <quote>
                <totals>
                    <tax_subtotal>
                        <class>tax/sales_total_quote_subtotal</class>
                        <after>subtotal,nominal,shipping,freeshipping</after>
                        <before>tax,discount</before>
                    </tax_subtotal>
                </totals>
            </quote>
        </sales>
    </global>

    ...

</config>

再次感谢Magento让我的一天变得更有趣!