2012-08-08 13 views
5

मेरे पास पेपैल और Magento 1.7.0.2 के साथ कुछ गोल करने के मुद्दे हैं - साइट पर सभी कीमतों में कर और कर 20% (वैट) पर काम किया जाता है।Magento और पेपैल टैक्स राउंडिंग समस्या

मैं चेकआउट करने के लिए जाना होगा और सब कुछ सही है:

enter image description here

मैं तो जगह आदेश पर क्लिक करेंगे, और Paypal इस है, जो सही नहीं है क्योंकि महायोग अब 1p कम है की तरह हो जाएगा। ऐसा लगता है कि कर कैसे गोल किया जाता है।

enter image description here

कुछ मामलों में, यह ठीक काम करता है, लेकिन दूसरों में कर गलत तरीके से गोल है। मैं कर गणना पद्धति calcTaxAmount() एप्लिकेशन/कोड/कोर/दाना/कर/मॉडल में/Calculation.php

मैं calcTaxAmount विधि है जो यह तय करने के लिए लग रहा था पर जोड़ा में बदलाव करना की कोशिश की है, लेकिन यह उत्पाद पृष्ठ पर कीमतें तब गलत हो सकती हैं (1 पी कम)।

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

मैं बहुत कुछ यह एक बग है हूँ, लेकिन मैं विचारों से बाहर हूँ। अगर कोई इस से पहले आया है और समाधान है तो मुझे यह सुनकर खुशी होगी। किसी भी मदद की बहुत सराहना की।

संपादित करें: यहाँ मुझे लगता है कि मैं इस मुद्दे समुदाय नाक में दम का हल मिल गया है Magento में

enter image description here

+0

व्यवस्थापक में आपकी कर गणना सेटिंग्स क्या है? –

+0

मैं अपनी पोस्ट में टैक्स सेटिंग्स का एक स्क्रीनशॉट जोड़ूंगा। –

+1

इकाई मूल्य के आधार पर कर गणना बदलने का प्रयास करें। मुझे लगता है कि यह ब्रिटेन कर कानून के साथ अधिक संगत होगा। यदि यह मदद नहीं करेगा, तो मैं आपको उन स्थानों को इंगित करूंगा जहां इसे बदलना संभव है। –

उत्तर

2

मेरी कर सेटिंग कर रहे हैं।

यदि आपकी कीमतों में कर शामिल है, कर गणना गलत है।

यहाँ ठीक है - Mage_Tax_Model_Calculation में :: calcTaxAmount():

परिवर्तन हालत:

if ($priceIncludeTax)... 

रहे हैं:

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

if (! $priceIncludeTax) ... 

तो हालत की तरह दिखता है

जानकारी के लिए, मेरी टिप्पणी की जाँच: http://www.magentocommerce.com/boards/viewthread/247201/P45/

कोर फ़ाइलों को संशोधित करने के लिए नहीं याद रखें - मैं ग्राहक के लिए स्थानीय

+0

योगदान माइक के लिए धन्यवाद, मैं इसे एक कोशिश कर दूंगा। –

+0

यह काम नहीं करता है। मैं http://www.magentocommerce.com/boards/viewthread/247201/P45/#t415016 – Jaro

+0

का पालन करने का सुझाव देता हूं, यह कभी-कभी इसे ठीक कर सकता है, लेकिन हमेशा नहीं। पेपैल से वापस आने के बाद/धोखाधड़ी के रूप में ऑर्डर को ध्वजांकित करने के बाद भी यह एक त्रुटि दिखा सकता है। खोज जारी है .. – Willster

2

मैं आज "निर्धारित" में एक प्रतिलिपि बनाने लेकिन समाधान के साथ बहुत खुश नहीं। लेकिन यह काम करता है।

यदि आप अपने स्थानीय फ़ोल्डर में इस फ़ाइल की प्रतिलिपि यह बेहतर है: एप्लिकेशन/कोड/कोर/दाना/Paypal/मॉडल/एपीआई/Nvp.php

मैं इस कोड (केवल एक्सप्रेस चेकआउट के लिए) जोड़ा लाइन 606 पर ऐसा लगता है।

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

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

और आप बैकएंड में paypal मॉल में स्थानांतरण कार्ट लाइन आइटम का चालू करने की आवश्यकता

किसी एक बेहतर समाधान जानता है तो बस अधिलेखन मुझे पता है shippingcost

1

