Magento: как легко пересчитать налог на данную сумму - PullRequest
1 голос
/ 16 сентября 2011

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

как добиться этого за наименьшее количество шагов.

это код, который я сделал, но понятно, что налоги не пересчитываются, так как я не смог этого сделать:

            $items=$address ;// add is of type Mage_Sales_Model_Quote_Address $address

            foreach ($items->getQuote()->getAllVisibleItems() as $item){
                if ($items->getParentItem()) {
                    continue;
                }
                try{
                    if ($item){
                        $qty        = $item->getTotalQty();
                        $total      = $item->getCalculationPrice()*$qty*2;
                        $baseTotal  = $item->getBaseCalculationPrice()*$qty*2;

                        $item->setRowTotal(Mage::app()->getStore()->roundPrice($total)); 
                        $item->setBaseRowTotal(Mage::app()->getStore()->roundPrice($baseTotal)); 
                        $item->save();
                    }
                }catch (Exception $e){

                }

            }

            $baseTax = ($items->getTaxBeforeDiscount() ? $items->getTaxBeforeDiscount() : ($items->getTaxAmount() ? $items->getTaxAmount() : 0));
            $tax = ($items->getBaseTaxBeforeDiscount() ? $items->getBaseTaxBeforeDiscount() : ($items->getBaseTaxAmount() ? $items->getBaseTaxAmount() : 0));

1 Ответ

0 голосов
/ 16 мая 2017

Вы можете рассчитать ставку налога / НДС, используя адрес «сумма налога и общая сумма.После обновления общей суммы адреса используйте ставку для расчета новой суммы налога.

Взгляните на следующий пример

/* calculate ratio */
$ratio = ($address->getTaxAmount() / $address->getGrandTotal());
$baseRatio = ($address->getBaseTaxAmount() / $address->getBaseGrandTotal());

/* do price changes */
$address->setGrandTotal(...);
$address->setBaseGrandTotal(...);
/* ... */

/* set new tax amount */
$address->setTaxAmount($address->getGrandTotal() * $ratio);
$address->setBaseTaxAmount($address->getBaseGrandTotal() * $baseRatio);

$address->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...