PHP7 के साथ 1.9 में करों के बिना Magento ग्रैंड कुल


17

हम एक 1.9 & php7 में काम कर रहे हैं; पेपल संदिग्ध धोखाधड़ी (अंतर राशि के कारण) के साथ इस मुद्दे का पता लगाया।

फ्रंटेंड में सभी सही (करों को लागू करें); लेकिन चेकआउट और गणना में, Magento करों के बिना भव्य कुल का उपयोग करता है।

वास्तविक गलत क्रम गणना:

करों के बिना उत्पाद की कीमत + करों के साथ शिपिंग = भुगतान के लिए कुल राशि

Php5 पर स्विच करें और गणना सही है।

कुछ विचार?

धन्यवाद!


मेरी भी यही समस्या है। अब तक मैंने पाया कि यह सब था: stackoverflow.com/questions/34281113/… इसे हल करने के लिए एक समाधान बहुत अच्छा होगा।
रिंस्क

यह PHP 7 के लिए स्वतंत्र है और इससे पहले रिपोर्ट किया गया है, उदाहरण के लिए 2012 में वापस: सॉर्ट एल्गोरिथ्म: Magento चेकआउट योग गलत तरीके से गलत शिपिंग कर गणना के कारण , आंतरिक Magento टिकट दिया गया है [MCACE-129]।
हकरे

जवाबों:


13

समाधान

मैं php7 के लिए योग गणना के साथ Magento के मुद्दों को हल करने के लिए एक Magento मॉड्यूल बनाया है। जिन मुद्दों पर मैंने विशेष रूप से अनुभव किया है, वे यह हैं कि अमेज़ॅनपेमेंट्स चेकआउट पृष्ठ पर अमेज़ॅन मॉड्यूल के साथ भुगतान के लिए करों को दो बार भव्य कुल में जोड़ा गया है ।

क्रेडिट

इस पोस्ट में आर्कग्राफिक्स द्वारा दिए गए उत्तर ( /magento//a/97107/35665 ) ने मेरे मुद्दों को हल किया - तो यह बस एक मॉड्यूल में पैक किया गया फिक्स है।

मापांक:

https://github.com/hartmut-ltd/magento-php7-totals-fix


यह काम करता हैं !!! समाधान की सिफारिश
jruzafa

9

मैं वास्तव में नहीं जानता कि क्या यह किसी भी तरह से मदद करेगा, लेकिन देखने के लिए कुछ।

यह संभव है कि आपका collecttotalsमॉडल ऑर्डर अलग तरीके से ऑर्डर कर रहा है, और यह कि ग्रैंड_टोटल के बाद टैक्स का आदेश / लागू किया जा रहा है

आप परीक्षण कर सकते हैं यदि यह इस प्रकार है। (ध्यान दें कि इसमें कुछ डीबग जानकारी प्राप्त करने के लिए एक कोर फ़ाइल को समायोजित करना शामिल है, कृपया इसे लाइव साइट पर आज़माएं नहीं!)

इसमें स्थित विधि को संपादित करें:

Mage_Sales_Model_Quote_Address::collecttotals

और विधि में एक पंक्ति जोड़ें, जो आपको संसाधित होने के साथ ही मॉडल को आउटपुट करने की अनुमति देगा।

public function collectTotals()
    {
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_before', array($this->_eventObject => $this));
        foreach ($this->getTotalCollector()->getCollectors() as $model) {
            mage::log($model->getCode()); // <===== ADD THIS LINE
            $model->collect($this);
        }
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_after', array($this->_eventObject => $this));
        return $this;
    }

सुनिश्चित करें कि लॉगिंग सक्षम है।

कंसोल के माध्यम से लॉग फ़ाइल को पूँछें: tail -f system.log

दृश्यपटल के माध्यम से समस्या को पुन: उत्पन्न करें।

आपको अपने लॉग में निम्नानुसार प्रविष्टियाँ मिलेंगी (यह वेनिला 1.9.2.2 से - आपके पास अन्य प्रविष्टियाँ हो सकती हैं)

2015-12-21T05:54:12+00:00 DEBUG (7): nominal
2015-12-21T05:54:12+00:00 DEBUG (7): subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): msrp
2015-12-21T05:54:12+00:00 DEBUG (7): freeshipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): weee
2015-12-21T05:54:12+00:00 DEBUG (7): shipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_shipping
2015-12-21T05:54:12+00:00 DEBUG (7): discount
2015-12-21T05:54:12+00:00 DEBUG (7): tax
2015-12-21T05:54:12+00:00 DEBUG (7): grand_total

आप इसे दोहराते हुए देखेंगे, इसलिए बस यह देखें कि यह कहां से शुरू होता है, और समाप्त होता है, पैटर्न को देखना आसान होना चाहिए

