MorganSk Posted March 11 Share Posted March 11 Bonjour, Je me permets de vous contacter concernant un défi technique sur PrestaShop 1.7.8.7. Bien que n'étant pas développeur PHP, mes compétences en Python et dans le domaine de la data sont avancées. Je rencontre actuellement des difficultés avec un module que je développe, lequel ne produit pas les résultats attendus. L'objectif de ce module est d'améliorer la gestion des commandes pour les clients bénéficiant de conditions de paiement particulières, telles que des délais de 30 ou 60 jours. Nous avons créé un statut "En attente de virement | Expédition avant paiement" qui nécessite actuellement une mise à jour manuelle. Cette méthode provoque des désynchronisations avec notre logistique et engendre une perte de temps considérable. Le module envisagé automatise le changement de statut pour une liste spécifique de clients ayant droit à ces facilités de paiement. Après inscription de l'ID client dans une liste blanche, le statut de ses commandes passées en virement bancaire s'actualise automatiquement au statut spécifique mentionné plus haut. Cependant, malgré sa simplicité apparente, le module réinitialise le statut à "En attente de virement bancaire", sans raison apparente. Cela suggère l'existence d'un autre hook nécessaire à l'opération, que je n'ai pas encore identifié. Malgré plusieurs tests avec différents hooks, le problème persiste : le statut se réinitialise immédiatement après avoir été correctement mis à jour. J'espère que vous pourrez m'offrir des conseils ou des solutions pour surmonter ce problème. Je vous remercie sincèrement pour l'attention portée à ma demande. Cordialement, Morgan Voici le code : public function install() { Configuration::updateValue('ORDER_STATUS_LIVE_MODE', false); return parent::install() && $this->registerHook('header') && $this->registerHook('displayBackOfficeHeader') && // $this->registerHook('actionOrderStatusUpdate'); // $this->registerHook('actionValidateOrder'); $this->registerHook('actionOrderStatusPostUpdate'); // Enregistrement du nouveau hook } ---------------------------------------------- protected function getConfigForm() { return array( 'form' => array( 'legend' => array( 'title' => $this->l('Settings'), 'icon' => 'icon-cogs', ), 'input' => array( array( 'type' => 'switch', 'label' => $this->l('Live mode'), 'name' => 'ORDER_STATUS_LIVE_MODE', 'is_bool' => true, 'desc' => $this->l('Use this module in live mode'), 'values' => array( array( 'id' => 'active_on', 'value' => true, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => false, 'label' => $this->l('Disabled') ), ), ), array( 'type' => 'textarea', 'label' => $this->l('Whitelist Client IDs'), 'name' => 'ORDER_STATUS_WHITELIST_DISPLAY', 'desc' => $this->l('Currently whitelisted client IDs (read-only)'), 'readonly' => true, ), array( 'col' => 3, 'type' => 'text', 'name' => 'ORDER_STATUS_WHITELIST', 'label' => $this->l('Whitelist Client IDs'), 'desc' => $this->l('Enter the customer IDs to whitelist, separated by commas.'), ), ), 'submit' => array( 'title' => $this->l('Save'), ), ), ); } -------------------------------------- protected function getConfigFormValues() { return array( 'ORDER_STATUS_LIVE_MODE' => Configuration::get('ORDER_STATUS_LIVE_MODE', true), 'ORDER_STATUS_WHITELIST' => Configuration::get('ORDER_STATUS_WHITELIST', ''), ); } ----------------------------------------- protected function postProcess() { $form_values = $this->getConfigFormValues(); foreach (array_keys($form_values) as $key) { Configuration::updateValue($key, Tools::getValue($key)); } Configuration::updateValue('ORDER_STATUS_WHITELIST', Tools::getValue('ORDER_STATUS_WHITELIST')); } --------------------------------------- public function hookActionOrderStatusPostUpdate($params) { static $alreadyRun = false; if ($alreadyRun) { return; } $orderId = $params['id_order']; $order = new Order($orderId); $customer = new Customer($order->id_customer); $customStatusId = 20; $whitelist = explode(',', Configuration::get('ORDER_STATUS_WHITELIST')); // Vérifiez si le client est dans la whitelist et que le statut actuel est "En Attente de Virement" if (in_array($customer->id, $whitelist) && $order->current_state == Configuration::get('PS_OS_BANKWIRE')) { if ($order->module == 'ps_wirepayment') { $this->logToFile("Commande {$orderId} de client whitelisté, mise à jour du statut à {$customStatusId}"); $order->setCurrentState($customStatusId); $order->save(); $alreadyRun = true; } } } private function logToFile($message) { $logPath = $this->local_path . 'log/order_status_debug_5.log'; $date = new DateTime(); $timestamp = $date->format('Y-m-d H:i:s'); $logEntry = "[$timestamp] $message\n"; if (!is_dir(dirname($logPath))) { mkdir(dirname($logPath), 0755, true); } file_put_contents($logPath, $logEntry, FILE_APPEND); } Link to comment Share on other sites More sharing options...
Eolia Posted March 11 Share Posted March 11 vous n'avez pas d'autre module hooké sur statusupdate ? 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