Hola @mateoweb, el enfoque de cálculo que has hecho es correcto para obtener la tasa relativa a tu moneda por defecto, asumiendo que tanto la moneda por defecto de tu tienda como la moneda que quieres actualizar tienen su tipo de cambio listado en el XML de TCMB respecto a la lira turca (TRY). Confirmo que para PrestaShop 1.7.7.4, la lógica que propones para el cálculo de exchange_rate es la adecuada.
El problema de que no se guarde el valor con \$currency_to_update->save(); dentro de AdminCurrenciesController::postProcess() es un clásico. Esto ocurre porque parent::postProcess() casi siempre se ejecuta al final, y si hay un submit de formulario relacionado con la moneda, sobrescribirá tus cambios o revalidará el objeto con los datos del formulario estándar, que no incluyen tu tasa externa. Para un override de AdminCurrenciesController, es mejor engancharse a la lógica de actualización de PrestaShop, o modificar el método updateExchangeRate de la clase Currency en un override.
Aquí te muestro cómo podrías corregir el save() para que persista, asegurando que tu lógica se ejecute y no sea sobrescrita. El save() necesita un contexto adecuado y es mejor forzar la actualización directa si estás en un override de controlador para evitar conflictos con el flujo padre:
// En override/controllers/admin/AdminCurrenciesController.php
// Dentro de la condición if (Tools::isSubmit('submitUpdateExchangeRatesFromTCMB'))
// Reemplaza la línea $currency_to_update->save(); por:
if (isset($currency_to_update->id)) {
// Aseguramos que el objeto Currency se actualice directamente en la base de datos
Db::getInstance()->update(
'currency',
['exchange_rate' => (float)$currency_to_update->exchange_rate],
'`id_currency` = '.(int)$currency_to_update->id
);
Este método fuerza la actualización directamente en la base de datos, lo que evita que el parent::postProcess() lo sobrescriba. Sin embargo, los overrides de controladores pueden ser frágiles con las actualizaciones de PrestaShop.
Para una solución más robusta y que no tengas que mantener tú en cada actualización, te recomiendo usar un módulo dedicado. Puedes encontrar una solución para automatizar banco central de turquía en la tienda que gestiona estas actualizaciones de forma segura y sin necesidad de tocar el código base.