यह समस्या मुझे परेशान कर रही है (और इसे उम्र के लिए Magento समुदाय के रूप में देखकर), शॉपवॉर्क्स को सही दिशा में धक्का देने के लिए धन्यवाद (उसके कोड स्निपेट सहित, धन्यवाद दोस्त! हालांकि यह एक्सप्रेस से कार्ट में वापस जाने पर बग आउट होगा चेक

$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 की लाइन 606 पर निम्नलिखित जगह: मैं निम्नलिखित फिक्स (/ हैक) के साथ आया था बाहर, एक जांच में $ अनुरोध पैरामीटर के इसे रोकने के लिए जोड़ा गया)। इसके अतिरिक्त, निम्नलिखित भी कॉल() फ़ंक्शन (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; 
    } 
} 

यह एक हैक है, और इस तरह के रूप में यह व्यवहार करते हैं। मेरा सहयोगी वर्तमान में इसका परीक्षण कर रहा है लेकिन इस पल के लिए ठीक प्रतीत होता है, यह यूनिट मूल्य द्वारा कर गणना विधि निर्धारित करने में भी सहायक होता है (हमारे लेखाकार इस व्यवस्था से खुश हैं, लेकिन यह ब्रिटेन के लिए है, मुझे यकीन नहीं है कि अन्य देश उस विशेष कर गणना विधि पर फहराएंगे)।

कारण मैं $ अनुरोध ['एएमटी'] में हेरफेर कर रहा हूं क्योंकि कभी-कभी $ FinalValue वैरिएबल की गणना एक -0.9 999 दोहराव पूर्णांक उत्पन्न करती है जो कि किसी के लिए उपयोग नहीं होती है, तो मेरे गणित बेकार हो जाते हैं यदि कोई चाहता है इस पर सुधार, कृपया ऐसा करें!

हमेशा कोर निर्देशिका में nvp.php को ओवरराइट नहीं करते हैं, एक अलग रीराइटिट मॉड्यूल बनाएं या इसे ऐप/स्थानीय/mage में करें। अधिमानतः पहला विकल्प! :-)

+0

यह मेरी समस्याओं को 1.8.1.0 में तय करता है (स्थानांतरण कार्ट लाइन आइटम को सेट करने के लिए सेट किया जाना चाहिए!) केवल कुछ घंटों के लिए परीक्षण किया गया है लेकिन सोफर यह अच्छा लग रहा है ... – loeffel

+0

बस 1.9.1.0 तक अपग्रेड करना और देखो और देखो यह अभी भी एक मुद्दा है! इस ओवरराइड को 1.9 कोडेबेस पर ले जाने के लिए नहीं सोचा था कि वे इसे ठीक कर देंगे, लड़का मैं गलत था! – evensis

+0

यह मेरे लिए थोड़ा सा काम करता था, लेकिन जब भी हम पेपैल एक्सप्रेस से Magento पुष्टिकरण पृष्ठ पर लौट आए, तब भी एक समस्या थी, "कार्ट आइटम की मात्रा का योग आदेश राशि से मेल नहीं खाता"। पेपैल द्वारा धोखाधड़ी के रूप में लेनदेन को भी ध्वजांकित किया जा सकता है। – Willster

1

Magento मॉड्यूल में पेपैल पर "बग" है (कम से कम मेरे Magento 1.8.0 पर); यह Mage_Paypal_Model_Cart कक्षा में रहता है।

यह सत्यापित करने के मात्रा में सही कर रहे हैं 381 रकम ऊपर क्रम से सभी आइटम की कीमतों लाइन पर विधि _validate(), शिपिंग शुल्क और करों जोड़ता है, और आदेश के कुल मूल्य के साथ परिणाम तुलना (आदेश विधि getBaseGrandTotal() से मिला)

लेकिन कभी-कभी, राशि के बीच 0.00 99 99 99 99 99 99 99 99 अंतर होता है (यह विभिन्न राउंडिंग विधियों से आना चाहिए, मुझे नहीं पता); इसलिए आइटम वैध नहीं हैं और लाइन 146 से विधि getItems() विधि झूठी रिटर्न देता है।

मेरे मामले में इसके परिणामस्वरूप ग्राहक अपने आदेशों पर एक अलग राशि और "धोखाधड़ी संदेह" ध्वज दे रहे थे।

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

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

मैं अभी भी उम्मीद है कि भविष्य में एक से अधिक ०.००९९९९९९९ की डिफ नहीं होगा करने के लिए

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

:

मैं से तुलना विधि (लाइन 404) बदलकर तय की। ..

उम्मीद है कि इससे मदद मिलती है।

-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; 
} 

कर राशि शून्य है कहा, मैं शिपिंग के बजाय की राशि कर राशि को समायोजित करेगा। (निश्चित रूप से यदि कर और शिपिंग दोनों स्वतंत्र हैं, तो यह काम नहीं करेगा, लेकिन मुझे नहीं लगता कि यह वास्तविक व्यापार में होगा।) उम्मीद है कि इससे उन लोगों की मदद मिल सकती है जिनके पास हमारी ही समस्या है।

संबंधित मुद्दे