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 Publicado el 02/01/2013 a las 16:27 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 Publicado el 02/01/2013 a las 16:34 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 Publicado el 04/02/2013 a las 22:39 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 Publicado el 06/02/2013 a las 01:04 Responder

    Hola Ignacio,

    gracias a ti por compartir tu experiencia con nosotros.

    Saludos.

  • Flor Publicado el 31/05/2013 a las 16:01 Responder

    Muy buena solucion, gracias boys

  • lalo Publicado el 24/06/2013 a las 08:19 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 Publicado el 24/06/2013 a las 08:25 Responder

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

  • David Publicado el 01/07/2013 a las 17:15 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 Publicado el 03/07/2013 a las 18:07 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 Publicado el 03/07/2013 a las 18:08 Responder

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

  • tienda@tecnosouci.com Publicado el 04/07/2013 a las 17:06 Responder

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

    Ccs – Vnz

  • aquihaydominios Publicado el 05/07/2013 a las 21:19 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 Publicado el 05/07/2013 a las 21:20 Responder

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

    Saludos.

  • Juan Mª Hervás Publicado el 08/07/2013 a las 12:23 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 Publicado el 08/07/2013 a las 12:28 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 Publicado el 08/07/2013 a las 12:53 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 Publicado el 31/07/2013 a las 17:50 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 Publicado el 31/07/2013 a las 22:36 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 Publicado el 12/08/2013 a las 09:19 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 Publicado el 14/09/2013 a las 13:08 Responder

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

  • Sergio Publicado el 26/10/2013 a las 13:31 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 Publicado el 28/10/2013 a las 12:02 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 Publicado el 28/10/2013 a las 12:06 Responder

    Hola Sergio,

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

    Saludos.

  • paco Publicado el 01/11/2013 a las 21:44 Responder

    Muchas gracias funciona perfecto

  • matias Publicado el 08/01/2014 a las 12:27 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 Publicado el 16/01/2014 a las 17:48 Responder

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

  • aquihaydominios Publicado el 20/01/2014 a las 13:43 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 Publicado el 22/01/2014 a las 08:19 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 Publicado el 22/01/2014 a las 08:20 Responder

    ah y no se borra el grupo seleccionado

  • aquihaydominios Publicado el 23/01/2014 a las 14:39 Responder

    Hola Pablo,

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

    Saludos.

  • Roberto Publicado el 06/02/2014 a las 21:31 Responder

    Simplemente FANTASTICO, muy sencillo.

    Gracias

  • Eduardo Publicado el 23/03/2014 a las 10:32 Responder

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

    Gracias

  • jose angel Publicado el 09/04/2014 a las 21:52 Responder

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

    Saludos

  • Miguel Publicado el 21/04/2014 a las 05:24 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 Publicado el 24/04/2014 a las 15:40 Responder

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

  • javi Publicado el 13/05/2014 a las 13:44 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 Publicado el 13/05/2014 a las 18:01 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 Publicado el 20/05/2014 a las 12:23 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 Publicado el 04/06/2014 a las 18:02 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 Publicado el 04/06/2014 a las 18:04 Responder

    se me olvidaba tengo PRESTASHOP 1.6

  • aquihaydominios Publicado el 04/06/2014 a las 21:30 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 Publicado el 29/07/2014 a las 23:16 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 Publicado el 26/11/2014 a las 13:15 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 Publicado el 26/11/2014 a las 16:10 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 Publicado el 26/11/2014 a las 20:38 Responder

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

  • eduk2 Publicado el 26/11/2014 a las 21:49 Responder

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

    Saludos.

  • Luis Publicado el 15/04/2015 a las 11:14 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 Publicado el 28/07/2015 a las 11:37 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 Publicado el 04/02/2016 a las 08:07 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?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *