sergifri Posted May 12, 2020 Share Posted May 12, 2020 Buenas noches, Estoy programando un módulo que cambie el estado de un pedido una vez finalizado, independientemente del modo de pago o si es un pago confirmado o una transferencia bancaria. Para ello estoy utilizando el hook orderConfirmation. Al realizar un pedido y finalizarlo el cliente debería mostrarse la página de confirmación del pedido, en el caso de la transferencia se mostrarían los datos bancarios, etc, en el pago contra reembolso la cantidad que será pagada, etc, pero sin embargo lo que muestra es el error genérico "Hay un problema con su pedido, póngase en contacto con el servicio de atención al cliente. servicio de atención al cliente" <?php public function hookOrderConfirmation($params) { if ($params) { $objOrder = $params['objOrder']; if (Validate::isLoadedObject($objOrder)) { $id_order = (int)$objOrder->id; $order = new Order($id_order); if (!Validate::isLoadedObject($order)) { return; } /// código por aquí, el nuevo id de estado para el pedido será 50 /// $history = new OrderHistory(); $history->id_order = $id_order; $history->id_employee = 44; $history->changeIdOrderState(50, $id_order); $history->add(true); $history->save(); //¿debería asignar aquí una plantilla? } } } ?> El pedido cambia correctamente de estado y aparentemente todo es correcto, pero siempre muestra el warning. Entiendo que a la plantilla de confirmación del tipo de pago que sea no le está llegando $status = 'ok' o lo que necesite que le llegue y por eso muestra el error, pero estoy un poco perdido a la hora de como corregir eso. ¿Debo añadir algún código al finalizar el cambio de estado del pedido? ¿Quizás no es este el hook ideal para lo que quiero hacer? El pedido debería cambiar de estado cuando está completamente finalizado y ya ha entrado para ser procesado. Estoy usando Prestashop 1.6 ,Gracias por cualquier ayuda que me podáis prestar, Saludos! Link to comment Share on other sites More sharing options...
roja45 Posted May 13, 2020 Share Posted May 13, 2020 Hola, Estás probando esto con el método de pago con cheque? Creo que este es probablemente tu problema, esta es la plantilla order_confirmation, mira que el enlace PAYMENT_RETURN está después del enlace ORDER_CONFIMATION. Código que se ejecuta en la gancho de payment_return, al menos para el pago con cheque, requiere que el estado del pedido es algo específico. {capture name=path}{l s='Order confirmation'}{/capture} <h1 class="page-heading">{l s='Order confirmation'}</h1> {assign var='current_step' value='payment'} {include file="$tpl_dir./order-steps.tpl"} {include file="$tpl_dir./errors.tpl"} {$HOOK_ORDER_CONFIRMATION} {$HOOK_PAYMENT_RETURN} {if $is_guest} <p>{l s='Your order ID is:'} <span class="bold">{$id_order_formatted}</span> . {l s='Your order ID has been sent via email.'}</p> <p class="cart_navigation exclusive"> <a class="button-exclusive btn btn-default" href="{$link->getPageLink('guest-tracking', true, NULL, "id_order={$reference_order|urlencode}&email={$email|urlencode}")|escape:'html':'UTF-8'}" title="{l s='Follow my order'}"><i class="icon-chevron-left"></i>{l s='Follow my order'}</a> </p> {else} <p class="cart_navigation exclusive"> <a class="button-exclusive btn btn-default" href="{$link->getPageLink('history', true)|escape:'html':'UTF-8'}" title="{l s='Go to your order history page'}"><i class="icon-chevron-left"></i>{l s='View your order history'}</a> </p> {/if} Link to comment Share on other sites More sharing options...
sergifri Posted May 13, 2020 Author Share Posted May 13, 2020 Hola Roja45, Gracias por contestarme, sospechaba algo parecido y me lo has confirmado. En el momento de validar el pedido, la función encargada de ello intenta recibir como parámetro el estado correspondiente. Bankwire (transferencia): Cash on delivery (codfee, pago contra reembolso): El error se producirá por haber cambiado el estado del pedido antes de validar el pago (aunque el pago si que se ha producido correctamente). Estoy probando a utilizar el hook paymentReturn o displayPaymentReturn y ver si puedo ejecutar el código para cambiar el estado del pedido, pero no parece funcionar. ¿debería modificar las funciones que validan los pagos de los pedidos? Parece arriesgado. No tengo claro si existe un hook que actúe realmente cuando un pedido ha sido creado, validado y confirmado, es decir, cuando todos los cambios sobre el pedido entrante han finalizado. He hecho la prueba con hookActionObjectOrderHistoryAddAfter para cambiar el estado cuando el estado acaba de ser cambiado, es decir, cuando un pedido cambia su estado a por ejemplo Pago Aceptado, pero si ejecuto el cambio en OrderHistory en ese momento de la creación del pedido, añade el nuevo estado correctamente, pero en la tabla orders, el campo current_state sigue figurando como Pago Aceptado, como si en esa tabla se generara el estado después de en la tabla OrderHistory. Esto hace que desde la vista del controlador de pedidos, por fuera se vea todavía como Pago Aceptado y dentro del pedido se vea el nuevo estado, lo cual sería un error. Otra opción es utilizar una tarea cron que haga todos estos cambios cada x minutos sobre los pedidos que ya están creados y confirmados. Ahí no se produce ningún error pero no parece la forma correcta de programar. Seguro que se me escapa alguna tontería, ¿alguna forma sencilla de hacerlo? Supongo que tendré que estudiar el funcionamiento de otros módulos que modifiquen el estado del pedido entrante. Saludos! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now