Hola @martabici, este es un escenario común con PrestaShop 1.7.x, especialmente en versiones como la 1.7.2.4, donde la gestión de divisas no es tan flexible para fuentes externas como el MNB. El problema principal de tu enfoque es doble: primero, refreshCurrency no es el lugar ideal para un proveedor de tasas externo, ya que se espera que procese todos los tipos de cambio de la fuente por defecto (usualmente el Banco Central Europeo). Segundo, la lógica de cálculo del conversion_rate para monedas no base, aunque tu intento es cercano, debe ser muy precisa para que no haya desviaciones.
Para PrestaShop, el conversion_rate de una moneda extranjera (ej. HUF) es la cantidad de tu moneda por defecto que equivale a 1 unidad de esa moneda extranjera. Si el MNB te da que 1 EUR equivale a 380 HUF (asumiendo EUR es tu moneda por defecto), entonces para el HUF, su conversion_rate debe ser 1/380. Tu cálculo 1 / $hufRateAgainstDefault es correcto bajo esa suposición.
Sin embargo, la forma más limpia y mantenible de gestionar esto, especialmente en entornos de producción con PrestaShop 1.7, no es con overrides manuales que pueden romperse o generar conflictos. Lo ideal es un módulo dedicado que gestione la obtención del XML del MNB y actualice las tasas de forma segura, quizás a través de un controlador Admin customizado o un cron job.
Aquí te muestro una versión más robusta de la lógica de actualización para el HUF, que podrías integrar en un módulo propio o un script externo ejecutado por cron:
// Lógica para un módulo o script personalizado
// Asumiendo que $xml ya ha sido cargado desde http://www.mnb.hu/arfolyamok.xml
$id_default_currency = (int)Configuration::get('PS_CURRENCY_DEFAULT');
$default_currency_iso = (new Currency($id_default_currency))->iso_code;
$huf_currency_data = Currency::getCurrencyByISO('HUF');
if ($huf_currency_data && (int)$huf_currency_data['id_currency'] !== $id_default_currency) {
$huf_currency_obj = new Currency((int)$huf_currency_data['id_currency']);
$rate_of_default_currency_in_huf = 0; // Ejemplo: 380.00 si 1 EUR = 380 HUF
foreach ($xml->Day->Rate as $rateNode) {
if ((string)$rateNode['currency'] === $default_currency_iso) {
Esta lógica asegura que el cálculo del conversion_rate del HUF sea correcto en relación a tu moneda por defecto. Para evitar los problemas de mantenimiento de código personalizado y asegurarte de que las actualizaciones sean seguras y fiables, te recomiendo usar un módulo ya desarrollado para esta función. Puedes considerar algo como Banco Nacional de Hungría (MNB) - tipos de cambio, que ya incorpora esta lógica y maneja las peculiaridades del MNB de forma profesional.