Buenas tardes.
tengo Prestashop 1.6.1.
Tengo un problema con el redondeo de los precios., que me genera desajuste en las facturas.
Actualmente tengo el redondeo por producto y desglose de impuestos Activado
He probado cambiar Tipo de redondeo al Redondea por el total. Con esta opción soluciono el problema de las facturas, pero empiezan a generar errores de pago los módulos de Paypal y Redsys. Entiendo que el problema esta en que los módulos hacen la suma de los CON IVA redondeados, mientras que la factura hace la suma de los productos SIN IVA y luego aplica el redondeo. En algunos pedidos la diferencia puede llegar a 4€.
Necesito una solución menos invasiva para este problema.
Gracias
URL del sitio: Contenido solo visible a usuarios registrados
Hola Elena.
empiezan a generar errores de pago los módulos de Paypal y Redsys
Puedes explicarnos un poco más si puedes con capturas para que veamos los totales y a los desajustes que te refieres.
Revisa esta entrada del foro de prestashop que tratan el tema del redondeo:
-> https://www.prestashop.com/forums/topic/341333-prestashop-16-¿redondeo/
-> https://www.prestashop.com/forums/topic/546878-error-de-redondeo-en-combinaciones-de-productos-ps-16x-solucionado/
Nota: Tienes una versión muy desfasada de prestashop tienes que pensar en actualizar, es posible que actualizando soluciones el problema.
Un saludo
Hola
Cómo has ingresado los precios de tus productos, estan con IVA incluído?, envía algunas capturas de algun producto para probar.
Saludos.
Hola Elena.
El tema del redondeo en prestashop es un Bug que llevan arrastrando desde hace mucho tiempo
-> http://forge.prestashop.com/browse/PSCSX-7630
En esta entrada dan una posible solución modificando los archivos Tools.php y ProductController.php
-> https://github.com/PrestaShop/PrestaShop/pull/5135/commits/2636a3182502686e19ff2ebeea3d5178665c974f
Un saludo
acabo de comprobar y estos errores en los controllers ya los tenía corregidos. se ve que se han corregido con la última actualización de Prestashop.
Necesito otra solución
Hola Elena.
ok, va a ser complicado ya que es un problema del propio prestashop con esas versiones, es algo que muchos usuarios reportan pero no se soluciona por parte de prestashop y dudo que lo solucionen en esa versión ya que no recibe actualizaciones.
Prueba a cambiar en preferencias - configuración - redondeo: redondear cada artículo por si soluciona el problema.
Te pasa con todos los pagos, es solo con TPV, PAYPAL....
El módulo de paypal tenia problemas con el redondeo por eso te lo comento.
En esta entrada del foro de prestashop ofrecen otra posible solución:
Un saludo
hola
Actualmente tengo el redondeo por artículo, que es el que me genera el desajuste en las facturas. y me funcionan bien los módulos de pago.
Cuando dejo el redondeo por total o por línea, los módulos de Paypal y Redsys me generan error de pago por el desajuste en el total. Pero las facturas si que salen bien.
P.S. la entrada del foto citada. No encuentro en mi archivo product.js la línea que se ha de modificar.
un saludo
Hola Elena.
Ok, entonces el problema lo tenemos en otros sitios, no es de prestashop.
Vamos a ir por parte y empecemos con el de modulo de paypal.
Prueba lo siguiente:
.- Accede a modules -> paypal -> express_checkout y edita el archivo proccess.php
.- Busca el siguiente código:
private function setProductsList(&$fields, &$index, &$total) { foreach ($this->product_list as $product) { $fields['L_PAYMENTREQUEST_0_NUMBER'.++$index] = (int) $product['id_product']; $fields['L_PAYMENTREQUEST_0_NAME'.$index] = $product['name']; if (isset($product['attributes']) && (empty($product['attributes']) === false)) { $fields['L_PAYMENTREQUEST_0_NAME'.$index] .= ' - '.$product['attributes']; } $fields['L_PAYMENTREQUEST_0_DESC'.$index] = Tools::substr(strip_tags($product['description_short']), 0, 50).'...'; $fields['L_PAYMENTREQUEST_0_AMT'.$index] = Tools::ps_round($product['price_wt'], $this->decimals); $fields['L_PAYMENTREQUEST_0_QTY'.$index] = $product['quantity']; $total = $total + ($fields['L_PAYMENTREQUEST_0_AMT'.$index] * $product['quantity']); } }
Modifica por lo siguiente:
private function setProductsList(&$fields, &$index, &$total) { foreach ($this->product_list as $product) { $fields['L_PAYMENTREQUEST_0_NUMBER'.++$index] = 1; $fields['L_PAYMENTREQUEST_0_NAME'.$index] = 'Total Productos '; // o el texto que deseemos $fields['L_PAYMENTREQUEST_0_AMT'.$index] = $this->context->cart->getOrderTotal(true,Cart::ONLY_PRODUCTS); //mandamos el total de los productos con IVA incluido $fields['L_PAYMENTREQUEST_0_QTY'.$index] = 1; $total = $total + ($fields['L_PAYMENTREQUEST_0_AMT'.$index] * 1); break; } }
.- En el mismo archivo busca lo siguiente:
public function getTotalPaid() { $total = 0.00; foreach ($this->product_list as $product) { $price = Tools::ps_round($product['price_wt'], $this->decimals); $quantity = Tools::ps_round($product['quantity'], $this->decimals); $total = Tools::ps_round($total + ($price * $quantity), $this->decimals); } if ($this->context->cart->gift == 1) { $total = Tools::ps_round($total + $this->getGiftWrappingPrice(), $this->decimals); } if (version_compare(_PS_VERSION_, '1.5', 'context->cart->getDiscounts(); $shipping_cost = $this->context->cart->getOrderShippingCost(); } else { $discounts = $this->context->cart->getCartRules(); $shipping_cost = $this->context->cart->getTotalShippingCost(); } if (count($discounts) > 0) { foreach ($discounts as $product) { $price = -1 * Tools::ps_round($product['value_real'], $this->decimals); $total = Tools::ps_round($total + $price, $this->decimals); } } return Tools::ps_round($shipping_cost, $this->decimals) + $total; }
Sustituye por lo siguiente:
public function getTotalPaid() { $total = 0.00; $total = $total + $this->context->cart->getOrderTotal(true,Cart::ONLY_PRODUCTS); if ($this->context->cart->gift == 1) { $total = Tools::ps_round($total + $this->getGiftWrappingPrice(), $this->decimals); } if (version_compare(_PS_VERSION_, '1.5', 'context->cart->getDiscounts(); $shipping_cost = $this->context->cart->getOrderShippingCost(); } else { $discounts = $this->context->cart->getCartRules(); $shipping_cost = $this->context->cart->getTotalShippingCost(); } if (count($discounts) > 0) { foreach ($discounts as $product) { $price = -1 * Tools::ps_round($product['value_real'], $this->decimals); $total = Tools::ps_round($total + $price, $this->decimals); } } return Tools::ps_round($shipping_cost, $this->decimals) + $total; }
Comprueba si con eso solucionamos lo de paypal.
Nota: recuerda descargar el archivo antes de realizar la modificación para tener una copia del original.
Un saludo