Hola @inmahub64,
Los compañeros @silvia92 y @hector_9426 están en lo cierto. Tu enfoque en el OrderConfirmationController es correcto en cuanto a la lógica de conteo, pero como ya has notado, ese controlador solo se encarga de mostrar la página de confirmación, lo que significa que el pedido ya ha sido procesado y grabado en la base de datos por el módulo de pago.
Para prevenir la creación del pedido, necesitas interceptar el flujo en una etapa anterior. Un lugar adecuado es el PaymentController::postProcess(). Al hacer un override aquí, podemos añadir la verificación del número de pedidos y, si se excede el límite, evitar que el proceso de pago continúe y mostrar un mensaje de error al cliente.
Aquí te propongo una modificación de tu override para el PaymentController que debería funcionar en PrestaShop 1.7.8.0:
// override/controllers/front/PaymentController.php
class PaymentController extends PaymentControllerCore
{
public function postProcess()
{
$customer = $this->context->customer;
if (Validate::isLoadedObject($customer)) {
$id_customer = (int)$customer->id;
$totalOrders = (int)Db::getInstance()->getValue(
'SELECT COUNT(*)
Explicación del cambio:
- Validación temprana: La verificación se realiza al inicio del
postProcess del PaymentController, que es cuando el sistema está a punto de procesar la selección del método de pago.
- Redirección/Error: Si el cliente ya ha alcanzado el límite (
$totalOrders >= 5), se añade un mensaje de error a $this->errors. Además, y esto es crucial, se establece $this->step = 3; para que el controlador mantenga al cliente en la página de selección de pago, en lugar de intentar redirigirlo a la confirmación del pedido. El return; evita que el parent::postProcess() se ejecute, deteniendo así la validación del pedido por parte del módulo de pago.
Este método es más seguro que modificar directamente la clase Order y más efectivo que hacerlo en el OrderConfirmationController.
Ten en cuenta que hacer overrides de esta manera, aunque funciona, requiere mantenimiento manual en cada actualización importante de PrestaShop. Para una solución más robusta y que no tengas que mantener tú, siempre es recomendable utilizar un módulo preparado para limitar el número de pedidos. Estos módulos están diseñados para ser compatibles con las actualizaciones y suelen ofrecer opciones de configuración desde el back-office.