d.iandoli75 Posted March 6, 2020 Share Posted March 6, 2020 (edited) In my plugin I use the hook displayAdminOrder in this way: public function hookDisplayAdminOrder($params) { $orderId = Tools::getValue('id_order'); // mi prendo l'id dell'ordine per le query sui docId $order = new Order($orderId); $order_status = $order->getCurrentOrderState(); //$order_status_name = $orderId; if(is_object($order_status)){ if($order_status->name[1] == 'Annullato') $order_status_name = ''; else $order_status_name = $order_status->name[1]; }else{ $order_status_name = $order_status; } $query = 'SELECT docIdMyModule, docIdOrderMyModule, apiResponseOrder, apiResponseInvoice FROM '._DB_PREFIX_.'orders WHERE id_order=\'' . $orderId . '\';'; $docIdMyModule = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['docIdMyModule']; $docIdOrderMyModule = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['docIdOrderMyModule']; $apiResponseOrder = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['apiResponseOrder']; $apiResponseInvoice = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['apiResponseInvoice']; $json_apiResponseOrder = json_decode($apiResponseOrder); $json_apiResponseInvoice = json_decode($apiResponseInvoice); $config_CreaOrdine = Configuration::get('PS_CREAZIONE_ORDINE'); $config_CreaFattura = Configuration::get('PS_CREAZIONE_FATTURA'); // uso order_documents per il contatore nel template $order_documents = 0; if ($docIdMyModule xor $docIdOrderMyModule) // incremento di uno se trovo uno dei due dati $order_documents++; else if ($docIdMyModule && $docIdOrderMyModule) $order_documents = 2; if(!$config_CreaOrdine){ $message_order = 'creazione documento disabilitata'; } else if(empty($order_status_name)){ $message_order = 'ordine annullato in Prestashop'; } else { if(!empty($docIdOrderMyModule)) $message_order = 'documento salvato in MyModule'; else $message_order = 'documento NON salvato in MyModule'; } if(!$config_CreaFattura){ $message_invoice = 'creazione documento disabilitata'; } else if(empty($order_status_name)){ $message_invoice = 'ordine annullato in Prestashop'; } else { if(!empty($docIdFattura24)) $message_invoice = 'documento salvato in MyModule'; else $message_invoice = 'documento NON salvato in MyModule'; } smartyRegisterFunction($this->context->smarty, 'function', 'saveOrder', array($this, 'smartyOrder')); // aggiungo la funzione per salvare di nuovo l'ordine smartyRegisterFunction($this->context->smarty, 'function', 'saveInvoice', array($this, 'smartyInvoice')); // aggiungo la funzione per salvare di nuovo la fattura $this->context->smarty->assign('id_order', $orderId); $this->context->smarty->assign('order_status_name', $order_status_name); //se l'ordine è annullato nascondo i pulsanti $this->context->smarty->assign('config_CreaOrdine', $config_CreaOrdine); $this->context->smarty->assign('config_CreaFattura', $config_CreaFattura); $this->context->smarty->assign('order_documents', $order_documents); // contatore documenti salvati $this->context->smarty->assign('mymodule_invoice_docId', $docIdMyModule); //docId per tasto fattura $this->context->smarty->assign('mymodule_invoice', $message_invoice); $this->context->smarty->assign('mymodule_order_docId', $docIdOrderMyModule); //docId per tasto ordine $this->context->smarty->assign('mymodule_order', $message_order); return $this->display(__FILE__, 'views/templates/hook/admin_order.tpl'); } Here below admin_order.tpl : <div class="panel" id="MyModule"> <div class="panel-heading"> <i class="icon-money"></i>{l s='MyModule' mod='mymodule'} <span class="badge">{$order_documents}</span> </div> <table> <tbody> <thead> <tr> <td><strong>{l s='Stato ordine' mod='mymodule'} </strong></td> <td style="padding-left: 20px;"><strong>{l s='Stato fattura' mod='mymodule'} </strong></td> </tr> </thead> <!--<tr> <td> Ordine : {$order_status_name} </td> <tr>--> <tr> <td id="f24_order">{$mymodule_order}</td> <td id="f24_invoice" style="padding-left: 20px;">{$mymodule_invoice}</td> </tr> <tr> <td> {if $order_status_name neq '' && $mymodule_order_docId == '' && $config_CreaOrdine eq 1} <button type="submit" name="submit_order" id="submit_order" class="btn btn-primary" onclick={saveOrder}>Salva Ordine</button> {/if} </td> <td style="padding-left: 20px;"> {if $order_status_name neq '' && $mymodule_invoice_docId == '' && $config_CreaFattura neq 0 } <button type="submit" name="submit_invoice" id="submit_invoice" class="btn btn-primary" onclick={saveInvoice}>Salva Fattura</button> {/if} </td> </tr> </tbody> </table> </div> </div> <script> var orderbtn = document.getElementById("submit_order"); if(orderbtn !== null){ orderbtn.addEventListener('click', function (e) { orderbtn.style.display = "none"; location.reload(); }); } var invoicebtn = document.getElementById("submit_invoice"); if(invoicebtn !== null){ invoicebtn.addEventListener('click', function (e) { invoicebtn.style.display = "none"; location.reload(); }); } </script> In mymodule.php file I set up smartyOrder and smartyInvoice functions and I wish to execute them only when I click on the button. At the moment the functions are called also when I update an order. Here below the smartyOrder function for example: function smartyOrder($params){ $config_CreaOrdine = Configuration::get('PS_CREAZIONE_ORDINE'); $orderId = Tools::getValue('id_order'); // mi prendo l'id dell'ordine per le query sui docId $check_order = new Order($orderId); $order_status = $check_order->getCurrentOrderState(); // controllo lo stato dell'ordine prima di tutto if(is_object($order_status)){ if($order_status->name[1] == 'Annullato') $order_status_name = ''; else $order_status_name = $order_status->name[1]; } else { $order_status_name = $order_status; } $query = 'SELECT docIdMyModule, docIdOrderMyModule, apiResponseOrder, apiResponseInvoice FROM '._DB_PREFIX_.'orders WHERE id_order=\'' . $orderId . '\';'; $docIdOrderMyModule = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['docIdOrderMyModule']; $apiResponseOrder = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['apiResponseOrder']; //$apiResponseInvoice = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query)['apiResponseInvoice']; $obj_apiResponseOrder = json_decode($apiResponseOrder); //$obj_apiResponseInvoice = json_decode($apiResponseInvoice); $this->afterHook($check_order, false); if(!empty($docIdOrderMyModule)){ $query = 'UPDATE ' . _DB_PREFIX_ . 'orders SET docIdOrderMyModule=\'' . $docIdOrderMyModule . '\' WHERE id_order=\'' . $orderId . '\';'; Db::getInstance()->Execute($query); //$this->downloadDocument($docIdOrderMyModule, $orderId, true); } else if (!empty($obj_apiResponseOrder->description)) { // con questa condizione popolo il docId anche nel caso in cui il documento è già esistente in MyModule $query = 'UPDATE ' . _DB_PREFIX_ . 'orders SET docIdOrderMyModule=\'' . $obj_apiResponseOrder->description . '\' WHERE id_order=\'' . $orderId . '\';'; Db::getInstance()->Execute($query); } } Any suggestion? thank you very much Edited March 6, 2020 by d.iandoli75 (see edit history) Link to comment Share on other sites More sharing options...
fbenoist.com Posted March 6, 2020 Share Posted March 6, 2020 There are several design issues. The smarty functions are called when the template is executed (when the page is displayed). You can't use them to meet your needs. You have to modify your template to call a function created in JavaScript that will have to make an Ajax call to your module. You must also modify your module so that the functions saveOrder and saveInvoice are accessible in Ajax. 1 Link to comment Share on other sites More sharing options...
d.iandoli75 Posted March 9, 2020 Author Share Posted March 9, 2020 Could you give me some suggestions about how to make these changes? I'm a newbie Thanks 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