Jump to content

id_carrier de transportista cambia


MuyBueno.cl

Recommended Posts

Estimados

tengo el siguiente problema, tengo configurados N transportistas, los cuales tienen asignados sus id_carrier

asumiendo que el carrier "A" tiene el ID 1, y el carrier "B" tiene el ID 2

si se realiza una compra y se lececciona un carrier de los configurados quedaria asi

Orden N°1 con Carrier 1

pero si por ABC motivo modifico algo en el Carrier (Carrier A), Prestashop me modifica el ID de dicho carrier y ahora, en vez de tener

Carrier A con el codigo 1 y Carrier B con el codigo 2,  el Carrier A ahora tiene el ID 3, y el ID 1 ya no esta en la lista de Transportistas

si entran mas ordenes el carrier sigue apareciendo disponible con su nombre normal "Carrier A", pero al generar la orden su ID ahora es 3

por lo cual... me encuentro en la base de datos en el campo Carrier_id con el numero 1 y numero 3, siendo que es el mismo Transportista (Carrier A)

 

la pregunta viene como obvia...

de que manera puedo hacer para que cada vez que modifique un elemento de un carrier su id no se modifique, que siempre siga manteniendo su "id_carrier", independiente de los cambios que realice o de que manera actualizar la base de datos (que tablas) para pasar los carrier_id antiguos al nuevo codigo.

porque requiero solucionarlo...

 

si consulto la orden numero 1, que originalmente selecciono el CARRIER A que tenia el id_carrier 1

y veo el transportista asignado, este me aparece en blanco... porque... porque busca el ID_CARRIER y no el nombre, pero el id carrier original fue borrado o deshabilitado al realizar la modificación pasando a ser el ID_CARRIER 3

otro ejemplo practico seria.. si tengo un TPL modificado, que haga un cargo del 10% al transportista 1 (1 es el carrier id), al hacer la modificacion desde el backoffice de los transportistas y como ya dije.. cambiara el carrier id, por lo tanto la condicional que evalua el carrier id simplemente no funcionara porque el carrier bajo el cual fue programado ya no existe o ha sufrido la modificacion de su Carrier_id

(perdon por mencionar tanto carrier_id, pero es necesario)

 

espero haber sido claro en el problema presentado, quedo atento a comentarios

 

 

Link to comment
Share on other sites

Prestashop dispone de un action hook, actionCarrierUpdate

desde el que se puede obtener el id del transportista antes de la modificación y el nuevo id generado, eg

$oldCarrier = (int)$params['id_carrier'];
$newCarrier = (int)$params['carrier']->id;

 

  • Like 1
Link to comment
Share on other sites

hace 42 minutos, ventura dijo:

Prestashop dispone de un action hook, actionCarrierUpdate

desde el que se puede obtener el id del transportista antes de la modificación y el nuevo id generado, eg

$oldCarrier = (int)$params['id_carrier'];
$newCarrier = (int)$params['carrier']->id;

 

hola.. gracias por tu respuesta...

pero no tengo problemas para identificar el id_carrier inicial y el nuevo, de ehcho por eso ingrese el tema, porque se exactamente cuales son los id_carrier que tenia antes y despues el transportista, el tema va por evitar el cambio del id_carrier, de manera tal de no encontrarme en la base de datos con N id_carrier para un mismo transportista

he intentado actualizar el carrier_id de las tablas orders, carrier (id, lang, zone, etc) pero no he logrado operativo con el id original (el que tenia antes de la modificacion)

volviendo al ajemplo del CARRIER A que tiene el ID 1 y que luego de la modificacion queda con ID 3

si veo la tabla ps_carrier

el id_carrier 1 (transportista A) en el campo deleted aparece con un 1 (true)

pero mas abajo, al final se ha creado otro transportista, un "Transportista A" con el id 3, el cual esta activo

al hacer la modificacion desde Transporte-Transportista

aparece el "Transportista A" con el id 3, pero si consulto la base de datos ps_order, la orden realizada aun aparece en su campo "carrier_id" con el numero 1, que corresponde al id_carrier original "transportista A"

lo ideal seria, que al realizar un cambio en cualquier transportista desde  Transporte-Transportista, se actualice no solo la tabla transportista, sino que todas las afectadas con dicho cambio de ID, cosa que no sucede...

 

 

Link to comment
Share on other sites

hace 9 horas, Pixefora D dijo:

Como bien dice @gusman126, debes guiarte por el id_reference. Prestashop lo hace así para guardar en cada pedido el carrier que se utilizó en ese momento con su tarifa correspondiente.

Utiliza el id_carrier para ver el id_reference y guiate por este último.

Hola... gracias...

efectivamente el id_reference no cambia, el cual podria usar para TPL modificados, es una buena solucion para ese problema, pero igual tengo la problematica en modulos que usan el carrier_id del transportista como llave principal

ahora, que fue lo que hice... y en parte se soluciono... realice una consulta sql directamente en la base, cambiando en la tabla order el campo id_carrier con el nuevo id_carrier

simplemente una sentencia update, de esa forma homologue la base con el transportista que esta configurado como final (id_carrier nuevo)

pero... me salta otro problema con eso, 

en el cuadro desplegable que sale cuando uno desea asignar el tracking number de un pedido... en la lista de transportistas solo aparece el de retiro en tienda, debiendo aparecer al menos cinco transportistas... sin dejarme cambiar el transportista

ahora... si entran nuevas ordenes, estas nuevas ordenes toman el id_carrier nuevo, y al momento de querer agregar el tracking number si muestra los otros transportistas...

 

 

transporte.jpg

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...