我已爲結帳添加額外費用,但稅款計算不正確。Magento:在結帳時額外費用的稅額有誤
如果我這樣做$ this - > _ calculateTax($ address);在收集功能中,它被累加到包括稅的總額中,但是我的稅額仍然是。
如果是var_dump,那麼在$ line-> setAppliedTaxes($ previouslyAppliedTaxes)之後設置應用稅。我確實看到了正確的數額。它將這兩次轉儲,第一次我看到正確的稅額只是我的額外費用,第二次是正確的總稅額。但是在前端它顯示了我的額外費用沒有稅的稅。
任何線索可能是什麼?
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', max(0, $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>
EDIT 2 我加入以下行我calcTax功能,這也解決了總計不過稅額仍然關閉。
$address->setTaxAmount($tax);
$address->setBaseTaxAmount($baseTax);
輸出 - 例如
Subtotal € 67,50
printPrepCosts € 40,00
Shipping € 50,00
TAX € 22,33
Total € 187,43
編輯3 我的壞,只有GoMage onepage結賬給出正確的總計,車沒有。常規的Magento onepage結賬也會給出錯誤的總計。
什麼是'calcTotalPrepPrintCosts()'的內容是什麼? – B00MER 2012-08-06 20:56:40
罷了然後通過結賬車一個循環,並創建一個準備的價格。我檢查過,這確實返回一個int或float。即使當我刪除函數並將其替換爲硬編碼值時,問題仍然存在。其中功能在Magento「getInvoiceTaxAmount」定義 – PvdL 2012-08-07 07:25:57
「getBaseInvoiceFeeExcludedVat」我找不到在Magento這些功能可以解釋任何人,他們是什麼以及它們是如何使用 – 2013-08-27 07:47:27