Hola @saratech,
@diegoonline38 tiene razón. Tu lógica para calcular el mínimo está bien, pero el problema es cómo PrestaShop maneja la validación y los errores en el flujo de checkout. Devolver false en una clase de modelo como Cart no es suficiente para detener el proceso en el controlador. Necesitas inyectar el error en el array $this->errors del controlador y, idealmente, redirigir o recargar la página del carrito/checkout para mostrarlo.
Una forma más robusta y menos invasiva que sobrescribir CartController directamente (que puede generar conflictos con otros módulos) sería utilizar un hook en un módulo propio. El hook actionCartSave o actionValidateStep (si estás en PrestaShop 8.1.0 con checkout de pasos) es un buen lugar para interceptar y validar.
Aquí te muestro cómo podrías adaptar tu lógica a un hook en un módulo, asegurándote de que el error se propague correctamente al controlador. Esto iría en tu archivo .php del módulo personalizado:
// mymodule/mymodule.php
public function hookActionCartSave($params)
{
if (!isset($params['cart']) || !($params['cart'] instanceof Cart)) {
return;
}
$cart = $params['cart'];
$products = $cart->getProducts(true);
$manufacturerTotals = [];
foreach ($products as $product) {
Este snippet añade el error al controlador, pero para una interrupción total y una gestión de mensajes más amigable en el checkout, el enfoque con un módulo dedicado es mucho más fiable. Un módulo como Valor de pedido mínimo por fabricante gestiona todas estas complejidades, incluyendo la visualización de los mensajes de error y la prevención del checkout, sin que tengas que tocar el código directamente, lo cual es mucho más seguro para futuras actualizaciones de PrestaShop.