ऊपर अंतिम दो प्रविष्टियों पर ध्यान दें: टैक्स Grand_total से पहले आता है। यह संभव हो सकता है कि यह आदेश बेकार से बाहर है, और ग्रैंड_टोटल के बाद टैक्स दिखाई दे रहा है, इसलिए ग्रैंड_टोटल पर टैक्स लागू नहीं होगा।

संपादित करें:

ठीक है, इसलिए मैंने संदर्भित प्रश्न नहीं देखा वास्तव में इस मुद्दे को एकत्र करने के लिए संग्रहकर्ताओं की छंटनी की ओर इशारा करता है। मुझे संदेह था कि यह मुद्दा हो सकता है, लेकिन PHP7 में खुद इसका परीक्षण नहीं किया है

एक समाधान है, लेकिन यह बहुत अच्छा नहीं है। स्टोर में रखा गया कोई भी नया एक्सटेंशन, जो कलेक्टर में मॉडल सम्मिलित करता है, को नोट करना होगा, और इसके अलावा छंटनी में जोड़ा जाएगा, अन्यथा चीजें और भी गलत हो सकती हैं। आगे चलकर मेंटेनेंस का एक सा मुद्दा हो सकता है।

केवल एक विशिष्ट <sort_order>को योग कॉन्फ़िगरेशन में रखकर क्रम को बाध्य करें। आप इसे अपने स्वयं के एक्सटेंशन के माध्यम से कर सकते हैं, जिसमें केवल एक config.xml होगा, जहां आप प्रत्येक कलेक्टर के लिए ऑर्डर निर्दिष्ट करते हैं।

config.xml में, इस तरह के निर्देश हैं:

<sales>
   <quote>
      <totals>
         <nominal>
           <sort_order>100</sort_order>
        </nominal>
        <subtotal>
           <sort_order>200</sort_order>
        </subtotal>
        <msrp>
           <sort_order>300</sort_order>
        </msrp>
        <freeshipping>
           <sort_order>400</sort_order>
        </freeshipping>

        ......
        insert each collector model with a sort directive
        ......

     </totals>
   </quote>

प्रत्येक सॉर्टिंग निर्देश के बीच बड़े अंतराल का उपयोग करें, जिससे अतिरिक्त आगे बढ़ने के लिए स्थान की अनुमति मिल सके।

जैसा कि उल्लेख किया गया है, बहुत सुरुचिपूर्ण नहीं है, लेकिन आपकी तत्काल समस्या को हल कर सकता है।

यह भी ध्यान दें कि सिस्टम में अन्य कलेक्टर निर्देश हैं, इसलिए वे गलत / आवश्यकता समायोजन भी हो सकते हैं

कोर बिक्री विस्तार config.xml की जाँच करें, और के लिए खोज <totals>

वहाँ आप पाएंगे:

<order_invoice>
<order_creditmemo>
<pdf>

अन्य एक्सटेंशन में अन्य भी हो सकते हैं, कोर / 3rd पार्टी हो

उम्मीद है की वो मदद करदे।

पुनश्च: मैंने PHP7 में इसका कोई परीक्षण नहीं किया है। मुझे पता है कि php5.x के तहत Sort_order निर्देश कार्यों के रखने


PHP7 में छंटनी बदल गई है, आपको कई तरह के समान क्रम के आदेशों (जैसे कि तीन अलग-अलग मदों पर स्तर 5) के विषम प्रकार के परिणाम हो सकते हैं, को स्पष्ट रूप से अद्वितीय प्रकार के आदेशों को परिभाषित करना होगा। stackoverflow.com/questions/34281113/…
Fiasco Labs

मैंने उत्तर में एक संपादन जोड़ा है।
ProxiBlue

धन्यवाद ProxiBlue; हमलोग जांच करेंगे। हम reindex के साथ कुछ समस्या का पता लगाते हैं; कुछ मामलों में, यह इस समस्या को पुन: पेश करता है। TAX कॉन्फ़िगरेशन पर जाएं, कुछ "कोई परिवर्तन नहीं" सहेजें और TAX रिटर्न।
जोन एम

8

Magento 1.6.2 और PHP 7.0.2 पर मैंने इसे इस तरह हल किया:

1 - पहले एक स्थानीय config.xml बनाया गया: Copied /app/code/core/Mage/Sales/etc/config.xml में /app/code/local/Mage/Sales/etc/config.xml

2 - इसे इस तरह बदल दिया यहां छवि विवरण दर्ज करें

अब यह सही ढंग से गणना करता है:

यहां छवि विवरण दर्ज करें


1
आप XML फ़ाइलों को स्थानीय कोड पूल (केवल ऑटोलॉइड PHP कक्षाएं) में ओवरराइड नहीं कर सकते हैं, इसलिए यह एक वास्तविक कस्टम मॉड्यूल के config.xml का हिस्सा होना चाहिए।
फेबियन शेंगलर

1
जैसा कि समझाया गया था कि यह स्थानीय config.xml का उपयोग करके किया गया था।
आर्चीग्राफिक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.