Gran Total de Magento sin impuestos en 1.9 con PHP7

17

Estamos trabajando en un 1.9 & php7; detectó este problema con PayPal como sospechoso de fraude (debido al monto de la diferencia).

Todo correcto en la interfaz (aplicar impuestos); pero en la comprobación y el cálculo, magento usa el total general sin impuestos.

Cálculo real del pedido incorrecto:

Precio del producto sin impuestos + envío con impuestos = monto total a pagar

Cambie a php5 y el cálculo es correcto.

¿Alguna idea?

¡Gracias!

Joan M
fuente
Tengo el mismo problema. Todo lo que encontré hasta ahora fue esto: stackoverflow.com/questions/34281113/… Una solución para resolver esto sería genial.
Reinsch
Esto es independiente de PHP 7 y se informó anteriormente, por ejemplo, en 2012: Algoritmo de clasificación: los totales de pago de Magento se ordenaron incorrectamente, lo que provocó un cálculo de impuestos de envío incorrecto , el ticket interno de Magento proporcionado es [MCACE-129].
hakre

Respuestas:

13

Solución

Creé un módulo de magento para resolver problemas de magento con el cálculo de totales para php7. Los problemas que experimenté en particular fueron que los impuestos se han agregado dos veces al total general de pago con el módulo amazon en la página de pago de amazonpayments.

Créditos

La respuesta proporcionada por archigrafix en esta publicación ( /magento//a/97107/35665 ) resolvió mis problemas, por lo que esta es simplemente la solución empaquetada en un módulo.

Módulo:

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

Hartmut
fuente
funciona !!! recomendar solución
jruzafa
9

Realmente no sé si esto ayudará de alguna manera, pero hay algo que considerar.

Es posible que su collecttotalsorden modelo esté ordenando de manera diferente, y que el impuesto se ordene / aplique después de grand_total

Puede probar si este es el problema de la siguiente manera. (tenga en cuenta que esto implica ajustar un archivo central para obtener información de depuración, ¡no intente esto en un sitio en vivo!)

Edite el método ubicado en:

Mage_Sales_Model_Quote_Address::collecttotals

y agregue una línea al método, lo que le permitirá generar los modelos a medida que se procesan.

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

asegúrese de que el registro esté habilitado.

seguir el archivo de registro a través de la consola: tail -f system.log

Reproduzca el problema a través de la interfaz.

Obtendrá entradas de la siguiente manera en su registro (esto de un vainilla 1.9.2.2 - puede tener otras entradas)

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

Verá que se repite, así que solo vea dónde comienza y termina, debería ser fácil ver el patrón

Tenga en cuenta las dos últimas entradas anteriores: el impuesto viene antes de grand_total. Se puede ser posible este orden está fuera de control, y el impuesto está apareciendo después grand_total, por lo que no tendrá grand_total impuestos aplicada.

EDITAR:

Ok, entonces no vi que la pregunta referida en realidad apunta a la clasificación de los colectivos como el problema. Sospeché que ese podría ser el problema, pero no lo he probado yo mismo en PHP7

Hay una solución, pero no es muy agradable. Cualquier nueva extensión colocada en la tienda, que inserte modelos en el colector, debería anotarse y agregarse adicionalmente a la clasificación, de lo contrario, las cosas podrían salir aún más mal. Puede ser un problema de mantenimiento en el futuro.

Simplemente fuerce el orden de clasificación colocando un específico <sort_order>en la configuración de totales. Puede hacerlo a través de su propia extensión, que solo tendría un config.xml, donde puede especificar el orden de cada recopilador.

en config.xml, tenga la directiva como tal:

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

Use espacios grandes entre cada directiva de clasificación, para permitir espacio para insertar más en el futuro.

Como se mencionó, no es muy elegante, pero puede resolver su problema inmediato.

También tenga en cuenta que hay otras directivas de recopiladores en el sistema, por lo que también pueden estar equivocadas / necesitan un ajuste

Compruebe la extensión de ventas principal config.xml y busque <totals>

Allí encontrarás:

<order_invoice>
<order_creditmemo>
<pdf>

Puede haber otros en otras extensiones, ya sea núcleo / tercero

Espero que ayude.

PD: no he probado nada de esto en PHP7. Sé que la colocación de la directiva sort_order funciona en php5.x

ProxiBlue
fuente
La ordenación ha cambiado en PHP7, tendrá que definir explícitamente órdenes de clasificación únicas ya que tener múltiples órdenes de clasificación idénticas (es decir, nivel 5 en tres elementos diferentes) puede tener resultados extraños. stackoverflow.com/questions/34281113/…
Fiasco Labs
He agregado una edición a la respuesta.
ProxiBlue
Gracias ProxiBlue; comprobaremos. Detectamos algún problema con el reindex; En algunos casos, reproduce este problema. Vaya a la configuración de IMPUESTOS, guarde algunos "sin cambios" y TAX regresa.
Joan M
8

En Magento 1.6.2 y PHP 7.0.2 lo resolví de esta manera:

1 - Creé primero un config.xml local: Copiado /app/code/core/Mage/Sales/etc/config.xml en /app/code/local/Mage/Sales/etc/config.xml

2 - Lo cambié así ingrese la descripción de la imagen aquí

Ahora se calcula correctamente:

ingrese la descripción de la imagen aquí

archigrafix
fuente
1
No puede anular archivos XML en el grupo de código local (solo clases PHP cargadas automáticamente), por lo que debe ser parte del config.xml de un módulo personalizado real.
Fabian Schmengler
1
Como se explicó, esto se hizo usando un config.xml local.
archigrafix