Hola @javierdeco,
@valeriamadrid tiene razón, el comportamiento que describes es típico cuando la lógica de filtrado es demasiado agresiva o cuando no hay reglas definidas y el módulo asume una posición por defecto de "ocultar todo".
En PrestaShop 1.7.5.1, el hook hookActionPresentPaymentOptions espera recibir un array de objetos PaymentOption por referencia. La función filterPaymentOptions debería manipular este array de forma selectiva. Si tu módulo no tiene ninguna regla de filtrado activa, es probable que filterPaymentOptions esté vaciando el array de opciones de pago por completo. Una solución común es asegurarnos de que la función de filtrado solo se ejecute si realmente hay reglas activas y configuradas para aplicar.
Podemos modificar el snippet en paymethodrules/paymethodrules.php para añadir una comprobación de que existan reglas activas antes de proceder con el filtrado. Asumiendo que el módulo tiene alguna configuración para indicar si hay reglas activas (por ejemplo, PAYMETHODRULES_HAS_ACTIVE_RULES), podrías usar esto como un guardián:
function hookActionPresentPaymentOptions(&$params)
{
if (!(int) Configuration::get('PAYMETHODRULES_ENABLED')) {
return;
}
// Solo aplicar el filtro si hay reglas activas configuradas en el módulo
if ((int) Configuration::get('PAYMETHODRULES_HAS_ACTIVE_RULES', null, null, null, 0) == 1) {
$this->getEngine()->filterPaymentOptions($params);
}
}
Esta modificación asegura que el método filterPaymentOptions solo se invocará si el módulo tiene una configuración que indica que hay reglas activas para aplicar. Si PAYMETHODRULES_HAS_ACTIVE_RULES no existe o es 0, el filtro no se ejecutará, permitiendo que las opciones de pago por defecto se muestren. Recuerda ajustar el nombre de la configuración (PAYMETHODRULES_HAS_ACTIVE_RULES) si el módulo utiliza una clave diferente para indicar si tiene reglas activas.