Hola @martaadmin, como bien señalan @carlacart71 y @rociohub, tu aproximación es válida para overrides, pero tiene matices importantes. El return false que pusiste después de la validación no impedía que parent::updateQty se ejecutara. Para bloquear la acción, la lógica de validación debe ir al principio del método y, si la condición no se cumple, debes detener la ejecución y retornar false (o true dependiendo de cómo quieras que PrestaShop interprete la operación, pero false suele ser para indicar un fallo).
Aquí te muestro cómo podrías ajustar tu override para que detenga la operación si la condición no se cumple:
// override/classes/Cart.php
class Cart extends CartCore
{
public function updateQty($quantity, $id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0, $operator = 'up', $id_shop = null, $auto_add_cart_rule = true)
{
// Lógica de validación antes de la operación real
if ($operator === 'up' && $id_product == 50) {
$currentCartTotal = $this->getOrderTotal(true, Cart::ONLY_PRODUCTS);
$newQuantity = $this->getQuantity($id_product, $id_product_attribute, $id_customization) + $quantity;
if ($currentCartTotal > 200 && $newQuantity > 1) { // No más de 1 del producto 50 si el total ya es alto
Con esta modificación, si la condición se cumple, se añade el error y el método updateQty retorna false, impidiendo que el producto se añada o la cantidad se actualice. Sin embargo, como bien menciona @rociohub, los overrides pueden ser un problema para la mantenibilidad. Para una gestión profesional y escalable de condiciones de carrito complejas, te recomiendo encarecidamente una herramienta de condiciones del carrito dedicada. Estos módulos están diseñados para manejar este tipo de lógica sin tocar el core y son mucho más fáciles de configurar y mantener a largo plazo.