Prestashop y sus redondeces

por Sergio Gil

Hace unos días tuve unas serias peleas por la manera en como PrestaShop calcula el IVA y sus redondeos: en vez de sumar todo y redondear al final, va redondeando uno a uno cada artículo, lo que genera a veces diferencias de hasta 8 céntimos.

Con un ejemplo lo explico mejor:

Imagina 3 productos que valen 6.28 (Sin IVA) cada uno y compro 3 unidades de cada uno de ellos :
6.28 * 3 = 18.84
6.28 * 3 = 18.84
6.28 * 3 = 18.84

Total Sin IVA = 56.52  + IVA (21 %)  11.8692  = 68.3892 -> redondeando -> 68.39

Esta sería la forma correcta de calcular el total factura. Pues bien, PrestaShop hace lo siguiente:

6.28 * 3 = 18.84 -> IVA (21%) = 3.9564 = REDONDEA AQUI 3.96
6.28 * 3 = 18.84 -> IVA (21%) = 3.9564 = REDONDEA AQUI 3.96
6.28 * 3 = 18.84 -> IVA (21%) = 3.9564 = REDONDEA AQUI 3.96

Total Sin IVA 56.52 IVA= 3.96 * 3 = 11.88 -> TOTAL = 68.40
redondeo-mejoradoProduciendo un desfase de 0.0108 €  y un descuadre de 1 centimo en la factura, que a mayor unidades o coincidencias de precios que redondeen a la alta mayor será.

He creado un aporte con tres archivos que puedes descargar aquí gratuitamente. Deja tu comentario con tus impresiones si lo utilizas. ¡Gracias!

  • Hola, mi tienda es 1.4.7. ¿hay algún recurso similar para esta versión? ¿Y módulos de facturación española?
    Gracias.

    • PmktBlog

      ¡Hola, Dolores! Pues de momento para las versiones 1.4 de Prestashop hay lo que se puede encontrar en los foros, y con respecto al módulo de facturación española, el que hemos desarrollado ahora mismo sólo trabaja con 1.5. Quizá más adelante lo saquemos para 1.4, pero no lo tenemos contemplado de momento, lo siento…

  • Pablo

    Hola Buenas!
    Muchas gracias por los archivos!
    Tenemos un problema por eso cuando se selecciona el pago por paypal que coge la cantidad final producto a producto, como si no se aplicara los archivos.

    Habéis tenido algún problema similar???

    Muhcísimas gracias!

  • Paco

    Muchas gracias por el aporte. No sabíamos como resolverlo.

    Lo único que no sé como salva ahora es que sí tenemos en classes/override un archivo Cart.php con 10 lineas de php con el siguiente contenido de Presastshop:

    class Cart extends CartCore
    {
    public static function __set_state($attributes)
    {
    $cart = new Cart();

    foreach ($attributes as $name => $attribute)
    $cart->{$name} = $attribute;

    return $cart;
    }
    }

    ¿Puedo sobreescribir ese archivo?

    Muchas gracias por la ayuda

  • fjguijarro

    Muchas gracias por la ayuda.

    No podemos utlizarla porque en Overrride hay ya un archivo con Cart.php aunque parece que es de Prestashop.

    Quería preguntaros si podéis ayudarnos a confirmar si podemos utilizarlo, aunque se retribuyendoos por la ayuda.

    Ayer os puse un comentario con el archivo en cuestión y parece que se publicó, pero igual no lo habéis publicado.

    En cualquier caso gracias por la ayuda.

  • En ambos casos no podéis sobrescribir directamente el archivo cart.php ya que os cargaríais los métodos que existan, la solución es abrir ambos archivos e ir añadiendo los métodos que no existan, por ejemplo en el caso de cart:
    class Cart extends CartCore
    {

    public function getOrderTotal($with_taxes = true, $type = Cart::BOTH, $products = null, $id_carrier = null, $use_cache = true)
    {……………. }

    otros métodos….
    }

  • Pingback: PrestaShop 1.6.1.0: Cambios interesantes - El Blog de PrestaMarketing()

  • Pingback: Bug redondeo del módulo de PayPal para PrestaShop - El Blog de PrestaMarketing()