Jump to content

[Résolu] Bug avec les produits personnalisés


Recommended Posts

Bonjour à tous,

Il y a 10 jours j'ai ouvert dans le bug tracker un rapport de bug lié aux produits personnalisés :
Quand on supprime du panier un produit personnalisé, la quantité de tous les produits non personnalisables présents dans le panier est décrémentée de 1.
(entrée n°1549 du bug tracker)

Ce qui m'étonne c'est que je suis le seul a avoir signalé ce bug.
S'il est bien réel, tous ceux qui utilisent la fonctionnalité de personnalisation des produits ont forcément le même problème.

Je remercie d'avance les âmes de bonne volonté de la communauté de me dire ce qu'il en est :
* si vous ne reproduisez pas le bug.
* si vous constatez un comportement analogue (et dans ce cas, éventuellement, enrichir le rapport de bug déjà ouvert avec votre scénario pour faire avancer le schmilblick ...)

Link to comment
Share on other sites

Pour information destinée notamment aux utilisateurs de la fonctionnalité de personnalisation des produits (par image ou texte), voici un scenario qui illustre les problèmes liés aux produits personnalisés (SVN 632) :

1. Ajouter au panier :

* 1 exemplaire d'un produit personnalisé C1
* 2 exemplaires d'un autre produit personnalisé C2
* 1 exemplaire d'un produit non personnalisable N1
* 2 exemplaires d'un autre produit non personnalisable N2

