Hola @ruben_deco, entiendo perfectamente tu frustración. PrestaShop 1.7.1.2 no tiene una función nativa para un límite de valor de compra por categorías, y tu enfoque es correcto en cuanto a la lógica de cálculo.
El problema es la integración. Sobreescribir CartController directamente o intentar forzar una validación en momentos no óptimos puede ser una pesadilla de mantenimiento, especialmente si actualizas a versiones más recientes o PHP 8.x. Para tu versión 1.7.1.2, un buen punto de inyección para esta lógica es el hook actionCartSave dentro de un módulo personalizado. Así puedes validar el carrito cada vez que se actualiza o guarda, y añadir errores al controlador si se excede el límite. Esto es más limpio que un override directo.
Aquí te dejo un fragmento de cómo podría ser en la función hookActionCartSave de un módulo. He ajustado la lógica para considerar todas las categorías asociadas al producto, no solo la predeterminada, que es más preciso:
// En tu hookActionCartSave($params) de un módulo custom:
$cart = $params['cart'];
$products = $cart->getProducts(true);
$category_limits = [12 => 100.00, 15 => 50.00]; // ID Cat => Máx. (€)
foreach ($category_limits as $cat_id => $limit) {
$current_total_for_cat = 0;
foreach ($products as $item) {
if (in_array($cat_id, array_keys(Product::getProductCategories($item['id_product'])))) {
$current_total_for_cat += (float)$item['total_wt'];
}
Este código añadiría un error al contexto del controlador, que se mostraría al cliente. Si necesitas algo más robusto o con configuración desde el back office, para automatizar valor máximo de compra en la tienda existe un módulo dedicado que ya gestiona estas lógicas de forma profesional, es mucho más mantenible que los snippets de código.