Jump to content

Problème gestion des stocks de packs produits avec déclinaisons


Recommended Posts

Bonjour,

Je cherche un peu d'aide pour résoudre mon problème.
J'utilise la fonction "Pack de produits" pour proposer des coffrets cadeaux de plusieurs produits à me clients.
Si les produits qui composent mes "pack produits" n'ont pas de déclinaisons, tout fonctionne normalement.
Par contre, si 1 ou plusieurs des produits d'un pack disposent de déclinaisons, la version 1.4.3 de Presta n'est pas capable de gérer correctement les stocks. (ou alors j'ai rien compris, ce qui est peut-être possible !.
De plus, pour faire fonctionner les déclinaisons (permettre au client de sélectionner la déclinaison de son choix sur la page produit), en l'occurrence pour moi, il s'agit essentiellement de taille pour des vêtements, je suis obligé d'ajouter des déclinaisons à mon pack qui correspondent aux combinaisons des produits qui composent par le pack. Par défaut, Presta n'affiche pas les déclinaisons des produits dans les packs.

Bon, bref, c'est pas super grave, ça obliger à faire plusieurs fois le taf, mais on peut gérer en créant des déclinaisons du pack.

Par contre, là ou c'est très gênant, c'est dans la gestion des stocks, qui ne fonctionne pas. Presta va décrémenter le stock des produits qui composent le pack produit, par contre, il va toujours décrémenter les déclinaisons par défaut.

Je voudrais trouver une solution pour qu'il décrémente le stock des déclinaisons qui ont le même attribut que la déclinaison du pack sélectionné par mon client.

J'ai trouvé le bout de code qui effectue l'update du stock pour les packs, par contre mes faibles connaissances en php ne me permettent pas de trouver la solution.
Je sais qu'il faut utiliser l'id_attribute (situé dans la table "product_attribute_combination") pour faire le lien entre tout ce petit monde, mais je ne sais pas aller plus loin.

Tout cela se passe dans le fichier product.php (ligne 2040 environ) et le bout de code incriminé :

if (Pack::isPack((int)($product['id_product'])))
{
$products_pack = Pack::getItems((int)($product['id_product']), (int)(Configuration::get('PS_LANG_DEFAULT')));
foreach($products_pack AS $product_pack)
{
$tab_product_pack['id_product'] = (int)($product_pack->id);
$tab_product_pack['id_product_attribute'] = self::getDefaultAttribute($tab_product_pack['id_product'], 1);
$tab_product_pack['cart_quantity'] = (int)($product_pack->pack_quantity * $product['cart_quantity']);
self::updateQuantity($tab_product_pack);
}
}

Si quelqu'un a le courage de lire ce post trop long et surtout la maitrise et l'intelligence pour trouver la solution, je lui en serai extrêmement reconnaissant.

Merci d'avance pour vos retours.

Link to comment
Share on other sites

  • 8 months later...

Bonjour unbiocadeau,

 

les ventes augmentant sur ma boutique, cette non gestion des stocks devenait insupportable, et comme visiblement, même la version 1.5 à venir ne gérera pas ceci, j'ai trouvé un parade qui me convient tout à fait, et j'espère qu'il n'est pas trop tard pour toi !

Il est clair que l'idéal serait que lorsque l'on créé un pack, si un produit à des déclinaisons, elles soient ajoutées automatiquement au pack et que le stock soit géré sur chaque déclinaisons de produits.

 

Je suis en version 1.4.6.2.

 

Attention, ce n'est pas un module à part entière mais une surcharge d'une fonction de la classe produit qui permet de gérer les stocks des déclinaisons comme suit.

L'installation est néanmoins très simple grâce à l'override de Prestashop.

 

J'ai plusieurs cas, imaginons :

 

- Produit A : un sac, je gère le stock sur ce produit.

- Produit B : un pack avec deux sacs (2 x A), je ne souhaite pas gérer de stock sur ce produit (pack).

- Produit C : des lunettes avec des déclinaisons de couleur Rouge, Bleue, Vert, Jaune. Je gère le stock sur chaque déclinaisons.

- Produit D : une montre, je gère le stock sur ce produit.

- Produit E : un pack avec un sac (1 x A), une montre (1 x D), des lunettes (1 x C). J'ai recréé les déclinaisons couleurs qui existe sur les lunettes avec de nouvelles références (pas le choix). Je ne souhaite pas gérer de stock sur ce produit (pack).

 

Lorsque je commande le produit B, il décompte 2 produits A. C'est le fonctionnement classique de Prestashop, sauf que cela m'ennuyait de devoir mettre un stock sur B. Donc je fixe 1, et cela ne bouge plus.

 

Lorsque je commande le produit E, son stock est également à 1 et ne bouge pas. Par contre, un produit A est décompté, un produit D est décompté, et la déclinaison du produit couleur correspondante est décomptée.

 

Si vous souhaitez obtenir ce fonctionnement, le fichier joint est pour vous !

 

Oui mais comment réaliser la liaison entre la déclinaison re-créée sur le pack et la déclinaison correspondante du produit initial. C'est là que la ruse est un peu technique. J'utilise le champ UPC dans les déclinaisons puisque je ne m'en sers pas. Donc, dans la déclinaison du pack j'indique l'id de la déclinaison du produit que j'ai trouvé dans la table 'product_attribute'.

Clairement, la déclinaison de ma lunette verte a la référence LUNVER et l'id dans la table 22. La déclinaison de mon pack est PCKVER. J'indique à côté de la référence PCKVER, 22 dans le champ UPC.

Evidemment cela pourrait être amélioré en indiquant la référence du produit initial plutôt que l'id. Mais comme j'en ai peu, je me suis arrêté là. Si un lecteur développeur se le sent, avec plaisir ;-)

 

That's it !

Tous mes stocks sont justes en attendant que tout ceci soit géré en standard dans Prestashop.

 

Il suffit de placer le fichier joint dans le répertoire 'override\classes'. Seule la fonction de mise à jour des quantités est modifiée donc, à priori, pas d'effets de bord.

 

Merci aux experts pour les commentaires, mais je n'ai rien remarqué de curieux suite à cette modification.

Product.php

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