Hola @rubenstore,
Comprendo perfectamente la necesidad de automatizar los tipos de cambio y la frustración con los overrides frágiles. Tu planteamiento de modificar directamente Currency.php es una solución rápida, pero como ya han comentado @fernando_pro y @lorena_web30, es muy arriesgado y poco mantenible, especialmente en PrestaShop 8.1.1.
El método updateRate() en CurrencyCore está diseñado para la lógica interna de PrestaShop o para ser extendido por módulos específicos de tasas de cambio. Inyectar ahí una llamada directa a una API externa sin control de errores puede generar un punto de fallo crítico. Lo más adecuado es tener un proceso externo (por ejemplo, un script cron en un módulo) que obtenga la tasa y luego la aplique de forma segura.
Para aplicar la tasa de forma segura, una vez que la hayas obtenido y validado desde la API del Banco de Canadá, podrías usar un fragmento como este dentro de un método de tu propio módulo o script:
use Currency;
use Validate;
// Asumimos que $newCadRate ya se ha obtenido y validado correctamente de la API.
$newCadRate = 0.75; // Ejemplo de tasa obtenida
$cadCurrency = Currency::getCurrencyByIsoCode('CAD');
if ($cadCurrency && $cadCurrency['id_currency']) {
$currencyObj = new Currency($cadCurrency['id_currency']);
if (Validate::isLoadedObject($currencyObj)) {
$currencyObj->conversion_rate = (float) $newCadRate;
$currencyObj->update(); // Persistir el cambio de forma segura
Este código utiliza los objetos y métodos propios de PrestaShop (Currency::getCurrencyByIsoCode, new Currency(), update()) para modificar la tasa de conversión, asegurando que se respeten las validaciones internas. La clave es dónde y cómo se llama a este fragmento. Para una gestión robusta y sin complicaciones, que además te proteja de futuras actualizaciones, te sugiero que eches un vistazo a este módulo dedicado que ya maneja esta integración de forma segura y automática.