Jump to content

coupons


Saraaa

Recommended Posts

Bonjour ,

J'ai donc déjà posé la question à propos de ce problème que j'ai avec les bons d'achat (cart rule)

Maintenant, je suis un peu plus consciente du cas où le problème se pose

Mon problème est que j'ai créé des bons d'achat (cart rule) de panier pour un grand groupe de personnes. Chacune d'entre eux possède un bons d'achat (cart rule) pouvant être utilisée partiellement. Avec l'option de livraison gratuite, la valeur de la règle de panier est un montant avec taxe.

Et quand un client achète des produits dans ma boutique et utilise la règle du panier, le problème se pose alors lorsque la règle du panier a la valeur exacte du total des produits de la commande, dans le back office dans le détail de la commande  je trouve le montant de réduction, mais aucune information indiquant quelle règle de panier a été utilisée pour cette réduction.

dans la base de données, le montant de réduction existe dans la table ps_orders mais il n'y a pas de ligne de cet ordre dans la table ps_order_cart_rule et la règle de panier peut toujours être utilisée car aucune mise à jour n'a eu lieu dans la table ps_cart_rule.

Je veux savoir comment fonctionne la règle de panier et comment puis-je résoudre ce problème, SVP ???

PS: Vous trouvez des captures d'écran d'un test que j'ai fait moi-même

J'ai deux prestashop 1.6.1.6 et 1.6.1.23 et le problème est dans les deux

Cart_rule4.PNG

Order3.PNG

Order2.PNG

Order1.PNG

Cart_rule3.PNG

Cart_rule2.PNG

Cart_rule1.PNG

Link to comment
Share on other sites

Merci pour votre réponse 

Effectivement le problème était dans la fonction ValidateOrder dans la classe PaymentModule, quand le client utilise un bon d'achat qui a exactement le même montant que son achat avec l'option de free shipping, dans la fonction il rentre dans la condition qui créer un nouveaux coupon si la totalité du premier n'est pas consommé 

// IF
                        //	This is not multi-shipping
                        //	The value of the voucher is greater than the total of the order
                        //	Partial use is allowed
                        //	This is an "amount" reduction, not a reduction in % or a gift
                        // THEN
                        //	The voucher is cloned with a new value corresponding to the remainder
                        if (count($order_list) == 1 && ($values['tax_incl']-$order->total_shipping_tax_incl) > ($order->total_products_wt - $total_reduction_value_ti) && $cart_rule['obj']->partial_use == 1 && $cart_rule['obj']->reduction_amount > 0) {

et dans la ligne 559 dans la condition 

                            if ($voucher->reduction_amount <= 0) {
                                continue;
                            }

comme le $voucher->reduction_amount = 0 il sort de la boucle sans faire l'insertion dans la table order_cart_rule et sans faire le update dans la table cart_rule

 $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values, 0, $cart_rule['obj']->free_shipping);

                        if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && !in_array($cart_rule['obj']->id, $cart_rule_used)) {
                            $cart_rule_used[] = $cart_rule['obj']->id;

                            // Create a new instance of Cart Rule without id_lang, in order to update its quantity
                            $cart_rule_to_update = new CartRule((int)$cart_rule['obj']->id);
                            $cart_rule_to_update->quantity = max(0, $cart_rule_to_update->quantity - 1);
                            $cart_rule_to_update->update();
                        }

 

Edited by Saraaa (see edit history)
Link to comment
Share on other sites

Bonjour je m'incruste sur le problème pour poser une question par rapport a comment tu as réussi a afficher le petit message sur la page panier  pour "Afficher le montant restant jusqu'au frais de port gratuit"

 

Je sais qu'il existent des modules mais je sais aussi qu'on peut modifier dans les fichiers pour avoir donc le résultat. 

 

Tu aurais une réponse s'il te plaît, je cherche de partout et je n arrive pas a trouver de solution.

 

Merci

Link to comment
Share on other sites

C'est vrai que j'avais corrigé ce bug il y a quelques temps...

Il faut remplacer 

if ($voucher->reduction_amount <= 0) {
    continue;
}

par

if ($voucher->reduction_amount > 0) {

    //le bloc de la création de la nouvelle cart rule (reliquat)

}  // <- ne pas oublier cette parenthèse fermante !

 

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...