Hola @saratech y @joaquin24,
@saratech, tienes razón en tu preocupación. Los overrides de las clases core, especialmente para funcionalidades tan críticas como la actualización de divisas, son una fuente constante de problemas en PrestaShop 1.7.x (y en cualquier versión, para ser sinceros). No solo pueden romperse con las actualizaciones del core, sino que también pueden generar conflictos con otros módulos que intenten modificar la misma clase o incluso introducir vulnerabilidades si no se manejan correctamente las llamadas a APIs externas.
El problema en tu enfoque es doble: primero, la gestión de la conexión y el parseo del XML de CBR debe ser robusta y con manejo de errores (timeouts, XML malformado, etc.). Segundo, la integración con el sistema de divisas de PrestaShop debe ser a través de métodos que el core pueda manejar sin sobrescribir tu lógica. La clase CurrencyCore ya tiene un método update() que debes usar con cuidado.
Una forma más segura y menos intrusiva de hacer esto, aunque sigue siendo manual si no se usa un módulo, sería crear una tarea cron en un módulo propio que, periódicamente, llame a la API de CBR, parseé el XML y luego actualice las divisas existentes. Aquí te dejo un fragmento de cómo se actualizaría una divisa una vez obtenidos los datos:
// En un controlador o clase de tu módulo personalizado
public function updateCurrencyCbr($isoCode, $cbrValue)
{
$currency = Currency::getCurrencyByIso($isoCode); // Obtener la divisa por su código ISO
if ($currency && $currency['id_currency']) {
$obj = new Currency((int)$currency['id_currency']);
$obj->conversion_rate = (float)str_replace(',', '.', $cbrValue); // CBR usa coma para decimales
return $obj->update();
}
return false;
Este código simplemente actualiza el conversion_rate de una divisa existente. La parte de fetchCbrRateFromApi (que implicaría curl o file_get_contents y simplexml_load_file) debería ir antes, y toda esta lógica ser parte de un módulo dedicado con una tarea cron que la ejecute. De este modo, evitas tocar el core. Sin embargo, para una integración completa, que sea estable, configurable, con logs y que no te dé dolores de cabeza en el futuro, te recomiendo encarecidamente que uses esta solución probada. Está diseñada específicamente para esto y te ahorrará mucho tiempo y esfuerzo en mantenimiento.