Magento Grand Total без налогов в 1.9 с PHP7

17

Мы работаем в 1.9 & php7; обнаружил эту проблему с мошенничеством PayPal (из-за разницы сумм).

Все правильно в интерфейсе (применяются налоги); но при оформлении заказа и расчете magento использует общую сумму без налогов.

Фактический неверный расчет заказа:

Цена товара без налогов + доставка с налогами = общая сумма к оплате

Переключитесь на php5 и расчет верен.

Какая-то идея?

Благодарность!

Джоан М
источник
У меня точно такая же проблема. Все, что я нашел до сих пор, было так: stackoverflow.com/questions/34281113/… Решение этой проблемы было бы замечательно.
Рейнш
Это не зависит от PHP 7 и было сообщено ранее, например, еще в 2012 году: Алгоритм сортировки: итоги проверки Magento отсортированы неправильно, что привело к неправильному расчету налога на доставку , выдан внутренний билет Magento [MCACE-129].
Хакре

Ответы:

13

Решение

Я создал модуль magento для решения проблем magento с подсчетом итогов для 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

ProxiBlue
источник
Сортировка изменилась в PHP7, вам придется явно определять уникальные порядки сортировки, поскольку наличие нескольких одинаковых порядков сортировки (т. Е. Уровень 5 по трем различным элементам) может иметь странные результаты. stackoverflow.com/questions/34281113/…
Fiasco Labs
Я добавил правку в ответ.
ProxiBlue
Спасибо ProxiBlue; мы проверим. Мы обнаруживаем некоторые проблемы с переиндексацией; в некоторых случаях это воспроизводит эту проблему. Перейдите к настройке TAX, сохраните «без изменений» и возврат TAX.
Джоан М
8

На Magento 1.6.2 и PHP 7.0.2 я решил это следующим образом:

1 - Сначала создали локальный файл config.xml: скопировал /app/code/core/Mage/Sales/etc/config.xml в /app/code/local/Mage/Sales/etc/config.xml

2 - поменял вот так введите описание изображения здесь

Теперь он вычисляет правильно:

введите описание изображения здесь

archigrafix
источник
1
Вы не можете переопределить файлы XML в локальном пуле кода (только автоматически загруженные классы PHP), поэтому это должно быть частью config.xml реального пользовательского модуля.
Фабиан Шменглер
1
Как объяснено, это было сделано с использованием локального config.xml.
archigrafix