Borrar pedidos en Prestashop 1.5 o superior

Borrar pedidos en Prestashop 1.5 o superior

Para borrar o eliminar pedidos en Prestashop 1.4, estábamos acostumbrados a añadir una simple línea en el fichero AdminOrders.php, del directorio de \admin\tabs:

$this->delete=true;

Con esto teníamos la posibilidad de borrar los pedidos desde la pestaña Pedidos, bien uno a uno o marcando todos y pulsando un botón para eliminar todos. Esto era muy útil para borrar pedidos de prueba por ejemplo.

En Prestashop 1.5.2 esto ha cambiado un poco. Tanto es así, que salieron módulos que nos permitían borrar los pedidos uno a uno introduciendo el id del pedido, sin darnos la posibilidad de borrar todos, lo cual era muy lento. Pero hay una solución similar a la que teníamos en versiones anteriores.

Para ello modificaremos el fichero AdminOrdersController.php que encontraremos en el directorio /controllers/admin

Tan sólo tenemos que añadir las 2 líneas siguientes:


/* Eliminar pedidos en Prestashop 1.5 o superior */
$this->addRowAction('delete');
$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
/* FIN: Eliminar pedidos en Prestashop 1.5 o superior */

Puede quedar algo similar a esto:

Borrar Pedidos Prestashop AdminOrdersController

Cómo podéis ver, hemos añadido el código (1) y (2), y el (3) lo selañamos en la captura, porque es lo que en versiones anteriores de Prestashop se ponía a true, pero en este caso, debe permanecer como false.

Si te ha sido de ayuda o crees que le puede ser de ayuda a alguien, no te olvides de compartirlo en tus redes sociales. ¡Gracias!

