Post by myagui » Sun Dec 23, 2012 11:32 pm

Hola a todos,

Estoy utilizando la versión 1.5.4.1 y se me presenta un problema con los decimales al utilizar Paypal Standard. El caso es que los precios de mis productos tienen 3 decimales porque el valor del producto es muy pequeño, pero a su vez la cantidad mínima de compra es suficiente para que el precio no necesite 3 decimales.

Por ejemplo, el precio de un producto es 0.045€ (3 decimales) pero la compra mínima es de 100, con lo cuál el precio final quedaría 4.500€. Ahí es donde se me presenta el problema porque Paypal solo acepta 2 decimales en sus transacciones. Además, tampoco puedo limitar el precios a 2 decimales porque no se mostrarían los precios reales del producto. Si limitase el precio a 2 decimales, el ejemplo anterior quedaría con un valor de 0.04€ x 100(cantidad mínima)= 4.00€, existiendo una diferencia de 0.50 céntimos de euro en el precio final.

Llevo varios días buscando información pero no he encontrado ninguna solución que me sirva. He intentado redondear el precio decimal total modificando el return $string; a return rtrim($string, '.00'); pero no surte efecto.
La solución ideal sería eliminar los ceros decimales en el precio total para que Paypal acepte el pago. Alguien sabe como hacerlo?

Muchisimas gracias por vuestra ayuda.
Saludos

Newbie

Posts

Joined
Sun Dec 23, 2012 10:43 pm

Post by celestial » Tue Dec 25, 2012 12:59 am

myagui wrote:Hola a todos,

Estoy utilizando la versión 1.5.4.1 y se me presenta un problema con los decimales al utilizar Paypal Standard. El caso es que los precios de mis productos tienen 3 decimales porque el valor del producto es muy pequeño, pero a su vez la cantidad mínima de compra es suficiente para que el precio no necesite 3 decimales.

Por ejemplo, el precio de un producto es 0.045€ (3 decimales) pero la compra mínima es de 100, con lo cuál el precio final quedaría 4.500€. Ahí es donde se me presenta el problema porque Paypal solo acepta 2 decimales en sus transacciones. Además, tampoco puedo limitar el precios a 2 decimales porque no se mostrarían los precios reales del producto. Si limitase el precio a 2 decimales, el ejemplo anterior quedaría con un valor de 0.04€ x 100(cantidad mínima)= 4.00€, existiendo una diferencia de 0.50 céntimos de euro en el precio final.

Llevo varios días buscando información pero no he encontrado ninguna solución que me sirva. He intentado redondear el precio decimal total modificando el return $string; a return rtrim($string, '.00'); pero no surte efecto.
La solución ideal sería eliminar los ceros decimales en el precio total para que Paypal acepte el pago. Alguien sabe como hacerlo?

Muchisimas gracias por vuestra ayuda.
Saludos
Este caso es sumamente especifico porque a nadie le pasa lo mismo, así que por favor no seguir esto, si te fijas en las tablas de la base de datos predeterminadamente los campos de dinero, peso, medidas, etc vienen asi:

`price` decimal(15,4) NOT NULL DEFAULT '0.0000',
`weight` decimal(15,8) NOT NULL DEFAULT '0.00000000',
`length` decimal(15,8) NOT NULL DEFAULT '0.00000000',
`width` decimal(15,8) NOT NULL DEFAULT '0.00000000',
`height` decimal(15,8) NOT NULL DEFAULT '0.00000000',

Ya desde ahi comenzarían tus modificaciones tienes que cambiar las cantidad de decimales que deseas, luego en el admin, system - localizacion - moneda especificas la cantidad de decimales que necesitas, y por ultimo tambien podes especificar de una vez los decimales desde el archivo system/library/currency.php por ejemplo:

En vez que te tome los valores de los decimales de la tabla de monedas:

Code: Select all

		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency");

    	foreach ($query->rows as $result) {
      		$this->currencies[$result['code']] = array(
        		'currency_id'   => $result['currency_id'],
        		'title'         => $result['title'],
        		'symbol_left'   => $result['symbol_left'],
        		'symbol_right'  => $result['symbol_right'],
        		'decimal_place' => $result['decimal_place'],
        		'value'         => $result['value']
      		);
    	}
Este es el valor que tomara de los decimales en la tabla:

'decimal_place' => $result['decimal_place'],

Cambialo a esto:

'decimal_place' => $result['3'],

Son 3 opciones diferentes para solucionar tu peticion,tienes que ir probando y recuerda de ir respaldando todo antes de tocar algo

Celestial - Martín Abel Rosales
WhatsApp: 50671482211
Email: martinrosales2012@hotmail.com
Skype: martin.abel.rosales
San José , Costa Rica


User avatar
Expert Member

Posts

Joined
Sat Mar 20, 2010 4:19 am
Location - Costa Rica

Post by celestial » Tue Dec 25, 2012 1:04 am

Lo de lasa tablas es por medio de mysql en tu cpanel de tu servidor que lo cambias

Celestial - Martín Abel Rosales
WhatsApp: 50671482211
Email: martinrosales2012@hotmail.com
Skype: martin.abel.rosales
San José , Costa Rica


User avatar
Expert Member

Posts

Joined
Sat Mar 20, 2010 4:19 am
Location - Costa Rica

Post by myagui » Thu Dec 27, 2012 12:27 am

Hola Celestial. Muchas gracias por tu ayuda!

He leído las soluciones que me has propuesto pero tengo que decirte que ninguna me acaba de solucionar el problema. El caso es que no solo busco limitar el precio con un determinado numero de decimales, sino que mi intención es que los precios estén publicados con 3 decimales y que el el precio total /final en el carrito sea con 2 decimales para que Paypal acepte el pago. Es decir, si selecciono 100 unidades (cantidad mínima) de un producto cuyo valor es 0.045€, el resultado tendría ser con 2 decimales (4.50€) en lugar de 3 decimales (4.500€) que sería el resultado por defecto si configuramos la moneda con 3 decimales.

Se puede editar/ modificar el $total del archivo system/library/cart.php para conseguir este efecto?

Code: Select all

public function getTotal() {
		$total = 0;
		
		foreach ($this->getProducts() as $product) {
			$total += $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'];
		}

		return $total;
  	}
En el caso de que sea posible, aún me queda la duda de si Paypal aceptará el pago ya que el precio unitario del producto seguirá siendo con 3 decimales.
Espero que haya una solución a este conflicto porque sino voy a tener que cambiar la estructura de la tienda por completo.

Gracias de nuevo Celestial.

Newbie

Posts

Joined
Sun Dec 23, 2012 10:43 pm
Who is online

Users browsing this forum: No registered users and 62 guests