Post by Capitan Won » Thu Sep 23, 2010 5:19 pm

Hola, hoy me he dado cuenta de que en mi tienda no funciona correctamente el cambio de moneda automático.
Por ejemplo tengo un producto de 200.000 pesos que a día de hoy suponen 83 euros y 111 dólares.
Pues bien, al hacer el cambio de moneda en el front end esos 200.000 pesos se convierten en 76 euros y 101 dólares, lo cual significaría muchas pérdidas para mi por cada producto. Aparentemente está todo configurado perfectamente, el peso colombiano es la moneda principal, y pensaba que la cotización se iba actualizando diariamente mediante la tienda, pero mirando otras fuentes no coincide la cotización y la diferencia es como de 7 euros y 10 dólares, ¿les pasa a ustedes lo mismo?
Gracias.

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by cofran » Thu Sep 23, 2010 10:45 pm

la función que actualiza la moneda es updateCurrencies y lo hace en base a los resultados obtenidos en finance.yahoo.com/d el problema quizás es que solamente se actualiza cuando entras al admin pero si pasa una semana que no ingresas la actualización de las divisas no se realizan. Por otro lado en la configuración de tu opencart tenes que tener seteado que se actualice la moneda automáticamente.

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by Capitan Won » Fri Sep 24, 2010 4:16 am

Hola cofrán, gracias por la respuesta.

Así es como yo lo tengo, actualización automática, sí
monedas: prioritaria Peso Colombiano (COP) 1,0000
El resto de monedas son EUR, USD y LIBRAS
La fecha de última actualización es 23/09/2010

EUR = 0.00040000 pesos colombianos
USD = 0.00060000 pesos colombianos
GBP = 0.00040000 pesos colombianos

Está exactamente igual que Yahoo, en primera instancia.

Pero ahora viene el problema.

Artículo de valor 190.000 pesos colombianos. Según Yahoo eso deberían ser 79,20 euros y 105,49 dólares y 67,26 libras

En la tienda, sin embargo esos 190.000 pesos colombianos equivalen a 76 euros y 114 dólares y 76 libras esterlinas.

Es mucha diferencia. Si se paga en euros, yo pierdo 3,20 euros, si se paga en dólares yo gano 9 dólares de más :choke:
y si se paga en libras, gano otras 9 libras de más.

Creo que es un bug, o algo está fallando con las monedas de poco valor como el peso colombiano. Hmmm, puede que sea yahoo el que falla...

Ok, hay algo que opencart no ha tenido en cuenta...

Mirando las cotizaciones en yahoo veo lo siguiente.
http://es.finance.yahoo.com/divisas/con ... =EUR;amt=1

Si introduzco 1 peso colombiano aparece en primera instancia 0,0004 euros
Pero si doy click en 1 peso colombiano automáticamente vemos que lo que equivale a 0,0004 euros no es un peso colombiano sino 0,9595 pesos colombianos, por tanto Opencart está tomando 0,0004 euros = 1 peso, cuando lo que debería ser es 0,0004 = 0,9595 o lo que es lo mismo 1 peso es igual a 0,000417

Si hacemos lo mismo con los dólares, vemos que en principio yahoo nos muestra:
1 peso = 0,0006
Si hacemos click en cualquier parte, tanto en el número de dólares como en el de pesos, yahoo nos muestra la cotización real que es: 1,0806 pesos = 0,0006 dólares
o lo que es lo mismo: 1 peso = 0,000555

Esos pequeños desajustes provocan una enorme diferencia de precios cuando se convierten monedas de muy pequeño valor...
No sé qué solución puede tener esto ??? pero en mi caso es grave...

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by cofran » Fri Sep 24, 2010 4:57 am

la verdad es que toma los resultados reales que arroja yahoo, en todo caso es yahoo el que esta ofreciendo mal la conversión de divisa... o al cambio lo pones a mano y te olvidas de la auto-conversión o lo otro que podes hacer es buscar por los foros en ingles las adaptaciones que han realizado otros usuario para tomar la conversión de divisas de otros sitios, por ejemplo: http://forum.opencart.com/viewtopic.php?t=4423

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by cofran » Fri Sep 24, 2010 5:03 am

acá tenes un ejemplo de como obtener los datos desde google, obvio, habría que adaptarlo al opencart: http://www.chazzuka.com/blog/?p=104

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by Capitan Won » Fri Sep 24, 2010 5:57 am

La url de google es muy buena, miren

De pesos colombianos a euros

