加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Magento:结帐时额外收费的税收错误

发布时间:2020-12-13 13:24:16 所属栏目:PHP教程 来源:网络整理
导读:我已经为我的结帐添加了额外的费用,但税额没有正确计算. 如果我执行$this- _calculateTax($address),则税额不会正确累加;在收集功能中,它加起来包括税,但我的税额仍然是. 如果是var_dump,则在$address- setAppliedTaxes($previousAppliedTaxes)行之后设置应
我已经为我的结帐添加了额外的费用,但税额没有正确计算.

如果我执行$this-> _calculateTax($address),则税额不会正确累加;在收集功能中,它加起来包括税,但我的税额仍然是.

如果是var_dump,则在$address-> setAppliedTaxes($previousAppliedTaxes)行之后设置应用税;我确实看到了正确的金额.它转储了两次,第一次看到正确的税额只是我的额外费用,第二次是正确的总税额.但是在前端它显示了税收而没有我的额外费用税.

关于这可能是什么的任何线索?

class Company_Customer_Model_Quote_Address_Total_PrintPrepCosts extends Mage_Sales_Model_Quote_Address_Total_Abstract
{
    public function __construct() {
        $this->setCode('printPrepCosts');
        $this->_store = Mage::app()->getStore();
        return $this;
    }

public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        parent::collect($address);
        $address->setPrintPrepcosts(0);
        $address->setTaxAmount(0);
        $address->setBaseTaxAmount(0);

        if(count($address->getAllItems()) == 0)
        {
            return $this;
        }

        $pricePrint = $this->calcTotalPrintPrepCosts();

        $address->setPrintPrepcosts($pricePrint);
        $address->setBasePrintPrepcosts($pricePrint);

        $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getPrintPrepcosts());
        $address->setGrandTotal($address->getGrandTotal() + $address->getPrintPrepcosts());

        $this->_calculateTax($address);
        return $this;
    }

    protected function _calculateTax(Mage_Sales_Model_Quote_Address $address)
    {
        $calculator     = Mage::getSingleton('tax/calculation');
        $inclTax        = Mage::getStoreConfig('tax/calculation/printing_prep_includes_tax',$this->_store);

        $taxRateRequest = $calculator->getRateRequest(
            $address,$address->getQuote()->getBillingAddress(),$address->getQuote()->getCustomerTaxClassId(),$this->_store
        );

        // TODO undef prop _store
        $taxRateRequest->setProductClassId(Mage::getStoreConfig('tax/classes/printing_prep_tax_class',$this->_store));

        $rate = $calculator->getRate($taxRateRequest);
        $baseTax = $tax = $calculator->calcTaxAmount($address->getPrepPrintcosts(),$rate,$inclTax,true);

        $address->addTotalAmount('tax',max(0,$tax));
        $address->addBaseTotalAmount('tax',$baseTax));

        $this->_saveAppliedTaxes($address,$calculator->getAppliedRates($taxRateRequest),$tax,$baseTax,$rate
        );

        // later on added - which fixes the total,lose tax amount still off
        $address->setTaxAmount($tax);
        $address->setBaseTaxAmount($baseTax);

        if($inclTax)
        {
            $address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseTax);
            $address->setGrandTotal($address->getGrandTotal() - $tax);
        }
    }

    protected function _saveAppliedTaxes(Mage_Sales_Model_Quote_Address $address,$applied,$amount,$baseAmount,$rate)
    {
        $previouslyAppliedTaxes = $address->getAppliedTaxes();
        $process = count($previouslyAppliedTaxes);


        foreach ($applied as $row) {
            if (!isset($previouslyAppliedTaxes[$row['id']])) {
                $row['process'] = $process;
                $row['amount'] = 0;
                $row['base_amount'] = 0;
                $previouslyAppliedTaxes[$row['id']] = $row;
            }

            if (!is_null($row['percent'])) {
                $row['percent'] = $row['percent'] ? $row['percent'] : 1;
                $rate = $rate ? $rate : 1;

                $appliedAmount = $amount/$rate*$row['percent'];
                $baseAppliedAmount = $baseAmount/$rate*$row['percent'];
            } else {
                $appliedAmount = 0;
                $baseAppliedAmount = 0;
                foreach ($row['rates'] as $rate) {
                    $appliedAmount += $rate['amount'];
                    $baseAppliedAmount += $rate['base_amount'];
                }
            }


            if ($appliedAmount || $previouslyAppliedTaxes[$row['id']]['amount']) {
                $previouslyAppliedTaxes[$row['id']]['amount'] += $appliedAmount;
                $previouslyAppliedTaxes[$row['id']]['base_amount'] += $baseAppliedAmount;
            } else {
                unset($previouslyAppliedTaxes[$row['id']]);
            }
        }
        $address->setAppliedTaxes($previouslyAppliedTaxes);        
    }

    public function fetch(Mage_Sales_Model_Quote_Address $address)
    {
        $address->addTotal(array(
            'code'  => $this->getCode(),'title' => "Prep Print costs",'value' => $address->getPrintPrepcosts(),));
        return $this;
    }

编辑1
XML包含这个:

<sales>
        <quote>
            <totals>
                <printPrepCosts>
                    <class>Company_Customer_Model_Quote_Address_Total_PrintPrepCosts</class>
                    <after>subtotal</after>
                    <before>tax</before>
                </printPrepCosts>
            </totals>
        </quote>
    </sales>

编辑2
我已经将以下行添加到我的calcTax函数中,这确实修复了总计,但TAX的数量仍然是关闭的.

$address->setTaxAmount($tax);
  $address->setBaseTaxAmount($baseTax);

输出 – 示例

Subtotal                            

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读