2012-08-08 39 views
5

我有一些舍入與貝寶和Magento 1.7.0.2的問題 - 網站上的所有價格包括稅和20%(增值稅)的稅收制定。Magento和貝寶稅四捨五入問題

我會去收銀臺,一切都是正確的:

enter image description here

我會再點擊下訂單,並支付寶將是這樣的,這是不正確,因爲現在總計爲1P少。這似乎是稅收四捨五入的原因。

enter image description here

在某些情況下,它工作正常,但在其他的稅是不正確四捨五入。我試圖在更改稅計算方法calcTaxAmount()在應用程序/代碼/核心/法師/稅/型號/ Calculation.php

我已將此添加到calcTaxAmount方法,其似乎解決它,但是它導致產品頁面上的價格不正確(減少1p)。

$amount = $this->roundUp($amount);

我敢肯定這是一個錯誤,但我的想法。如果有人遇到過這個問題,並有解決方案,我很樂意聽到它。任何幫助非常感謝。

編輯:這是我的稅設置在Magento

enter image description here

+0

管理員中的稅務計算設置是什麼? – 2012-08-09 08:49:00

+0

我將添加稅收設置的屏幕截圖到我的文章。 – 2012-08-09 09:52:20

+1

嘗試根據單價更改稅額計算。我認爲這將與英國的稅法更加兼容。如果它沒有幫助,我會指出你可以改變的地方。 – 2012-08-09 09:59:53

回答

2

我想我已經找到了解決這個問題困擾着社會。

如果您的價格含稅,稅額計算是錯誤的。

這裏的修復 - 在Mage_Tax_Model_Calculation :: calcTaxAmount():

變化的條件:

if ($priceIncludeTax)... 

到:

if (! $priceIncludeTax) ... 

所以病情看起來像:

if (! $priceIncludeTax) { 
    $amount = $price*(1-1/(1+$taxRate)); 
} else { 
    $amount = $price*$taxRate; 
} 

有關詳細信息,請查看我的評論:http://www.magentocommerce.com/boards/viewthread/247201/P45/

切記不要修改核心文件 - 創建本地

我「固定」今天這個
+0

感謝Mike的貢獻,我會給這個嘗試。 – 2012-10-23 10:16:44

+0

這是行不通的。我建議遵循http://www.magentocommerce.com/boards/viewthread/247201/P45/#t415016 – Jaro 2012-11-23 13:47:16

+0

這可以解決它有時,但並非總是如此。此外,它可以顯示一個錯誤,一旦你從PayPal返回/將該訂單標記爲欺詐。搜索繼續.. – Willster 2015-04-29 15:08:55

2

副本我的客戶,但與解決方案不是真正的快樂。但它的工作。

這是更好,如果你把這個文件拷貝到本地文件夾: 應用程序/代碼/核心/法師/貝寶/型號/原料藥/ Nvp.php

我加入這個代碼(僅適用於快速結賬)在606行,所以它看起來像這樣。

$request['SHIPPINGAMT'] = ($request['AMT'] - ($request['TAXAMT'] + $request['ITEMAMT'])); 

$response = $this->call(self::SET_EXPRESS_CHECKOUT, $request); 
$this->_importFromResponse($this->_setExpressCheckoutResponse, $response); 

而且你需要在貝寶MOULE在後端轉移載臺車的訂單項

如果有人知道一個更好的解決方案則正好覆蓋shippingcost讓我知道

1

這個問題一直困擾着我(並且看起來它是magento社區很長一段時間),這要感謝ShopWorks向正確的方向推進(包括他的代碼片段,謝謝隊友!)但是,如果從快遞返回購物車查。那樣,$請求參數中添加了檢查,以防止這種情況),我想出了以下修補程序(/黑客):

在Nvp.php的606線放置以下:

$totalValue = $request['TAXAMT'] + $request['ITEMAMT']; 
$finalValue = $totalValue - $request['AMT']; 

if($request['SHIPPINGAMT'] > 0) { 
    $request['SHIPPINGAMT'] = ($request['AMT'] - ($request['TAXAMT'] + $request['ITEMAMT'])); 
    $totalValue = $request['TAXAMT'] + $request['ITEMAMT'] + $request['SHIPPINGAMT']; 
    $finalValue = $totalValue - $request['AMT']; 
} 

if($request['AMT'] != $totalValue) { 
    if($totalValue > $request['AMT']) { 
     $request['TAXAMT'] = $request['TAXAMT'] - $finalValue; 
    } elseif($totalValue < $request['AMT']) { 
     $request['TAXAMT'] = $request['TAXAMT'] + $finalValue; 
    } else { 
     $request['AMT'] = $request['TAXAMT'] + $request['ITEMAMT']; 
    } 
} 