http://www.google.com/ig/calculator?hl=en&q=1COP=?EUR

De pesos colombianos a GBP

http://www.google.com/ig/calculator?hl=en&q=1COP=?GBP

De Euros a dólares

http://www.google.com/ig/calculator?hl=en&q=1EUR=?USD

Observen que las cotizaciones son correctísimas con más decimales cubiertos y evita los redondeos brutales de yahoo y los desajustes terribles en monedas de poco valor.
¿Cómo podría adaptarse esto a Opencart?
Es decir, cambiar el proveedor yahoo por google...

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by Capitan Won » Sat Sep 25, 2010 2:44 pm

Lo malo es que mis conocimientos de php son absolutamente nulos.
Pero a simple vista veo que opencart lee un csv generado por yahoo que está pensado para los valores bursátiles, pero también funciona para las cotizaciones, colocando Divisa1Divisa2=X

por ejemplo COPUSD=X
http://download.finance.yahoo.com/d/quo ... sl1&e=.csv

eso es lo que usa opencart
y devuelve un csv con una línea así:
COPUSD=X,0.0006

y de ahí opencart toma la cotización, 0.0006

Para cambiar el proveedor a google, se trataría de que opencart en lugar de generar la variable COPUSD=X (moneda1moneda2=X) y colocarlo en el link de yahoo, debería introducir moneda1 y moneda2 en el link siguiente:

http://www.google.com/ig/calculator?hl= ... 1=?moneda2
que sería
http://www.google.com/ig/calculator?hl=en&q=COP=?USD
el cual devuelve
{lhs: "1 Colombian peso",rhs: "0.000555 U.S. dollars",error: "",icc: true}
y de ahí tomar el valor 0.000555
Lo que pasa es que es que hay cotizaciones con menos decimales y otras con 9 decimales, etc. Supongo que el conversor de google tiene una api con parámetros, etc.

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by cofran » Sun Sep 26, 2010 7:17 am

Antes hace un backup!

anda a tu archivo: admin/model/localisation/currency.php y busca la función esta:

Code: Select all

	public function getTotalCurrencies() {
		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "currency");
		
		return $query->row['total'];
	}
antes de esta función inserta esto:

Code: Select all

	private function currency($from, $to) {
		$from = urlencode($from);
		$to = urlencode($to);
	 
		$url = "http://www.google.com/ig/calculator?q=$from=?$to";
		$ch = curl_init();
		$timeout = 0;
		curl_setopt ($ch, CURLOPT_URL, $url);
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
		$content = curl_exec($ch);
		curl_close($ch);
	 
		$data = explode('"', $content);
		$data = explode(' ', $data[3]);
		$var = $data[0];
		return round($var,9);
	}
ahora busca la función que se encarga de la actualización de la moneda:

Code: Select all

public function updateCurrencies()
busca el siguiente trozo de código:

Code: Select all

			foreach ($query->rows as $result) {
				$data[] = $this->config->get('config_currency') . $result['code'] . '=X';
			}
			
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $data) . '&f=sl1&e=.csv');
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			
			$content = curl_exec($ch);
			
			curl_close($ch);
			
			$lines = explode("\n", trim($content));
				
			foreach ($lines as $line) {
				$currency = substr($line, 4, 3);
				$value = substr($line, 11, 6);
				
				if ((float)$value) {
					$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = NOW() WHERE code = '" . $this->db->escape($currency) . "'");
				}
			}
y reemplazalo por este otro código:

Code: Select all

			foreach ($query->rows as $result) {
				$value = $this->currency($this->config->get('config_currency'),$result['code']);
				if ((float)$value) {
					$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = NOW() WHERE code = '" . $this->db->escape($result['code']) . "'");
				}
			}
esta chequeado así que es imposible que te falle, lo hice sobre la versión 1.4.9.1 y anda bien, acordate que la moneda se actualiza cuando ingresas en el admin, o sea que se va a actualizar cada ves que entres al Dashboard del Admin

Dejo también el archivo currency.php por si lo quieren descargar y no hacer los cambios a mano, dicho archivo debe estar dentro de la carpeta; admin/model/localisation/

Descarga:

Convertidor de divisa vía google


User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by Hildebrando » Sun Sep 26, 2010 11:26 pm

Muy bueno cofran!! Esto tendría que estar incluido en la 1.5.0

Hilde

