Actualizando variable para estado de pedidos

Estado de pedido asignado distinto al que tiene que ser en Prestashop

Hace unos meses, me llego un email de una persona que había instalado un módulo de una “determinada pasarela de pago” y que funcionaba correctamente cuando el pago se realizaba sin problemas, pero cuando el pago fallaba, el pedido quedaba asignado en un estado distinto al de “Error de pago / Pago erróneo”, por lo tanto, era confuso tanto para el cliente como para el propietario de la tienda.

Lo primero que se me vino a la cabeza es ir al fichero que se encargaba de la validación del módulo (/modules/nombre_modulo/controllers/front/validation.php) , y me encontré que dentro de la llamada a la función validateOrder ($this->module->validateOrder(…. ) ) estaba indicado que cuando fallaba el pago, quedaba asignado en el estado => _PS_OS_ERROR_ .

(Es cierto, que depende _PS_OS_ERROR_  lo recomendable es usar directamente Configuration::get(‘_PS_OS_ERROR_ ‘), aunque en principio si usamos directamente la constate _PS_OS_ERROR_ tiene asignado dicho valor, otra cosa es que esto quede despreciado en un futuro)

Después fui, a ver el fichero “/config/config.inc.php” para ver si alguien lo había toqueteado, pero en principio la asignación de valor a la constante _PS_OS_ERROR_  era correcta.

constante

Por lo tanto, solo quedaba ver, si el valor de Configuration::get(‘PS_OS_ERROR’) es el que corresponde al id de estado pedido del estado “Error de pago”.

Vamos a la base de datos, en la tabla “ps_configuration”, y ejecutamos la siguiente consulta (para buscar la fila que tenga el valor del campo “name” = PS_OS_ERROR)

Vemos en la siguiente captura, que tiene asignado en el campo “value” el valor 12. Normalmente suele ser “8” (puede ser que en tu caso no sea el mismo, depende del ID del estado de pedido “Pago Error”).

Viendo valor campo value de la consulta obtenida en base el valor del campo name de la tabla ps_configuration

Por lo tanto, dentro del panel de administración, fui a la pestaña Configuración de pedidos => Estados (en Prestashop 1.6 pestaña Pedidos => Estados) y me encontré no solo que no coincidía el id del estado del pedido “Error de pago”, sino que directamente no aparecía dicho estado.

ID estado de pedido

Habitualmente suele venir asignado en el estado de pedido con ID => 8, pero en este caso no viene, es más, viene otro llamado “Pago en mano” (me lo he inventado en la captura).

Dos opciones:

  • Modificar el que se encuentre actualmente asignado con ID 8:

Modificar el estado que tengamos asignado en el ID 8, y colocarle los datos de “Error de pago”

ID estado de pedido
Creación estado de pago

Después, en la base de datos cambias el valor que hemos comentado anteriormente por “8”.

Modificando campo value
  • Crear un nuevo estado de pedido
    Creamos un nuevo estado de pedido (Botón => “Añadir nuevo estado de pedido”)
Botón nuevo estado de pedido
Botón nuevo estado de pedido

Nombre de estado => Error de pago (en inglés => Payment error)
Color => #8f0621
Enviar un correo electrónico al cliente cuando el estado de su pedido ha cambiado. => Señalar check
Asociar email => payment_error
Icono => Podéis subir el icono de la cruz (descargar).

Por lo tanto, me dispuse a crearlo manualmente

Creación estado de pago

Guardamos los cambios, y vemos el nuevo estado de pedido, con un nuevo ID.

Estado con id de pedido

Apunto ese => 14 (en mi caso, en vuestro caso es posible que sea otro ID).

Voy a la base de datos, y actualizamos el valor que hemos mencionado antes en la tabla ps_configuration por 14

Valor actualizado

Consideraciones:

Normalmente, los estados de pedidos que vienen por defecto, Prestashop, no deja borrarlos desde el panel. Deja borrar, los que se van añadiendo nuevos, conforme se van instalando módulos relacionados con distintos métodos de pago.

Puedes hacer una instalación limpia de prueba, ver los estados de pedidos que lleva esa instalación, y si no coinciden los que vienen por defecto con los que tienes (a excepción de lo que se han ido añadiendo nuevos conforme hayas instalado determinados módulos) ir ajustándolos.

En este ejemplo, el estado con ID  8, se llamaba “Pago en mano”, pero podrías renombrarlo, y crear uno nuevo para el de pago en mano, depende hacer lo que hemos indicado de crear uno nuevo para el “Pago Error” (también habría que ver porque dicho estado estaba modificado).De todos modos,  recordar y revisar lo que hemos indicado de la tabla ps_configuration, que coincida el value de la fila que hemos buscado con el id del estado (Pago Error) de pedido en cuestión.

Lo cierto, es que posiblemente la persona que contacto conmigo o una que le atendió la tienda antes, quizás hubiera modificado en el pasado dicho estado de pedido.

Pego pantallazo, del listado de estados de pedidos de una instalación limpia de Prestashop 1.7.4.3.

Estados de pedidos por defecto en Prestashop 1.7

Podéis verlo también en las tablas ( ps_order_state / ps_order_state_lang)

Adjunto consulta SQL (por si tuvierais interés) => Descagar

Información adicional:

Otros estados de pago que podemos acceder mediante => Configuration::get(‘XXX’)

Tabla ps_configuration => consulta:

SELECT * FROM `ps_configuration` WHERE `name` LIKE ‘%PS_OS%’

SQL

PS_OS_CHEQUE => En espera de pago por cheque
PS_OS_PAYMENT => Pago aceptado
PS_OS_PREPARATION => Preparación en curso
PS_OS_SHIPPING =>  Enviado
PS_OS_DELIVERED => Entregado
PS_OS_CANCELED => Cancelado
PS_OS_REFUND => Reembosado
PS_OS_ERROR => Error de pago
PS_OS_OUTOFSTOCK => Pedido pendiente por falta de stock (pagado)
PS_OS_BANKWIRE =>  En espero de pago por transferencia bancaria
PS_OS_WS_PAYMENT => Pago remoto aceptado
PS_OS_OUTOFSTOCK_PAID =>Pedido pendiente por falta de stock (pagado)
PS_OS_OUTOFSTOCK_UNPAID => Pedido pendiente por falta de stock (no pagado)
PS_OS_COD_VALIDATION => En espera por validación de contra-reembolso

 

Por otro lado, esta información, os puede servir de ayuda para otras situaciones.

Documento creado bajo Prestashop 1.7.4.2

2 comentarios sobre “Estado de pedido asignado distinto al que tiene que ser en Prestashop”

  1. Hola Victor, yo tengo una duda relacionada con este tema. En mi prestashop 1.7.4.4 sí tengo el estado Error en pago con ID 8, pero cuando un pedido no es finalizado mediante REDSYS por alguna razón (error en algun dato bancario, tiempo excedido,…) el pedido no queda registrado de ninguna forma en mi BO. Sería de gran ayuda tener estos pedidos con el estado Error en pago para contactar con el cliente y darle otra opción depago. ¿podrías ayudarme? Gracias

  2. Hola de nuevo, he realizado cambios en la configuración del módulo de Redsys y ya funciona de forma correcta. El cambio consiste en desactivar la opción de “En caso de error, permitir repetir el pedido”.

Los comentarios están cerrados.