Jump to content

[Résolu] Quantité à zéro lors de la duplication de la fiche produit V1.5.3


Recommended Posts

Bonjour à tous,

 

Utilisant actuellement la version 1.5.3 j'ai remarqué un bug lorsque l'on dupplique une fiche produit.

Les quantités retombent a zéro et ne sont plus sauvegardées comme dans les version 1.4

SI l'on creer une fiche avec par exemple 20 articles dispo, lors de la duplication de celle ci on se retrouve avec 0 produits

 

c'est un peu embetant car on est obligé a chaque fois de re-rentrer pour chaque nouveaux produits la quantité désirée et si l'on ne fait pas attention on se retrouve avec des produits hors stock. :(

 

Quelqu'un a -t il une solution pour remédié a se soucis

 

Merci a tous d'avoir pris le temps de me lire :)

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

Bonjour,

 

en allant voir du côté de la fonction processDuplicate() (l.466) de la classe controller AdminProduct, on s'apercoit en effet que les qantités ne sont pas prises en compte lors de la duplication. Pour remédier à celà, il faudrait réaliser une fonction dans la classe Product du même genre que <code>Product::duplicateTags($id_product_old, $product->id)</code> (visible dans la classe Product l.3365) qui, avec une simple requète SQL récupèrera la valeur de la quantité du produit à dupliquer...

Inspirez-vous du code de la fonction duplicateTags.

 

Cordialement

Link to comment
Share on other sites

j'ai crée cette ligne supplémentaire apres la ligne des tag (l494) comme vous l'avez suggeré :

 

&& Product::duplicateQuantity($id_product_old, $product->id)

 

La fiche est bien dupliquée mais les quantites sont toujours a zéro et ca m'affiche une erreur interne 500

 

Apparement la solution se trouve bien ici mais je dois faire une erreur quelque part je pense...

Link to comment
Share on other sites

Oui, enfaite la ligne que vous venez de rajouter fais appel à la fonction duplicateQuantity() présent dans la classe Product. Cette fonction n'existe pas, il faut la créer. C'est pour cela que dans mon précédent post je vous conseillais de vous inspirer de la fonction DuplicateTags(..) qui elle existe.

 

 

 

 

Edit: quel mode de stockage utilisez-vous ?

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

Je peux éventuellement vous donner un début de piste. Quel mode de stockage des quantités utilisez-vous ? (gestion stock avancé, global, manuel).

A priori (d'après ce que je sais avec le domaine sur lequel je travaille, pour une gestion de stock manuelle) la quantité est celle de la table stock_available, du coup ce que je vous ai conseillé de faire me parait pas tout a fais correcte. En dupliquant un produit, apparement l'entrée au niveau de cette table se fait automatiquement, il faudrait je pense après la longue condition de processDuplicate, mettre à jour le champ quantity de cette table avec l'id de l'ancien produit avec une clause UPDATE.

A tester car je ne peux vous confirmer l'exactitude de mes dires.

 

Cordialement

 

 

Edit: un problème que l'on pourrait rencontrer, serait de mettre à jour le champ quantity avant que l'entrée soit créer dans cette table, ce qui provoquerait une erreur. Il faudrait localiser où exactement cette entrée est ajoutée.

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

Voili, voilou:

 

$SQL = 'UPDATE '._DB_PREFIX_.'stock_available SET quantity = '.StockAvailable::getQuantityAvailableByProduct($id_product_old)
   .' WHERE id_product = '.$product->id ;
if (!Db :: getInstance()->Execute($SQL)) {
 $this->errors[] = Tools::displayError('An error occurred while copying quantity.');
}

 

Je l'ai tester chez moi sa à l'air de fonctionner. Je re précise bien qu'il s'agit d'une duplication d'une quantité gérer MANUELLEMENT (je ne garantie pas que cela fonctionnera avec les deux autres modes puisque je n'ai pas étudié leurs cas).

Précision apportée principalement à ceux qui tomberont en recherche sur ce post.

 

Cordialement

 

 

Edit: pouvez-vous me confirmer si cela fonctionne bien chez vous ?

 

Edit N°2: pour bien faire les choses réaliser cette modification dans le dossier override/controllers/admin/AdminProducts, en copiant-collant la fonction processDuplicate de la classe mère et en insérant le code que je vous ai énoncé entre:

if ($product->hasAttributes())
				Product::updateDefaultAttribute($product->id);

 

et

 

if (!Tools::getValue('noimage') && !Image::duplicateProductImages($id_product_old, $product->id, $combination_images))

 

ainsi une future MAJ n'effacera pas la modification et (à priori) ne posera aucun conflit.

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

J'ose meme pas répondre tellement j'ai l'air bete :(

 

j'ai bien compris qu'il faut modifier la table stock_available, ca je l'ai trouvée

 

et qu'il faut rajouter du code dans les fichiers php pour les MAJ, ca c'est bon.

 

seulement là ou je bloque c'est sur la modif de la table :wacko:

Faut il que j'aille dans la structure de la table pour rajouter le code ?

je suis un peu largué là...

 

j'avoue que je retouche plus le code css et un peu le php que je ne met les main dans MySQL...

 

Suis noob en MySQL, je sais lol, et c'est d'autant plus penible car je sais que vous avez trouvé la solution :unsure:

Mais je suis débrouillard et je vais y arriver

Link to comment
Share on other sites

Vous n'avez probablement pas vu mes 2 edit de mon précédent post, je pense qu'avec ces informations vous serez capable de réaliser la modification. Coté Bdd il ne faut rien changé, en fait c'est au niveau du code que nous réalisons la mise à jour de la table stock_available.

 

 

Edit: de rien ;)

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