Commercial Contributions:Bulk Specials| Bulk Update Prices|Search Tyre Pro
Free Contributions: Youtube video (oc 1.5.x) | Search History Report (oc 1.5.x) | Product Filter by Category (oc 1.5.x)|Youtube Popup
More Free & commercial mods: www.fpress.com


User avatar
Active Member

Posts

Joined
Fri Mar 06, 2009 8:22 pm
Location - Spain

Post by Capitan Won » Mon Sep 27, 2010 3:48 pm

Wow Cofran, es increible el conocimiento que tienes. Como dice Hildebrando, esto tenía que estar incluido en la próxima versión porque hay monedas de muy pequeño valor cuya cotización está mejor ajustada en google. Y no tiene sentido ofrecer la práctica mayoría de monedas mundiales si después el cambio da problemas o es incorrecto.
Mi gratitud total, cofran,te mandaba una cerveza por internet si pudiera ;D

De todas formas, tengo una duda, yo uso la version 1.48b, ¿el currency.php es el mismo que en la versión 1.4.91 o se modificó y debo actualizarme a la última versión?

GRACIAS!!!!!!!!!!!!!

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by cofran » Mon Sep 27, 2010 8:14 pm

mmm creo que no ha sido modificado, no obstante trata de hacer el cambio manualmente y no reemplazando el archivo por las duda. Cualquier cosa volve por acá!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by Capitan Won » Tue Sep 28, 2010 9:46 am

Probado y funciona perfecto, muy feliz. ;D
Por ponerle un pero ahora, sería quizás redondear la cifra final al alza para que todos los precios no sean 4.52 10.81 9.04, etc. y así ya sería la máxima perfección. Pero de todas formas, así está tan próximo al cambio real que es genial y suficiente para mí.
Saludos.

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by caran » Thu Oct 14, 2010 8:42 pm

Generalmente uso el conversor de moneda y a veces me sucede lo mismo que relatas. Igualmente supongo que las actualizaciones al ser automaticas pueden tener sus fallas... no sabia que provenia de yahoo la info.

Newbie

Posts

Joined
Thu Oct 14, 2010 8:37 pm

Post by Capitan Won » Fri Oct 15, 2010 11:06 am

caran, lo que ocurre es que de donde toma los datos opencart que es un .csv generado por yahoo, no aparecen muchos decimales en las monedas pequeñas y claro, las discrepancias con el cambio real son brutales. Sin embargo google es más preciso porque aporta bastantes más decimales y con esta modificación de cofran, ya no da esos problemas en monedas de poco valor como el peso colombiano.

New member

Posts

Joined
Wed Aug 11, 2010 2:09 am

Post by tommyzambrano » Sun Jan 30, 2011 9:15 am

Saludos

Bueno soy nuevo con Opencart y me parece super ! pues me gustaria saber que informacion debe ir cuando voy a ingresar una nueva moneda que es el peso colombiano


* Currency Title: Peso
* Code: COP
Symbol Left: $
Symbol Right: ????
Decimal Places: ???
Value: ??????????? pues no se que valor Poner para que tome efecto. puse 1895.20 pero no funciona me hace una conversion extraña

Alguien puede ayudare:

email: tomas.zambrano@simbiotica.com.co

Newbie

Posts

Joined
Fri Jan 28, 2011 6:06 am

Post by victormc » Tue Mar 29, 2011 5:32 am

@Todos

Necesito actualizar la moneda cada 15 minutos mínimo...

Algún tip?

Gracias.

Newbie

Posts

Joined
Tue Mar 29, 2011 5:30 am

Post by cofran » Thu Apr 21, 2011 11:36 am

cron jobs en el servidor, saludos!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by emardis2002 » Sun Jan 08, 2012 5:04 am

cofran wrote:cron jobs en el servidor, saludos!
Buenas tardes Cofran.... El cron jobs se tiene que hacer con get a "system/library/currency.php" o a "/admin/model/localisation/currency.php"? no logré encontrar eso en ningun Foro..
Gracias desde ya muchas gracias..

Newbie

Posts

Joined
Sat Apr 09, 2011 1:28 pm

Post by chivo » Sat May 26, 2018 4:52 am

Hola Amigos
Tengo un problema y es que me aparece un texto entre medio de la moneda. Tengo el sitio en español y me aparece el texto de las unidades en ingles entre medio del texto.
saben como corregir ese problema ?
Gracias

$2thousand_point567decimal_point00

Newbie

Posts

Joined
Fri May 25, 2018 5:37 am
Who is online

Users browsing this forum: No registered users and 36 guests