получить общую сумму в корзине и счете-фактуре

Я хочу округлить общую сумму. Итак, я создал собственный модуль и переписал основные модели.

Мой код модели перезаписи ниже

<сильный>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 (без округления)

Я хочу, чтобы общая сумма в корзине и в счете-фактуре была одинаковой. Пожалуйста, помогите мне.

заранее спасибо


person Milan Gajjar    schedule 23.06.2017    source источник


Ответы (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.

Спасибо

person Elsner Magento Development    schedule 26.06.2017
comment
Спасибо @Elsner за ваш ответ. Но это неправильный способ обойти сумму в заказе или счете-фактуре. - person Milan Gajjar; 26.06.2017
comment
Ваш ответ очень полезен для интерфейса. Это не сработает для меня из-за изменений во многих местах. - person Milan Gajjar; 26.06.2017