Magento Grand Total ไม่มีภาษีใน 1.9 กับ PHP7


17

เรากำลังทำงานใน 1.9 & php7; ตรวจพบปัญหานี้ด้วยการทุจริตสงสัยว่า paypal (เนื่องจากจำนวนเงินที่แตกต่างกัน)

ถูกต้องทั้งหมดในส่วนหน้า (ใช้ภาษี); แต่ในการชำระเงินและการคำนวณวีโอไอพีใช้ยอดรวมทั้งหมดโดยไม่ต้องเสียภาษี

การคำนวณคำสั่งซื้อผิดจริง:

ราคาสินค้าโดยไม่รวมภาษี + ค่าจัดส่งพร้อมภาษี = ยอดรวมในการชำระ

เปลี่ยนเป็น php5 และการคำนวณถูกต้อง

ความคิดบางอย่าง?

ขอบคุณ!


ผมมีปัญหาเดียวกัน. ทั้งหมดที่ฉันพบคือ: stackoverflow.com/questions/34281113/… วิธีการแก้ปัญหานี้จะดีมาก
Reinsch

นี่คือความเป็นอิสระเพื่อ PHP 7 และได้รับการรายงานก่อนหน้านี้เช่นกลับในปี 2012: ขั้นตอนวิธีการเรียง: วีโอไอพีเช็คเอาต์ผลรวมเรียงผิดที่ก่อให้เกิดการคำนวณภาษีการจัดส่งสินค้าที่ไม่ถูกต้องภายในตั๋ววีโอไอพีให้เป็น [MCACE-129]
hakre

คำตอบ:


13

วิธีการแก้

ฉันได้สร้างโมดูลวีโอไอพีเพื่อแก้ปัญหาวีโอไอพีด้วยการคำนวณผลรวมสำหรับ php7 ปัญหาที่ฉันพบโดยเฉพาะคือภาษีถูกเพิ่มสองครั้งในยอดรวมทั้งหมดสำหรับการชำระด้วยโมดูลamazonในหน้าชำระเงิน amazonpayments

เครดิต

คำตอบที่ให้ไว้โดย archigrafix ในโพสต์นี้ ( /magento//a/97107/35665 ) แก้ไขปัญหาของฉัน - ดังนั้นนี่เป็นเพียงการแก้ไขที่บรรจุในโมดูล

โมดูล:

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


มันได้ผล !!! แนะนำวิธีแก้ปัญหา
jruzafa

9

ฉันไม่รู้จริง ๆ ว่าสิ่งนี้จะช่วยได้ แต่ก็มีบางอย่างที่ต้องพิจารณา

เป็นไปได้ว่าcollecttotalsใบสั่งซื้อรุ่นของคุณกำลังสั่งซื้อที่แตกต่างกันและภาษีนั้นกำลังถูกสั่ง / นำไปใช้หลัง grand_total

คุณสามารถทดสอบได้ว่านี่เป็นปัญหาหรือไม่ดังนี้ (โปรดทราบว่าสิ่งนี้เกี่ยวข้องกับการปรับไฟล์หลักเพื่อรับข้อมูลการแก้ไขข้อบกพร่องโปรดอย่าลองสิ่งนี้บนเว็บไซต์จริง!)

แก้ไขวิธีที่อยู่ใน:

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 มันอาจจะเป็นไปได้การสั่งซื้อนี้จะออกจากการตีและภาษีที่ปรากฏหลังจาก 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>

อาจมีคนอื่น ๆ ในส่วนขยายอื่น ๆ ไม่ว่าจะเป็นแกน / บุคคลที่สาม

หวังว่าจะช่วย

PS: ฉันยังไม่ได้ทดสอบสิ่งนี้ใน PHP7 ฉันรู้ว่าการวางคำสั่ง sort_order ทำงานภายใต้ php5.x


การเรียงลำดับมีการเปลี่ยนแปลงใน PHP7 คุณจะต้องกำหนดคำสั่งการจัดเรียงที่ไม่ซ้ำกันอย่างชัดเจนเนื่องจากมีคำสั่งการเรียงลำดับที่เหมือนกันหลายรายการ (เช่นระดับ 5 ในรายการที่แตกต่างกันสามรายการ) สามารถมีผลการแข่งขัน stackoverflow.com/questions/34281113/…
Fiasco Labs

ฉันได้เพิ่มการแก้ไขในคำตอบ
ProxiBlue

ขอบคุณ ProxiBlue; เราจะตรวจสอบ เราตรวจพบปัญหาบางอย่างกับดัชนี; ในบางกรณีมันทำซ้ำปัญหานี้ ไปที่การกำหนดค่า TAX บันทึก "no change" และส่งคืน TAX
Joan M

8

ใน Magento 1.6.2 และ PHP 7.0.2 ฉันแก้ไขด้วยวิธีนี้:

1 - สร้าง local config.xml เป็นอันดับแรก: คัดลอก /app/code/core/Mage/Sales/etc/config.xml ลงใน /app/code/local/Mage/Sales/etc/config.xml

2 - เปลี่ยนเป็นแบบนี้ ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้มันคำนวณอย่างถูกต้อง:

ป้อนคำอธิบายรูปภาพที่นี่


1
คุณไม่สามารถแทนที่ไฟล์ XML ในพูลโค้ดโลคัล (เฉพาะคลาส PHP ที่โหลดอัตโนมัติ) ดังนั้นสิ่งนี้จะต้องเป็นส่วนหนึ่งของ config.xml ของโมดูลที่กำหนดเองจริง
เฟเบียน Schmengler

1
ตามที่อธิบายไว้สิ่งนี้กระทำโดยใช้ local config.xml
archigrafix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.