此外,以下需要被也被放置在()函數調用(Nvp.php的線938)內:

$totalValue = $request['TAXAMT'] + $request['ITEMAMT'] + $request['SHIPPINGAMT']; 
$finalValue = $totalValue - $request['AMT']; 

if($request['AMT'] != $totalValue) { 
    if($totalValue > $request['AMT']) { 
     if($finalValue > 0) { 
      // its preferable that we change the tax amount over the grand total amount 
      $request['TAXAMT'] = $request['TAXAMT'] - $finalValue; 
     } else { 
      $request['AMT'] = $totalValue; 
     } 
    } elseif($totalValue < $request['AMT']) { 
     if($finalValue > 0) { 
      // its preferable that we change the tax amount over the grand total amount 
      $request['TAXAMT'] = $request['TAXAMT'] + $finalValue; 
     } else { 
      $request['AMT'] = $totalValue; 
     } 
    } else { 
     $request['AMT'] = $totalValue; 
    } 
} 

這是一個劈,並把它當作這樣。我的同事目前正在對其進行測試,但目前似乎沒問題,按單位價格設置計稅方法也很有幫助(我們的會計師對此安排感到滿意,但這是英國的,我不確定是否其他國家將對這種特殊的稅收計算方法感到不滿)。

我操縱$ request ['AMT']的原因是因爲偶爾計算$ finalValue變量會產生一個-0.9999的重複整數,對任何人都沒有用,我的數學很糟糕,所以如果有人想要改善這一點,請這樣做!

一如既往不會覆蓋核心目錄中的nvp.php,請創建一個單獨的重寫模塊或在app/local/mage中執行此操作。第一選擇最好! :-)

+0

這解決了我的問題在1.8.1.0(轉移車行項目必須設置爲否!)只測試了幾個小時,但沙發看起來不錯... – loeffel 2014-04-28 13:34:04

+0

只需升級到1.9.1.0你看,這仍然是一個問題!沒有把這個覆蓋轉移到1.9代碼庫認爲他們會修正它,男孩是我錯了! – evensis 2015-02-05 15:35:34

+0

這對我有點幫助,但是當我們從PayPal Express返回到Magento確認頁面時,仍然存在問題:「購物車項目總數與訂單金額不匹配」。 PayPal也可以將這些交易標記爲欺詐行爲。 – Willster 2015-04-29 15:59:32

1

在magento模塊的Paypal上有一個「bug」(至少在我的Magento 1.8.0上); 它位於Mage_Paypal_Model_Cart類。

要驗證金額是否正確,線路381總結了所有項目的價格從訂單的方法_validate(),加上運費和稅,並將結果與​​訂單的總價值進行比較(從訂單方法getBaseGrandTotal()了)

但有時候,有一個0.009999999999999999之間的差額(它必須來自不同的舍入方法,我不知道);所以項目無效,並且來自行146的方法getItems()返回false。

在我的情況下,這導致客戶在其訂單上支付不同的金額和「欺詐嫌疑」標誌。

我固定它通過改變從比較方法(線404):

if (sprintf('%.4F', $sum) == sprintf('%.4F', $referenceAmount)) { 
    $this->_areItemsValid = true; 
} 

$diff = abs(sprintf('%.4F', $sum) - sprintf('%.4F', $referenceAmount)); 

if ($diff < 0.01) { 
    $this->_areItemsValid = true; 
} 

我仍然希望不會有超過0.009999999在未來的diff。 ..

希望這會有所幫助。

-1

我只是將轉移車行項目更改爲「否」,沒有上述代碼更改..它工作。

Magento的1.9.0.1

只是FYI - 測試它是否適合你。

德米特羅

0

我使用CE1.7.0.2並一直停留在這個問題上天,嘗試了幾種解決方案,並最終降落在亞當·霍爾的修復/黑客。理想的情況對我來說很合理,所以我將它應用到了我的網站上,一切進展順利,直到今天上午,我意識到調整稅額對我們的情況不起作用。

我們在加利福尼亞州銷售美國各州,加利福尼亞州的客戶將收取銷售稅,而其他人則不收取銷售稅。因此,當稅額爲零並且必須減去差額時,它會產生一個負的稅額,這顯然會被貝寶拒絕。所以減去稅額差異的時候,我增加了一個條件語句

if ($request['TAXAMT'] > 0) { 
    $request['TAXAMT'] = $request['TAXAMT'] - $finalValue; 
} else { 
    $request['SHIPPINGAMT'] = $request['SHIPPINGAMT'] - $finalValue; 
} 

如果稅額爲零,我會調整發貨量,而不是稅額。 (當然,如果稅收和運費都是免費的,這是行不通的,但我認爲這不會發生在真正的企業中。)希望這可以幫助那些和我們有同樣問題的人。