Bonjour à tous et à toutes,
(Désolé si je ne suis pas dans la bonne section, mais je n'ai pas trouvé d'autre section plus appropriée)
J'administre 3 sites Internet sous Prestashop.
Pour une obscure raison, la personne que je remplace à ce poste, n'a pas fait de multiboutique mais bien 3 sites/boutiques distinct(e)s.
(Je vais essayer de faire court) Comme mon prédécesseur touchait sa bille en programmation (contrairement à moi qui débute), il a développé plusieurs modules dont 1 pour préparer les commandes, qui va chercher, sur les 3 sites, les informations sur les commandes (N° commande, qui a commandé, quel transporteur, quel produit ont été commandés, ... ET les éventuels messages des clients) pour les combiner dans un fichier CSV.
Tous les matins, la personne qui s'occupe de préparer les commandes, lance ce module sur le site maitre (sur lequel est rapatrié toutes les infos sur les commandes des 2 autres sites) pour générer le fichier CSV, imprimer cette liste de commandes et aller chercher les produits correspondants.
Si je viens poser ma question aujourd'hui, c'est parce qu'il y a un bug sur ce module : depuis quelque temps, pour une raison encore inconnue, certains messages laissés par les clients ou par nous en interne, ne remontent pas et n'apparaissent pas sur ce fichier CSV.
En cherchant dans le dossier du module en question, où étaient appelés/récupérés les messages, j'ai trouvé les lignes de code suivantes dans /classes/orderArrayCreator.class.php :
puis, plus loin dans le fichier, le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 foreach ($orderList as $line) { $message = DB::getInstance()->getValue("SELECT message FROM " . pSQL(_DB_PREFIX_) . "customer_message cm LEFT JOIN " . pSQL(_DB_PREFIX_) . "customer_thread ct ON (cm.id_customer_thread=ct.id_customer_thread) WHERE ct.id_order = " . (int)$line['id_order'] . " AND cm.id_customer_message = ( SELECT max(id_customer_message) FROM " . pSQL(_DB_PREFIX_) . "customer_message cm WHERE ct.id_order = " . (int)$line['id_order'] . " )" ); $tab = array( CHR(13) => " ", CHR(10) => " "); $messageModified = strtr($message, $tab); $messageReduced = ''; if ($messageModified != '') { $messageReduced = Tools::substr($messageModified, 0, 50) . ' [...]'; }
(Dites-moi si je me trompe dans mon interprétation) Dans la première partie du code, on voit qu'on demande à aller chercher le message dans la table ps_customer_message en fonction de l'id_customer_thread. La table ps_customer_thread fait la jonction/le lien entre le N° de la commande (id_order) et l'id_customer_thread.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 $customerThreadToGet = array( 'resource' =>'customer_threads', 'display' => '[id]', 'filter[id_order]' => '[' . $id_order . ']' ); $xml_thread = $webService_getOrder->get($customerThreadToGet); $thread_resources = $xml_thread->customer_threads->children(); $thread = (int)$thread_resources->customer_thread->id; $messageToGet = array( 'resource' =>'customer_messages', 'display' => '[message]', 'sort' => '[id_DESC]', 'filter[id_customer_thread]' => '[' . $thread . ']' ); $xml_thread = $webService_getOrder->get($messageToGet); $message_resources = $xml_thread->customer_messages->children(); $message = (string)$message_resources->customer_message->message;
Dans la seconde partie du code, dans la table ps_customer_thread on filtre par N° de commande (id_order) puis dans la table ps_customer_message, on filtre par id_customer_thread et on tri par ordre décroissant de façon à récupérer le dernier message.
(Par rapport au code ci-dessus et étant relativement débutant en programmation) Pouvez-vous m'aider SVP à comprendre pourquoi ce module bugue et pourquoi certains messages ne sont pas récupérés ?
Un grand merci par avance pour votre aide.
Bonne journée![]()
Partager