Jump to content

Doublon de commande sur Prestashop 1.6


Recommended Posts

Bonjour,

 

Nous rencontrons un problème, je ne sais pas si cela viens de Prestashop ou d'un module tiers mais il nous arrive, parfois, d'avoir des doublons de commande. Parfois avec le même ID, parfois avec un ID différent. La date est exactement la même et je ne sais pas pourquoi, sur certaine commande, elles apparaissent en doublon. J'ai apporté quelques modifications sur différents fichier notamment en utilisant la fonction hookOrderConfirmation, je ne récupère qu'une seule commande à ce niveau, aucun doublon à signaler. Le problème survient uniquement sur le module universalpay, que je n'ai pas modifié, cela vient peut-être d'eux mais je n'ai toujours pas de réponse de leur part. Je tente ma chance ici si des fois quelqu'un en saurait davantage !

Je suis avec Prestashop v1.6.1.9 et le module de paiement avec lequel j'ai le soucis est universalpay v2.4.

 

Si vous avez besoin de plus d'informations n'hésitez pas.

 

Merci par avance de votre aide

Link to comment
Share on other sites

c'est tout autant impossible d'avoir la même référence que le même id, et, je doute que tu ais l'un sans l'autre ou alors il y a de sérieux problème dans ta bdd.

ce qui est possible c'est 2 id différents et 2 références quasi identique l'une XXXXX-1 et l'autre XXXXX-2 dans le cas d'une commande multi-shipping, mais  elles ne contiennent pas les même produits

Link to comment
Share on other sites

Merci tout d'abord de ton intervention rapide.

Voici ce que je trouve en BDD :

<table>
<tr>
<th>id_order</th>
<th>reference</th>
<th>id_shop_group</th>
<th>id_shop</th>
<th>id_carrier</th>
<th>id_lang</th>
<th>id_customer</th>
<th>id_cart</th>
<th>secure_key</th>
<th>total_paid</th>
<th>total_products</th>
<th>invoice_date</th>
<th>date_add</th>
<th>date_upd</th>
</tr>
<tr>
<td>889</td>
<td>WEB-0000889</td>
<td>1</td>
<td>1</td>
<td>46</td>
<td>1</td>
<td>394</td>
<td>3777</td>
<td>98798798787874545621</td>
<td>101.810000</td>
<td>66.840000</td>
<td>2018-01-17 12:15:52</td>
<td>2018-01-17 12:15:52</td>
<td>2018-01-17 12:15:52</td>
</tr>
<tr>
<td>890</td>
<td>WEB-0000889</td>
<td>1</td>
<td>1</td>
<td>46</td>
<td>1</td>
<td>394</td>
<td>3777</td>
<td>98798798787874545621</td>
<td>101.810000</td>
<td>66.840000</td>
<td>2018-01-17 12:15:52</td>
<td>2018-01-17 12:15:52</td>
<td>2018-01-17 12:15:52</td>
</tr>
</table>

Concernant la référence, je la modifie dans la fonction generateReference dans l'override de Order.php

Mais cela n'explique pas pourquoi le doublon de la commande.

Edited by [email protected] (see edit history)
Link to comment
Share on other sites

Je l'ai mis dans override/classes/order/Order.php et j'ai utilisé la fonction generateReference comme ceci :

 

// Modification référence commande : WEB-000idCommande
public static function generateReference () {
    $last_id = Db::getInstance()->getValue('
  SELECT MAX(id_order)
  FROM ' . _DB_PREFIX_ . 'orders');

    return 'WEB-' . str_pad((int)$last_id + 1, 7, '0000000', STR_PAD_LEFT);
}
Link to comment
Share on other sites

Hum il y a quelque chose d'impossible ici.

Dans PaymentModule.php, la fonction generateReference() est appelé de cette manière:

            do {
                $reference = Order::generateReference();
            } while (Order::getByReference($reference)->count());

Donc il est impossible d'avoir 2 référence identique, ça part en boucle infini avec ton override.

 

Tu as du donc également changer quelque chose dans PaymentModule.

Un module que je connais qui fait les choses +/- de la même manière est celui-ci:

https://eoliashop.com/reftoid

Le changer pour qu'il réponde à ton besoin exact (WEB-000000XX) est trivial

Link to comment
Share on other sites

Merci de ta réponse.

En effet, le fichier PaymentModule est aussi override avec la fonction validateOrder avec les modifications suivantes :

$order->invoice_date = '0000-00-00 00:00:00'; 
PAR
$order->invoice_date = date('Y-m-d H:i:s');
 
'{payment}' => Tools::substr($order->payment, 0, 32)
PAR
'{payment}' => Tools::substr($order->payment, 0, 34)
 
'{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false)
PAR
'{total_shipping}' => Tools::displayPrice($order->total_shipping_tax_excl, $this->context->currency, false)
 
Rien de plus sur cette fonction.
 
Le problème du module, c'est qu'il est payant, je ne suis pas responsable de l'achat de module mais justement du développement, pour ne pas acheter de module. 
Des solutions que j'ai pu voir sur internet, plusieurs proposent l'override et personne n'a l'air de se plaindre de doublons de commande. C'est étrange.
 
 
Je viens d'avoir sur la boutique un autre doublon, celui-ci avec une référence différente, un ID différent. Les produits sont les mêmes également.
En BDD, le current_state dans ps_orders sont différents ainsi que le delivery_number
Ce n'est pas la première fois non plus que j'ai cette erreure, et à chaque fois, ce sont ces deux modifications qui changent entre les deux commandes.
Ce n'e
Si c'est une piste supplémentaire ...
Edited by [email protected] (see edit history)
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...