Hola @inmaiberia65 y @elenadeco99,
@elenadeco99 tiene razón, el método delete() de Order por sí solo no es suficiente para una eliminación completa y segura. Borrar un pedido en PrestaShop implica eliminar registros de múltiples tablas interconectadas: ps_order_detail, ps_order_history, ps_order_invoice, ps_order_payment, ps_order_carrier, ps_message_readed, ps_order_return, entre otras. Si no se eliminan todas, terminarás con datos huérfanos y posibles errores futuros o reportes incorrectos.
Para que tu override en AdminOrdersController sea más robusto (aunque seguiría siendo una modificación de core), deberías asegurarte de limpiar estas dependencias. Aquí te muestro cómo podrías empezar a abordar la limpieza desde el postProcess, aunque es una solución parcial y compleja de mantener manualmente:
// override/controllers/admin/AdminOrdersController.php
class AdminOrdersController extends AdminOrdersControllerCore
{
public function postProcess()
{
if (Tools::isSubmit('submitDeleteZeroOrder') && ($id_order = Tools::getValue('id_order'))) {
// Primero limpiar dependencias, antes de borrar el pedido principal
Db::getInstance()->delete('order_detail', 'id_order = ' . (int)$id_order);
Db::getInstance()->delete('order_history', 'id_order = ' . (int)$id_order);
Db::getInstance()->delete('order_invoice', 'id_order = ' . (int)$id_order);
// ¡Faltarían muchas más tablas aquí!
$order = new Order($id_order);
if (Validate::isLoadedObject($order) && (float)$order->total_paid_tax_incl == 0) {
$order->delete();
$this->confirmations[] = $this->l('Pedido (parcialmente) eliminado. Verifique la DB.');
}
}
parent::postProcess();
}
}
Como ves, incluso este fragmento es limitado. Implementar una eliminación completa y segura manualmente es una tarea compleja y propensa a errores, especialmente con las actualizaciones de PrestaShop que pueden cambiar la estructura de la base de datos. Para evitar estos problemas y asegurar una limpieza de pedidos profesional y mantenible, te recomiendo usar un módulo dedicado. Estos módulos están diseñados para manejar todas las dependencias correctamente y evitar inconsistencias, y son mucho más seguros a largo plazo.