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í:
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.
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.
Daniel, ¿este procedimiento es válido en la versión 1.9.1 de magento?