:::: MENU ::::

Problemas de redondeo de precios en Magento

4.00 avg. rating (75% score) - 2 votes

Son varios (por no decir muchos) los problemas de redondeo que históricamente afectan a Magento en sus diferentes versiones.

Hoy quería centrarme en uno que si bien no afecta a la realización de los pedidos, como pueda ser ese famoso fallo de redondeo en la comunicación de los totales entre Magento y PayPal.

El problema ocurre cuando trabajamos con precios sin impuestos en el administrador de la tienda y afecta al menos a las versiones 1.6.x y 1.7.x (no he probado el resto).

Con esa configuración si por ejemplo intentamos que un producto tenga un precio (IVA incluido) de 18.70€ deberíamos introducir en la casilla de precio el valor: 15.4545. Algo así:

Problema redondeo Magento-2

Guardamos el producto y el precio mostrado en la tienda será de 18.70€. Parece que todo correcto, verdad Pues no.

El problema aparece si volvemos a editar el producto y sin tocar el precio lo volvemos a guardar.

Podéis comprobar en la siguiente imagen como al editar de nuevo el producto, Magento redondea el precio a dos decimales, con lo que perdemos precisión.

Al guardar de nuevo el producto, a pesar de no tocar la casilla del precio, el valor habrá perdido unos céntimos de precisión y al mostrarlo en la tienda y sumarse el IVA correspondiente, ya no será los 18.70 euros iniciales, sino 18.69 euros.

Problema redondeo Magento-2

Para evitar esta situación es necesario trabajar con 4 decimales en el administrador. La base de datos de Magento trabaja siempre con 4 decimales, así que únicamente es necesario evitar el redondeo.

Para ello tenemos que copiar el archivo siguiente a nuestra pool local:
app/code/core/Mage/Adminhtml/Block/Catalog/Product/Helper/Form/Price.php

Y luego modificar la función getEscapedValue modificando el número de decimales del redondeo, así:

    public function getEscapedValue($index=null)
    {
        $value = $this->getValue();

        if (!is_numeric($value)) {
            return null;
        }

        return number_format($value, 4, null, '');
    }

Con esta modificación, los precios mostrados en el administrador tendrán una precisión de 4 decimales, de forma que en las diferentes ediciones de productos para modificar información, no se perderá precisión.




One Comment

Hey! Qué opinas sobre el artículo?