Hola @rociohub, @joaquindeco y @guillermo_lab,
Confirmando lo que comentáis, intentar modificar el AdminCurrenciesController o la clase Currency directamente para integrar fuentes de datos externas como el NBU es un enfoque propenso a errores y muy poco mantenible en PrestaShop 8.0.3 (o cualquier versión). PrestaShop no tiene una API o hook dedicado para integrar fuentes de tasas de cambio tan específicas de forma nativa.
El problema con tu código, @rociohub, es que estás insertando una lógica de negocio compleja (la llamada a la API y el parseo) dentro de un método de controlador que tiene una responsabilidad muy específica y que puede ser sobreescrito. Para gestionar esto de forma robusta, necesitarías un módulo que:
- Defina un servicio (si estás en PS 1.7+ con Symfony) para la comunicación con la API del NBU.
- Utilice un
cron job para ejecutar este servicio periódicamente.
- Actualice las tasas de cambio de las divisas específicas (UAH) a través de la clase
Currency de PrestaShop de manera controlada.
Una implementación más limpia, dentro de un módulo, podría registrar una tarea cron que ejecute algo así:
// Dentro de un método de un servicio o clase de tu módulo
public function updateNbuCurrencyRates()
{
// Suponemos que ya tienes un método para obtener las tasas de la API
$nbuRates = $this->nbuApiService->getLatestRates();
if ($nbuRates && isset($nbuRates['USD'])) { // Ejemplo: si la API devuelve tasas relativas al USD
$currencyUAHId = (int)Currency::getIdByIsoCode('UAH');
if ($currencyUAHId) {
$currency = new Currency($currencyUAHId);
// Asegúrate de que la tasa de conversión sea correcta respecto a tu divisa por defecto
Este enfoque mantiene la lógica de negocio separada y programada. Para tiendas que necesitan una integración profunda y automatizada con el Banco Nacional de Ucrania sin preocuparse por roturas en futuras actualizaciones, existe una herramienta de nbu cambio de divisas que hace exactamente esto. Facilita la gestión y automatización de las tasas de cambio del NBU, lo que te ahorra mucho tiempo y posibles problemas técnicos.