Produit pas en stock sur certains résultats de recherche et en stock sur d'autre

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
3 years 4 months ago #327349

-- url of the page with the problem -- : www.grimages.com/fr/shop/shop-products/p...ant_2=&filter_Tri_3=
-- HikaShop version -- : 4.4.0
-- Joomla version -- : 3.9.23
-- PHP version -- : 7.3.25

Bonjour,
Nous constatons un problème sur le produit Kit de base (il s'agit d'un bundle et tout les produits qui le composent sont bien en stock.

Sur la page du produit : www.grimages.com/fr/kits/product/1-kit-de-base.html
Il apparait bien en stock

Sur la page de recherche : www.grimages.com/fr/shop/shop-products/p...s+d%C3%A9butants+%21
Il apparait également bien en stock

Mais sur la page : www.grimages.com/fr/shop/shop-products/p...ant_2=&filter_Tri_3=
Il apparait (un peu plus bas sur la page) hors stock.

Nous avons vérifié les produits du bundle sont bien en stock et tout nous semble bon. Une idée ?

Merci d'avance.

Last edit: 3 years 4 months ago by info@lerenardquitrace.be.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
3 years 4 months ago #327350

Juste pour apporter une précision : Nous avons désativé le cache Joomla et essayé avec différents navigateurs le problème reste le même

Last edit: 3 years 4 months ago by info@lerenardquitrace.be.

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
3 years 4 months ago #327390

Bonjour,

Je vient de regardé sur votre site et pour moi il y a le même stock pour ce produit sur toutes les pages mentionnées.
Donc je suppose que c'est bien un soucis de cache que vous avez mais que le cache n'avait pas été complètement vidé (ou que vous avez plusieurs système de cache) lorsque vous avez fait vos tests.
En tout cas, à part du cache, je ne vois pas d'autre raison vu que le stock est chargé dynamiquement depuis la base de données à chaque fois qu'HikaShop génère du HTML.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 11 months ago #332491

Bonsoir,

Nous rencontrons de nouveau le même souci avec le produit "Kit de base" mais également un autre kit en bundle, par exemple, le "Kit avec tutoriel - Squelette". Dans certaines catégories, le produit est affiché hors stock alors que lorsque l'on clique dessus pour atteindre la fiche produit, il est bien disponible en plusieurs exemplaires.

Nous avons vidé tous les caches à plusieurs reprises, testé plusieurs navigateurs, plusieurs supports (différents PC, smartphones,...) mais le problème persiste. Le cache de Joomla est désactivé, aucun autre système de cache n'est installé.

Voici, en exemple, le produit "Kit de base" dans la catégorie "Promotions": www.grimages.com/fr/shop/shop-products/p...g/89-promotions.html . On peut le voir hors stock alors qu'il y en a 5 dispos. Par contre, dans la catégorie "Maquillages", il ne présente aucun problème...

Merci pour votre aide.

Cordialement,

Stéphanie

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
2 years 11 months ago #332522

Bonjour,

Pour moi, c'est vraisemblablement un souci de cache des pages générées. Car même entre la version anglaise et la version française du listing vous avez un display:none; rajouté en inline dans le tag du stock:
i.imgur.com/ADJvwzs.png
i.imgur.com/7z3Solz.png
D'ailleurs, vous pouvez voir que c'est le même élément de menu utilisé pour les deux page (même alias d'élément de menu dans l'URL), mais le tri des produits dans le listing est différent.
Donc cela indique que le listing pour chaque page a été généré avec un "ordering column" et "ordering direction" configurés différemment et un override de vue pour le display:none et pas pour l'autre.
Donc c'est seulement possible si ces listings ont été générés à différents moments, d'où le cache.
Après, un "cache" peut être ajouté de différentes façons. Cela pourrait être un cache des requêtes MySQL, ou un cache du serveur web, ou un cache avec un CDN. Ce n'est pas forcément fait avec une extension Joomla de cache ou les options de cache de Joomla:
dev.mysql.com/doc/refman/5.7/en/buffering-caching.html
httpd.apache.org/docs/2.4/caching.html
www.imperva.com/learn/performance/cdn-caching/
Donc peut être qu'il faudrait voir de plus près ce qui est mis en place au niveau de l'hébergement si vous ne voyez rien qui cloche dans le backend du site.
En tout cas, avec juste Joomla, HikaShop et sans cache, je ne vois pas comment c'est possible d'obtenir le résultat que vous avez.
Tout ce qui est affiché par HikaShop est chargé dynamiquement depuis la base de données. Donc soit les données sont cachées par la base de données, soit les pages sont cachés après avoir été générées par HikaShop.

Plusieurs pistes à creuser:
- faites une copie du site avec akeeba backup et restaurez la dans un environement local avec un xampp. Si vous n'avez pas le souci en local, c'est bien que c'est quelque chose lié à l'hébergement/serveur.
- éditez le fichier product / listing_img_title pour votre template via Display>Views dans le backend d'HikaShop et rajoutez du texte au tout début du fichier. Cela rajoutera le texte au dessus de l'image de tous les produits sur tous les listings. Si vous ne voyez pas le texte sur tous vos listings, c'est qu'il y a un cache sur le HTML généré par HikaShop.
- changez voir le stock du produit "kit de base" dans l'interface d'HikaShop dans le backend et rafraîchissez les différentes pages avec ce produit. Voyez vous le nouveau stock pour tous les endroits ?
- essayez de switcher temporairement sur le template par défaut de Joomla. Voyez vous le stock correct sur les différentes page ? Si oui, cela pourrait être lié à un override dans le dossier templates/YOUR_TEMPLATE/html/com_hikashop/product/

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 7 months ago #335207

Bonjour Nicolas,

Nous n'avons pas encore pris le temps d'explorer vos pistes à creuser MAIS, ayant récemment rencontré des soucis de stock (no décrémenté) liés à des produits en bundle, j'ai fait quelques recherches sur le forum et je suis tombée sur ce post "Product which is a group of other products + stock control" (un gars qui vend des caisses de vins) auquel vous avez répondu "The limitation of the bundled products feature is that you can't configure bundled products in variants of products.".

La plupart de mes bundles sont composés de variantes de produits car je n'avais à ce jour lu nulle part qu'ils devaient être composés uniquement de produits pour que le stock se décrémente... Cela pourrait-il être la source de mon problème d'affichage ?
Avez-vous prévu de permettre aux bundles de décrémenter les stocks de variants de produits ? Si oui, une idée de la sortie ?

Merci pour votre aide et belle fin de journée !

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
2 years 7 months ago #335210

Bonsoir,

Non, ce n'est pas votre problème et ce n'est pas un problème.
Si vous éditez un produit vous pouvez voir l'option "bundled products" dans l'interface.
Si vous éditez une variante d'un produit, dans l'onglet "variants" d'un produit avec des variantes, vous verrez une interface similaire à l'interface d'édition de produit, mais l'option "bundled products" n'y sera pas.
C'est ça que décri la phrase

"The limitation of the bundled products feature is that you can't configure bundled products in variants of products."

Le fait que vous puissiez sélectionner des variantes dans l'option "bundled products" de vos produits est normal et fonctionne comme il faut.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 7 months ago #335225

Merci pour la précision, j'avais mal interprété la traduction.

Malheureusement, j'ai rencontré pas mal de soucis de stock avec des produits en bundle. Le principal problème, c'est que je ne sais pas reproduire l'erreur. Je vais donc être attentive et sonder mon stock dès que je fais vends des bundles que ce soit via une commande classique passée sur le site par un client mais surtout, lorsque je fais une vente en magasin et que je crée moi-même la commande en back-end où j'y intègre le bundle. Si je trouve l'origine du souci, je créerai un nouveau post sur le sujet pour ne pas tout mélanger ;)

Belle journée!

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
2 years 7 months ago #335231

Bonjour,

Notez que lorsque vous créez / modifiez une commande dans le backend, le stock des produits concernés n'est pas mis à jour. C'est à vous de le faire manuellement. Serait-ce la cause de vos différences de stock entre ce qu'il y a dans HikaShop et la réalité ?

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 7 months ago #335240

Bonjour,

Là, je m'étonne car je fais des commandes en backend depuis plus d'un an et le stock diminue sans souci. Pareil quand j'annule une commande en backend (passée en ligne ou en magasin physique), ça remet le stock à niveau. J'ai vérifié ce matin après que ma cliente soit partie et ses achats (produits et variantes, pas de bundle) ont bien été retirés du stock. Pour info, mon réglage de statut de commande prévoit que le stock soit décrémenté quand la commande est en "créée".

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
2 years 7 months ago #335242

Bonjour,

L'annulation d'une commande entraine en effet la remise à niveau du stock des produits de la commande.
Je parlais surtout de l'ajout / modification / suppression d'une produit d'une commande existante.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 6 months ago #336009

Bonjour Nicolas,
Nous avons, enfin, pris le temps de dupliquer le site sur un environement local et malheureusement le problème de différence d'affichage continue de se produire.

Je me suis assuré que :
- Le cache joomla est désactivé dans la config générale
- Le plugin cache de page de joomla est désactivé
- L'ancien cache joomla est vidé

J'ai pris un cas en particulier en copie d'écrans.
D'avance merci pour ton aide.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 6 months ago #336010

Un info supplémentaire.
Dans le screenshot de ma réponse précédente j'avais fais une recherche sur "Kit" mais quand je fais une recherche sur "Pixie's dreams" alors le résultat est correct.

Je pense que cela vient d'une mise en mémoire quelque part du résultat de recherche mais j'ai pourtant tout désactivé je ne parviens pas à identifier l'origine.

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
2 years 6 months ago #336020

Bonjour,

J'ai creusé un peu la question ce matin.
La récupération du stock des produits en bundle pour le produit principal dans les listings est fait par le code:

if($options['bundle_qty']) {
			$pids = array();
			foreach($rows as $row) {
				if($row->product_quantity >= 0)
					continue;
				$pids[] = (int)$row->product_id;
			}
			if(!empty($pids)) {
				$query = 'SELECT pr.product_id, MIN( p.product_quantity / pr.product_related_quantity) as qty '.
						' FROM '.hikashop_table('product_related').' AS pr '.
						' INNER JOIN '.hikashop_table('product').' AS p ON pr.product_related_id = p.product_id '.
						' WHERE pr.product_id IN ('.implode(',', $pids).') AND pr.product_related_type = '.$this->database->quote('bundle').
							' AND p.product_quantity >= 0';
				$this->database->setQuery($query);
				$relations = $this->database->loadObjectList('product_id');

				foreach($rows as $k => $row) {
					if(!isset($relations[(int)$row->product_id]))
						continue;
					$rows[$k]->product_quantity = floor($relations[(int)$row->product_id]->qty);
				}
			}
		}
dans administrator/components/com_hikashop/classes/product.php

En lisant le code, ce que je vois, c'est que si au moins un produit en bundle a un stock différent de illimité, alors le système remplace le stock du produit principal par le stock minimum des produits en bundle.
Alors que sur la page produit, le stock du produit principal n'est remplacé par le stock des produits en bundle que si le stock du produit principal est illimité.

Je pense que c'est là d'où vient l'incohérence entre le listing et la page produit.
Rajoutez le code:
if($row->product_quantity>=0)
						continue;
avant la ligne:
if(!isset($relations[(int)$row->product_id]))
dans administrator/components/com_hikashop/classes/product.php pour que sur les listings aussi, la quantité des produits en bundle ne soit prise en compte dans l'affichage que si le produit principal a une quantité "illimité" et cela devrait fournir un affichage cohérent entre le listing et la page détails.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 6 months ago #336131

Bonjour Nicolas,
Nous avons essayé mais cela ne semble pas solutionner le problème.
Cela dit, maintenant que j'ai une copie locale qui a le problème je vais essayer de remonter le code pour essayer d'identifier le souci.
Je reviens vers toi dés que j'ai du nouveau.

The following user(s) said Thank You: nicolas

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 6 months ago #336144

Je pense que j'ai trouvé.
Alors en fait il y a un souci dans la requête SQL qui va vérifier la quantité disponible pour les bundles dans /administrator/components/com_hisahop/classes/product.php

$query = 'SELECT pr.product_id, MIN( p.product_quantity / pr.product_related_quantity) as qty '.
	' FROM '.hikashop_table('product_related').' AS pr '.
	' INNER JOIN '.hikashop_table('product').' AS p ON pr.product_related_id = p.product_id '.
	' WHERE pr.product_id IN ('.implode(',', $pids).') AND pr.product_related_type = '.$this->database->quote('bundle').
	' AND p.product_quantity >= 0';

La présence du MIN() fait que, en l'état, la requête va retourner au maximum une seule ligne, celle dont le résultat de qty sera le plus faible et cela même si il y a plusieurs bundles affiché sur la page. Dans le cas ou plusieurs bundles ont la même valeur dans qty on aura quand même qu'une seule ligne.

Je pense qu'il faut ajouter un GROUP BY pr.product_id pour regrouper les résultat par pr.product_id

Le code serait donc :
$query = 'SELECT pr.product_id, MIN( p.product_quantity / pr.product_related_quantity) as qty '.
	' FROM '.hikashop_table('product_related').' AS pr '.
	' INNER JOIN '.hikashop_table('product').' AS p ON pr.product_related_id = p.product_id '.
	' WHERE pr.product_id IN ('.implode(',', $pids).') AND pr.product_related_type = '.$this->database->quote('bundle').
	' AND p.product_quantity >= 0 GROUP BY pr.product_id';

Last edit: 2 years 6 months ago by info@lerenardquitrace.be.

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
2 years 6 months ago #336150

Bonjour,

En effet, c'est très bien vu.
Testant avec uniquement un ou deux produits avec des produits en bundle, je n'avais pas vu le souci.
C'est là la différence entre faire des tests avec des données de tests, et une situation réelle avec de vraies données !
Merci d'avoir pris le temps d'étudier le souci. Nous allons rajouter cela de notre coté.

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
2 years 6 months ago #336158

Pas de problème, je connais bien ce genre de situation :-)
Ravi d'avoir aidé et à bientôt peut-être.