50 comentarios
  • Jose Costa
    Enviado el 16:27h, 02 enero Responder

    He encontrado un módulo que puede ayudar, espero que os resulte interesante.

    http://mypresta.eu/modules/administration-tools/delete-orders-free.html

    Un saludo.

  • aquihaydominios
    Enviado el 16:34h, 02 enero Responder

    Hola Jose,

    gracias por la aportación. Precisamente en el artículo, cuando nos referimos a que salieron módulos para resolver este tema, nos referíamos a este en concreto. No obstante, la versión gratuita solo permite borrar pedidos 1 a 1, introduciendo el ID. Parece que hay una nueva versión de pago que te permite borrarlos todos de una lista, pero no vemos necesaria la instalación de un módulo, si se puede resolver fácilmente con un par de líneas.

    No obstante, gracias por la aportación, puede que a algún usuario le sea de ayuda.

    Saludos.

  • Ignacio
    Enviado el 22:39h, 04 febrero Responder

    Acabo de añadir estas 3 líneas de código y me ha funcionado perfectamente, he podido eliminar los pedidos de prueba que llevaba realizando.

    Gracias por la aportación.
    Saludos!!

  • aquihaydominios
    Enviado el 01:04h, 06 febrero Responder

    Hola Ignacio,

    gracias a ti por compartir tu experiencia con nosotros.

    Saludos.

  • Flor
    Enviado el 16:01h, 31 mayo Responder

    Muy buena solucion, gracias boys

  • lalo
    Enviado el 08:19h, 24 junio Responder

    Hola a todos entiendo que el codo os funciona a todos pero yo no logro hacer que esto me funciene bien me da error. ¿podrias echar un vistazo a codigo y decirme por ocurre eso.?
    es que da el error al agregar la linea 2

    $this->table = ‘order’;
    $this->className = ‘Order’;
    $this->lang = false;
    $this->addRowAction(‘view’);

    $this->addRowAction(‘delete’);

    $this->explicitSelect = true;

    $this->bulk_actions = array(‘delete’ => array(‘text’ => $this->l(‘Delete selected’), ‘confirm’ => $this->l(‘Delete selected items?’)));

    $this->allow_export = true;
    $this->deleted = false;
    $this->context = Context::getContext();

    • aquihaydominios
      Enviado el 08:25h, 24 junio Responder

      Prueba a cambiar las comillas por las que están enl a tecla de «?». Este puede ser el problema.

  • David
    Enviado el 17:15h, 01 julio Responder

    Hola, me parece excelente poder eliminar los pedidos, pero queda un problema por resolver. si el pedido o esta previamente cancelado o no eliminas todos los productos antes, cuando elimines el pedido los productos se pierden por que no se devuelven al inventario.

  • JUAN Mª HERVAS GONZALEZ
    Enviado el 18:07h, 03 julio Responder

    Hola.

    He hecho lo que pone, y cuando le doy a la pestaña pedidos me saca de prestashop y me pone en el navegador:
    http://localhost/prestashop/juan/index.php?controller=AdminOrders&token=2ca1576a7c08a690bbba4b9a42da6a3e

    Donde JUAN es el nombre que he cambiado a la carpeta ADMIN.

    Gracias por vuestra atención.

    Saludos

  • JUAN Mª HERVAS GONZALEZ
    Enviado el 18:08h, 03 julio Responder

    Perdón, se me olvidó poner, ¿qué estoy haciendo mal?

  • tienda@tecnosouci.com
    Enviado el 17:06h, 04 julio Responder

    Excelente..!! funciona a la perfección..
    Gracias por el aporte..!!

    Ccs – Vnz

  • aquihaydominios
    Enviado el 21:19h, 05 julio Responder

    Hola Juan,

    quizás al copiar el código, desde tu navegador se introdujo alguna comilla mal. Lo hemos embebido para que al copiar y pegar lo haga correctamente desde todos los navegadores. Prueba de nuevo por favor y confírmanos si ahora te funciona correctamente.

    Gracias, un saludo.

  • aquihaydominios
    Enviado el 21:20h, 05 julio Responder

    Gracias tecnosouci por compartir con nosotros que os ha funcionado correctamente.

    Saludos.

  • Juan Mª Hervás
    Enviado el 12:23h, 08 julio Responder

    Hola,

    Lo he revisado y en principio lo veo bien. Os dejo el código para que por favor me digáis que estoy haciendo mal.

    Gracias por vuestra atención.

    Saludos.

    public function __construct()
    {
    $this->table = ‘order’;
    $this->className = ‘Order’;
    $this->lang = false;
    $this->addRowAction(‘view’);
    $this->addRowAction(‘delete’);
    $this->explicitSelect = true;
    $this->bulk_actions = array(‘delete’ => array(‘text’ => $this->l(‘Delete selected’), ‘confirm’ => $this->l(‘Delete selected items?’)));
    $this->allow_export = true;
    $this->deleted = false;
    $this->context = Context::getContext();

    • aquihaydominios
      Enviado el 12:28h, 08 julio Responder

      Hola Juan,

      ¿te aparece la opción de borrar y cuando la pulsas no hace nada? ¿O ni si quiera te aparece y se queda todo en blanco dando algún error PHP…?

      Gracias, un saludo.

      • Juan Mª Hervás
        Enviado el 12:53h, 08 julio Responder

        Hola,

        No, entro bien en prestashop, pero cuando le doy a la pestaña pedidos, me saca del prestashop y me lleva a :

        http://localhost/prestashop/juan/index.php?controller=AdminOrders&token=2ca1576a7c08a690bbba4b9a42da6a3e

        Quedándose la ventana del navegador en blanco. Juan es el nombre por el que he cambiado la carpeta ADMIN tal y como dice al final la instalación de prestashop.

        ¿puede ser algo de los permisos de escritura?, he utilizado el comando attribute para cambiar los permisos de escritura de la carpeta prestashop pero no hay forma, se quedan siempre en de solo lectura, ¿esto puede influir?

        Gracias por vuestra atención.

        Saludos.

  • Ron Morales
    Enviado el 17:50h, 31 julio Responder

    Va bien para borrar los pedidos visualmente pero en la base de datos hay apartados que no los borra como order_history ,order_detail, ps_order_discount sabeis como se podría hacer para que borrara todo?

  • aquihaydominios
    Enviado el 22:36h, 31 julio Responder

    Hola Ron,

    hay algunas tablas que se suelen usar para las estadísticas o historial, y puede efectivamente que de esta forma no se borre todo por completo. Si quieres hacer una limpieza más detallada, puedes hacerlo directamente desde la base de datos. En cualquier caso, no recomendamos esa opción a no ser que sea un usuario avanzado y la cantidad de pedidos a eliminar sea muy alta y sea realmente un inconveniente por el peso de la base de datos.

    Saludos.

  • efemedia
    Enviado el 09:19h, 12 agosto Responder

    Muchas gracias por el aporte, con sólo dos líneas en el código se pueden eliminar tanto pedidos como carritos abandonados sin error. Está Genial !!

  • Rts
    Enviado el 13:08h, 14 septiembre Responder

    Buenisimo!!! gran aporte, muchas gracias!!!!

  • Sergio
    Enviado el 13:31h, 26 octubre Responder

    Tengo la versión 1.5.4.1 de Prestashop. He probado el código, y funciona, pero cuando le doy a un pedido para abrirlo, me salta a la ventana de ‘crear nuevo pedido’ en lugar de mostrarme el pedido.
    Al deshacer el código todo vuelve a la normalidad, pero claro, sin la opción de eliminar pedidos.
    ¿Alguien ha probado este parche con la misma versión que yo?

    Gracias por vuestros aportes.

  • Sergio
    Enviado el 12:02h, 28 octubre Responder

    Solucionado. Fallo mío. Eliminé por equivocación la linea $this->addRowAction(‘view’);
    Confirmo que funciona perfectamente en la versión 1.5.4.1

  • aquihaydominios
    Enviado el 12:06h, 28 octubre Responder

    Hola Sergio,

    gracias por confirmarlo y por tu colaboración en el blog.

    Saludos.

  • paco
    Enviado el 21:44h, 01 noviembre Responder

    Muchas gracias funciona perfecto

  • matias
    Enviado el 12:27h, 08 enero Responder

    Lo probé y funciona por lo que veo es de forma visual, ya que información de los pedidos sigue dando vueltas. Mi duda es como debo borrar los pedidos de la base de datos de forma manual, para realmente eliminarlos

    gracias

  • Daniel
    Enviado el 17:48h, 16 enero Responder

    Funciona genial muchas gracias!!!!!!!!!!!!

  • aquihaydominios
    Enviado el 13:43h, 20 enero Responder

    Hola Matías,

    en la base de datos, tienes varias tablas haciendo referencia a order. Pero a menos que sea un usuario experimentado con bases de datos y PrestaShop, no te recomendamos hacerlo, ya que podrías dejar tu tienda inoperativa. Normalmente, y como la mayoría de usuarios dicen por aquí, con lo comentado en el artículo es suficiente y funciona correctamente.

    Gracias, un saludo.

  • Pablo
    Enviado el 08:19h, 22 enero Responder

    Muy bueno y simple, pero me ocurre un problema, solamente me funciona la eliminacion individual. pero si selecciono un grupo de pedidos y presiono ‘eliminar seleccionados’,
    luego de aceptar el confirm, lo que hace es que se recarga la pagina, agregando en la url este texto ‘#order’

  • Pablo
    Enviado el 08:20h, 22 enero Responder

    ah y no se borra el grupo seleccionado

  • aquihaydominios
    Enviado el 14:39h, 23 enero Responder

    Hola Pablo,

    ¿qué versión de PrestaShop usas? ¿Has visto algún error PHP en los logs?

    Saludos.

  • Roberto
    Enviado el 21:31h, 06 febrero Responder

    Simplemente FANTASTICO, muy sencillo.

    Gracias

  • Eduardo
    Enviado el 10:32h, 23 marzo Responder

    Hola, como puedo realizar esta misma acción de agregar el boton de eliminar pedidos para Prestashop 1.6?

    Gracias

  • jose angel
    Enviado el 21:52h, 09 abril Responder

    Hola a todos me sumo a la consulta de Eduardo, me gustaria tener esta funcionalidad en prestashop 1.6

    Saludos

  • Miguel
    Enviado el 05:24h, 21 abril Responder

    Gracias por su ayuda, he podido borrar los pedidos fácilmente.
    Tan solo he traducido al castellano los mensajes.

    Un saludo y gracias.

  • Alex
    Enviado el 15:40h, 24 abril Responder

    Me funcionó a la perfección para 1.5.4.1. Gracias por la aportación!

  • javi
    Enviado el 13:44h, 13 mayo Responder

    En la version 1.6 deja de funcionar la pestaña de pedidos. Cuando entro en pedido da un error php. ¿Que hago ahora?

  • Javi
    Enviado el 18:01h, 13 mayo Responder

    el error que me da al entrar en la pestaña de los pedidos es:

    Error interno del servidor HTTP 500

    El Servidor Web no puede realizar esta solicitud. Por favor, inténtelo de nuevo más tarde.

    Alguien me puede decir que hay mal:

    public function __construct()
    {
    $this->bootstrap = true;
    $this->table = ‘order’;
    $this->className = ‘Order’;
    $this->lang = false;
    $this->addRowAction(‘view’);
    $this->addRowAction(´delete´);
    $this->explicitSelect = true;
    $this->allow_export = true;
    $this->bulk_actions = array(´delete´=> array(´text´=> $this->l(´Delete selected´),
    ´confirm´=>$this->l(´Delete selected items?´)));
    $this->deleted = false;
    $this->context = Context::getContext();

  • Antonio Menchón
    Enviado el 12:23h, 20 mayo Responder

    Muy buen artículo, la información me ha sido de mucha utilidad. Gracias. Espero que este sitio web siga funcionando por mucho tiempo.

    Saludos! 🙂

  • jorge
    Enviado el 18:02h, 04 junio Responder

    He puesto las lineas de codigo y todo correcto, ya que en cada pedido ya me sale la opcion eliminar.
    Pero como puedo borrar todos los pedidos a la vez de forma masiva????

  • jorge
    Enviado el 18:04h, 04 junio Responder

    se me olvidaba tengo PRESTASHOP 1.6

  • aquihaydominios
    Enviado el 21:30h, 04 junio Responder

    Hola Jorge,

    puedes seleccionar todos y pulsar el botón de abajo de borrado. Puede que te aparezca en inglés.

    Saludos.

  • Aldo Scully
    Enviado el 23:16h, 29 julio Responder

    Ola.
    Uso Prestashop 1.5.6.0 e as alterações ocorreram normalmente. Deu tudo certo. Ja tinha feito uma alteração numa outra loja com Prestashop 1.4.4.1 mudando no codigo tambem, obviamente diferente dessa vesao mas sabia que havia essa possibilidade. Bem melhor do que instalar modulos.
    Obrigado.

  • Isidro
    Enviado el 13:15h, 26 noviembre Responder

    Hola, he encontrado este código y me ha servido de mucho, gracias, pero querria hacerte una pregunta; he añadido a la tabla ps_orders un campo int «borrado», el cual esta todo a ‘1’….lo que quiero hacer es que al clicar sobre la X, en vez de borrar el pedido de la base de datos cambie el valor de este campo «borrado» a ‘0’. Nose si es mucho pedir pero estoy atascado en ese problema y nose como solucionarlo. Gracias por anticipado.

    • eduk2
      Enviado el 16:10h, 26 noviembre Responder

      Hola Isidro,

      es interesante lo que comentas, supongo que con idea de no borrar nada, si no de simplemente ocultar. Pero lo que propones requeriría bastantes cambios a nivel de programación como para explicar en unas líneas por comentario. Si la idea es simplemente esa, mantener todo sin borrarlo, creo que te va a ser más fácil, simplemente hacer backups de la base de datos desde la propia herramienta de PrestaShop de vez en cuando. Si la idea es otra, cuéntanosla, a ver si se nos ocurre algo más fácil para poder ayudarte.

      Saludos

      • Isidro
        Enviado el 20:38h, 26 noviembre Responder

        Si, la verdad es que ha requerido el cambio de muchas cosas, pero al final ya lo tengo encaminado…Gracias por responder!!!

  • eduk2
    Enviado el 21:49h, 26 noviembre Responder

    Nos alegramos Isidro. Si una vez terminado quieres compartir lo aprendido con nosotros, no dudes en hacerlo. Será bienvenido.

    Saludos.

  • Luis
    Enviado el 11:14h, 15 abril Responder

    Hola,

    he añadido el código, comprobado la escritura pero no apararece el icono para borrar el pedido.
    También he probado comentando la línea que muestra el icono de «VER» y no desaparece.

    Estoy usando PrestaShop 1.5.4.1, ¿a alguien se le ocurre una solución?
    Gracias

  • Diego
    Enviado el 11:37h, 28 julio Responder

    Luis, el boton de ELIMINAR aparece cuando haces clic a la derecha del pedido, donde pone VER. Haz clic y veras el nuevo boton ELIMINAR.

    Funciona de maravilla este codigo. Muchas gracias.

  • Manuel
    Enviado el 08:07h, 04 febrero Responder

    Excelente, pero el problema que tengo es que para modificar el codigo tengo que hacerlo por ftp (tengo prestashop cloud) y no encuentro el directorio controllers/admin

    Alguien me podria ayudar?

O dejarnos un comentario...