(voir capture d'écran “bug_custom_001.png”)

2. Supprimer C1 du panier :

* C1 disparaît du panier : OK
* Les 2 exemplaires de C2 sont toujours présents : OK
* La quantité de N1 est décrémentée de 1 (quantité de N1 = 0) : KO
* La quantité de N2 est décrémentée de 1 (quantité de N2 = 1) : KO

(voir capture d'écran “bug_custom_002.png”)

3. Supprimer un des deux exemplaires de C2 du panier (bouton ”-”) :

* C2 disparaît complètement du panier (alors qu'il devrait en rester 1 exemplaire) : KO
* La quantité de N1 est maintenant de 2147483647 : KO
* La quantité de N2 est maintenant de 2147483647 : KO

(voir capture d'écran “bug_custom_003.png”)

Ce scenario a été ajouté au rapport de bug n°1549.

6282_bG821mdptE9Ng23PSznw_t

6283_R0JsIPwgrTj7hHWuSbRF_t

6284_XPr1S5SjVxXj9stjmaQ1_t

Link to comment
Share on other sites

Bonjour

j'avais envoyé ceci à la PS team, je ne sais pas si c'est modifié dans le svn :

pour supprimer un produit si on vient de supprimer customisation et qté=0 (comportement normal il me semble, de plus si on laisse le produit avec qté=0, le shipping cost n'est pas recalculé, le panier devient faux)

/classes/Cart.php

CHERCHER

public    function deleteProduct($id_product, $id_product_attribute = NULL, $id_customization = NULL)



REMPLACER

            return $this->_deleteCustomization(intval($id_customization));



PAR

            $this->_deleteCustomization(intval($id_customization));








Pour supprimer une personnalisation, le champ est mal nommé, ça ne supprime pas :

/modules/blockcart/ajax-cart.js

DANS

remove : function(idProduct, idCombination, customizationId){



CHERCHER

data: 'ajax=true' + ((customizationId && customizationId != null) ? '&deleteCustomizableProduct;=' + customizationId + '&add&op;=down' : '&delete;').....



REMPLACER PAR

data: 'ajax=true' + ((customizationId && customizationId != null) ? '&id;_customization=' + customizationId + '&add&op;=down' : '&delete;')

Link to comment
Share on other sites

Et aussi :

La suppression d'un produit personnalisé réduit la quantité de tous les produits pour tous les clients !

CHERCHER /classes/Cart.php

    private    function _deleteCustomization($id_customization)
   {
       if (!$result = Db::getInstance()->getRow('SELECT `quantity` FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.intval($id_customization)) OR
           !Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'cart_product` SET `quantity` = `quantity` - '.intval($result['quantity'])))
           return false;
       return Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.intval($id_customization));
   }



REMPLACER PAR

    private    function _deleteCustomization($id_product, $id_customization, $id_product_attribute=NULL)
   {
       if (!$result = Db::getInstance()->getRow('SELECT `quantity` FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.intval($id_customization)) OR
           !Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'cart_product` SET `quantity` = `quantity` - '.intval($result['quantity']).' WHERE `id_product`='.intval($id_product).' AND `id_cart` = '.intval($this->id).' AND `id_product_attribute` = '.($id_product_attribute != NULL ? intval($id_product_attribute) : '\'\'')))
           return false;
       return Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.intval($id_customization));
   }



CHERCHER

        if (intval($id_customization) AND intval($quantity) < 1)
           return $this->_deleteCustomization(intval($id_customization));



REMPLACER PAR

        if (intval($id_customization) AND intval($quantity) < 1)
           return $this->_deleteCustomization($id_product,intval($id_customization),$id_product_attribute);



CHERCHER

    public    function deleteProduct($id_product, $id_product_attribute = NULL, $id_customization = NULL)
   {
       if (intval($id_customization))
           return $this->_deleteCustomization(intval($id_customization));



REMPLACER PAR

    public    function deleteProduct($id_product, $id_product_attribute = NULL, $id_customization = NULL)
   {
       if (intval($id_customization)){
           $this->_deleteCustomization($id_product,intval($id_customization),$id_product_attribute);
       }

Link to comment
Share on other sites

Merci beaucoup, Vincent, d'avoir partagé ces infos.
Je vais tout de suite essayer d'appliquer ces modifs.
Et en espérant également que cela aide la team à tordre de cou à ce bug une fois pour toute :)

Link to comment
Share on other sites

Voici les modifications apportées au fichier cart.php sur ma version de Prestashop (SVN 687) :

NOTE : Sur cette version de Prestashop, cart.php est LE SEUL fichier que j'ai eu à modifier.

1/ Rechercher :

private function _updateCustomizationQuantity($quantity, $id_customization, $id_product, $id_product_attribute, $operator = 'up')


Ligne 416, remplacer :

return $this->_deleteCustomization(intval($id_customization));


par :

return $this->_deleteCustomization($id_product,intval($id_customization),$id_product_attribute);



2/ Rechercher :

public    function deleteProduct($id_product, $id_product_attribute = NULL, $id_customization = NULL)


Ligne 495, remplacer :

return $this->_deleteCustomization(intval($id_customization)) AND $this->deleteProduct(intval($id_product), $id_product_attribute, NULL);


par :

$this->_deleteCustomization($id_product,intval($id_customization),$id_product_attribute) AND $this->deleteProduct(intval($id_product), NULL, $id_product_attribute);



3/ Rechercher :

private    function _deleteCustomization($id_customization)


Lignes 515 à 519, remplacer :

    private    function _deleteCustomization($id_customization)
   {
       if (!$result = Db::getInstance()->getRow('SELECT `quantity` FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.intval($id_customization)) OR 
           !Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'cart_product` SET `quantity` = `quantity` - '.intval($result['quantity'])))
           return false;


par :

  private    function _deleteCustomization($id_product, $id_customization, $id_product_attribute=NULL)
   {
   if (!$result = Db::getInstance()->getRow('SELECT `quantity` FROM `'._DB_PREFIX_.'customization` WHERE `id_customization` = '.intval($id_customization)) OR
       !Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'cart_product` SET `quantity` = `quantity` - '.intval($result['quantity']).' WHERE `id_product`='.intval($id_product).' AND `id_cart` = '.intval($this->id).' AND `id_product_attribute` = '.($id_product_attribute != NULL ? intval($id_product_attribute) : '\'\'')))
           return false;

Link to comment
Share on other sites

  • 1 year later...

Je ne suis pas familier avec le bugtracker, mais pour moi l'issue est toujours ouverte

http://www.prestashop.com/bug_tracker/view/1549/

Je pose la question pour savoir dans quelle version de presta cela à été corrigée, si cela à été corrigé.
Je bosse sur un module de personnalisation, c'est vital de savoir a partir de quand le bug a été (si) corrigé.

et je me vois mal testé sur toutes les versions de presta ...

Link to comment
Share on other sites

Bonsoir

j'avais lu les commentaires du bug un peu en travers :

Hi Major!

Thank you that some much detailed bug report.
That was a huge issue. (I’m still asking myself how I missed it before)
I just fixed it wink

Best regards,

PS: and thanks to PShopExpert for finding the source and even suggesting a fix.

By Matthieu Biart on 06 Avr 2009 at 09:50 (UTC+1)


Sur la 1.2.5, cela semble en effet corrigé (pas testé pour le pb a partir du blockcart)

J'avais eu un probleme avec l'affichage de quantité 2147483647, mais ca doit etre autre chose.

Merci pour ta réponse
mika
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...