3

我们运行一个基于 Magento 的电子商务网站。它正在运行 Magento Enterprise 1.10。

我们在英国 - 所以我们喜欢显示所有价格,包括税 (VAT)。我们的商店设置了包含增值税的输入价格,Magento 在结帐时反算增值税。

该网站使用内置的企业奖励积分功能,并为客户每消费 1​​ 英镑提供 10 积分。

显示奖励积分(目前在目录和购物篮中使用函数“echo $this->getRewardPoints()”)显示包含税的奖励积分(因此 £15 = 150 积分)但在结帐时,使用相同的函数显示项目的潜在积分计算项目的奖励积分减去税(因此 15 英镑 = 120 积分)。

下订单后,奖励积分将添加到客户帐户中减去税款。这显然让用户感到困惑。

作为一项临时措施,我已停止在

我们正在寻找:

a)让 Magento 始终显示包含增值税的积分 - 并在下订单时添加正确数量的积分(并保持积分 - 英镑比率不变) b)让 Magento 始终显示和添加不包括增值税的积分 - 因此我们会把积分-磅比提高来补偿。

对此的任何帮助或指示将不胜感激。

4

2 回答 2

2

我有一个客户也需要这个,所以我编写了一个自定义模块,它覆盖了仅计算税前奖励的函数,允许它也计算价格+税。我刚刚在奖励配置区域添加了一个新选项,以允许计算包括税是或否。

不想经历描述如何创建自定义模块的过程(有很多资源),但执行计算的实际函数在这个文件中:code/core/enterprise/reward/model/action /OrderExtra.php

如果您想快速而肮脏地进行操作,请找到 getPoints 函数并将 $monetaryAmount 计算更改为(如果有 $quote):

$monetaryAmount = $quote->getBaseGrandTotal() - $address->getBaseShippingAmount();

和(如果没有 $quote)

$monetaryAmount = $this->getEntity()->getBaseTotalPaid() - $this->getEntity()->getBaseShippingAmount();

希望有帮助!

编辑: getPoints 函数的实际代码应如下所示:

if ($this->_quote) {
        $quote = $this->_quote;
        // known issue: no support for multishipping quote
        $address = $quote->getIsVirtual() ? $quote->getBillingAddress() : $quote->getShippingAddress();
        // use only money customer spend - shipping & tax
        $monetaryAmount = $quote->getBaseGrandTotal() - $address->getBaseShippingAmount();

        // *****CALCULATE POINTS INCLUDING TAX
        $monetaryAmount -= $address->getBaseTaxAmount();

        // set points to 0 if calcualtion is negative
        $monetaryAmount = $monetaryAmount < 0 ? 0 : $monetaryAmount;
    } else {
      // use only money customer spend - shipping
        $monetaryAmount = $this->getEntity()->getBaseTotalPaid() - $this->getEntity()->getBaseShippingAmount();

        // *****CALCULATE POINTS INCLUDING TAX
        $monetaryAmount -= $this->getEntity()->getBaseTaxAmount();
    }
于 2013-02-07T16:03:21.007 回答
1

遇到了同样的问题,但发现只删除运费税更简单。

$monetaryAmount = $quote->getBaseGrandTotal()
- $address->getBaseShippingAmount()
- $address->getBaseShippingTaxAmount();

并更改 else 函数。完美运行

$monetaryAmount = $this->getEntity()->getBaseTotalPaid()
- $this->getEntity()->getBaseShippingAmount()
- $this->getEntity()->getBaseShippingTaxAmount();
于 2013-04-26T16:57:26.993 回答