2

我终于在我的网站上获得了增值税(税),价格被输入到含税目录中。然后决定输入不含税的值。一个小 SQL 允许我更改所有存储的价格,但是,当显示目录页面时,显示的值是错误的......税收被应用了两次!

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

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

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

我看到(在模板/目录/产品/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

4

2 回答 2

1

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

特别是在我的情况下,我使用的是包含税的目录价格,并且我发现Mage_Sales_Model_Quote_Address_Total_Subtotal::collect()在Mage_Tax_Model_Sales_Total_Quote_Subtotal::collect()之前运行,您可以理解查看表sales_flat_quote_item时的相同问题,当base_price字段正确设置了不含税的价格值,并且价格字段设置了价格总值(含税)。

您可以在 app/code/core/Mage/Sales/Model/Quote/Address.php 中的第 1004 行附近检查每个总计的 collect 方法的执行顺序

/**
 * 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 让我的一天总是更有趣!

于 2016-03-08T14:47:08.610 回答
0

在管理中去settings > sales > tax > calculation-

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

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

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

你也可以扔掉所有的内部标签来计算税收。

我希望它一定会帮助你

于 2013-07-11T10:15:33.423 回答