The following user(s) said Thank You: Mohamed Thelji, Philip

Please Log in or Create an account to join the conversation.

  • Posts: 113
  • Thank you received: 9
  • Hikashop Business
1 year 1 month ago #349878

Bonjour Nicolas!

Nous avons de nouveau un souci des produits "bundle" qui ne sont pas de stock. Lorsque l'on sélectionne le filtre "produits en stock" ils restent affichés.

Exemple parlant dans la la catégorie "Kits" du site www.grimages.com (capture en annexe)

Une piste à explorer ?

Joomla version 4.2.8
Hikashop version 4.7.1

Merci d'avance!

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 81513
  • Thank you received: 13068
  • MODERATOR
1 year 1 month ago #349885

Bonjour,

Je suppose que cela doit être un souci de synchro du stock du produit avec le stock des produits dans le bundle.
Donc regardez le champ "quantité" de ces produits, et il ne devrait pas être à 0.
C'est le code de chargement des produits sur les listings, le panier et la page produit qui va dynamiquement modifier le stock utilisé en fonction des produits dans le bundle.
Le "pas de stock" dans le listing var s'afficher à partir du moment où au moins un des produits dans le bundle n'a pas de stock.
Mais le système de filtrage ne prend en compte que le stock du produit principal.
En supposant que c'est bien ça le problème, il faudrait modifier le code:

		if($filter->filter_type=='instockcheckbox' && $infoGet[0]=='in_stock'){
			$filters[]=' b.product_quantity!=0 ';
			return true;
		}
dans administrator/components/com_hikashop/classes/filter.php
Quelque chose du genre:
		if($filter->filter_type=='instockcheckbox' && $infoGet[0]=='in_stock'){
			$filters[]=' b.product_quantity!=0';
$on.=' LEFT JOIN #__hikashop_product_related AS '.$filter->filter_namekey.$i.' ON '.$filter->filter_namekey.$i.'.product_id=b.product_id AND  '.$filter->filter_namekey.$i.'.product_related_type = \'bundle\' LEFT JOIN #__hikashop_product AS  '.$filter->filter_namekey.$i.'_2 ON '.$filter->filter_namekey.$i.'_2.product_id = '.$filter->filter_namekey.$i.'.product_related_id';
			$filters[]=' ('.$filter->filter_namekey.$i.'_2.product_quantity==NULL OR '.$filter->filter_namekey.$i.'_2.product_quantity!=0 )';
			return true;
		}
Notez que cela va pas mal alourdir la requête MySQL de chargement des produits dans le listing.

Please Log in or Create an account to join the conversation.

Time to create page: 0.106 seconds
Powered by Kunena Forum