Magento Grand Total без податків у 1.9 із PHP7


17

Ми працюємо в 1.9 & php7; виявлено цю проблему із шахрайством із підозрою у Paypal (через різницю).

Усі правильні у фронтенді (застосовувати податки); але в касі та підрахунку магент використовує загальну суму без податків.

Фактичний неправильний розрахунок замовлення:

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

Перехід на 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


Сортування змінилося в PHP7, вам доведеться чітко визначити унікальні замовлення на сортування, оскільки декілька ідентичних замовлень на сортування (тобто рівень 5 для трьох різних елементів) можуть мати незвичайні результати. stackoverflow.com/questions/34281113/…
Фіаско Лабораторії

Я додав редагування у відповідь.
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 - Змінив це так введіть тут опис зображення

Тепер він обчислює правильно:

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


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

1
Як було пояснено, це було зроблено за допомогою локального config.xml.
archigrafix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.