【问题标题】:get round grand total in cart & invoice在购物车和发票中获取总计
【发布时间】:2017-06-23 11:11:28
【问题描述】:

我想要一个四舍五入的总数;我创建了一个自定义模块并重写了核心模型来实现这一点。

我的重写模型代码如下

1. Mage_Sales_Model_Quote_Address_Total_Grand

<?php
class Lr_Roundtotal_Model_Quote_Address_Total_Grand extends Mage_Sales_Model_Quote_Address_Total_Grand
{
    public function collect(Mage_Sales_Model_Quote_Address $address)    
    {        
        $grandTotal     = $address->getGrandTotal();        
        $baseGrandTotal = $address->getBaseGrandTotal();        
        $totals     = array_sum($address->getAllTotalAmounts());        
        $baseTotals = array_sum($address->getAllBaseTotalAmounts());        
        $address->setGrandTotal(round($grandTotal+$totals)); //Modificated        
        $address->setBaseGrandTotal(round($baseGrandTotal+$baseTotals)); //Modificated        
        //$address->setGrandTotal($grandTotal+$totals);  --Original        
        //$address->setBaseGrandTotal($baseGrandTotal+$baseTotals); --Original        
        return $this;    
    } 

    public function fetch(Mage_Sales_Model_Quote_Address $address)    
    {        
        $address->addTotal(array(            
            'code'  => $this->getCode(),            
            'title' => Mage::helper('sales')->__('Grand Total'),            
            'value' => round($address->getGrandTotal()),            
            'netvalue' => round($address->getGrandTotal()),            
            'area'  => 'footer',        
        ));                
        return $this;    
    }   
}

第二个是

2.Mage_Sales_Model_Order_Invoice

<?php
    class Lr_Roundtotal_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice
    {
        public function pay()
        {
            if ($this->_wasPayCalled) {
                return $this;
            }
            $this->_wasPayCalled = true;
    
            $invoiceState = self::STATE_PAID;
            if ($this->getOrder()->getPayment()->hasForcedState()) {
                $invoiceState = $this->getOrder()->getPayment()->getForcedState();
            }
    
            $this->setState($invoiceState);
    
            $this->getOrder()->getPayment()->pay($this);
            $this->getOrder()->setTotalPaid(
                round($this->getOrder()->getTotalPaid()+$this->getGrandTotal())  //Modificated 
                // $this->getOrder()->getTotalPaid()+$this->getGrandTotal()  --Original
            );
            $this->getOrder()->setBaseTotalPaid(
                round($this->getOrder()->getBaseTotalPaid()+$this->getBaseGrandTotal())  //Modificated 
                // $this->getOrder()->getBaseTotalPaid()+$this->getBaseGrandTotal()  --Original
            );
            Mage::dispatchEvent('sales_order_invoice_pay', array($this->_eventObject=>$this));
            return $this;
        }   
    }

例如

购物车

小计:990.00

折扣:120.70

总计:869.00(四舍五入)

发票

小计:990.00

折扣:120.70

总计:869.30(未四舍五入)

我想要购物车和发票中的总计相同

【问题讨论】:

    标签: magento magento-1.9


    【解决方案1】:

    一旦你在本地覆盖核心文件,然后实现下面的代码。

    首先在 HELPER 文件中创建一个函数,如下所示(无需创建新模块,但您可以将此函数放在任何模块帮助文件中):

    Namespace_module_helper_data extends Mage_Core_Helper_Abstract 
    {
       public function getFormatedPrice($price)     
       {
         return Mage::getModel('directory/currency')->format($price, array('display'=>Zend_Currency::NO_SYMBOL), false);    
       } 
    }
    

    那么你可以在 Magento 的任何地方使用这个函数来对价格进行四舍五入。

    你可以使用如下的辅助函数:

    $helper = Mage::helper('modulename'); // module name means name of the module in which you have create helper
    

    使用下面的圆形价格函数:

    $price = 120.12456;
    echo $helper->getFormatedPrice($price); // you can get round price as per your store.
    

    【讨论】:

    • 感谢@Elsner 的回答但是,这不是获取订单或发票总额的正确方法。
    • 你的回答对前端非常有用。由于许多地方的变化,这对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2011-09-23
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多