Jump to content

Panier percé + temps du panier


tomish

Recommended Posts

Bonjour à toute la communauté prestashop !!!!

Tout d'abord bravo pour ce magnifique projet.
Je viens vers vous car je rencontre un problème particulier. Je l'intégration de mon site de ecommerce destiné à la vente d'objet d'artisanat du monde (dans un premier temps l'afrique). Je ne vends donc que des pièces uniques.

Mon problème est le suivant :
Je remplis mon panier avec un article, de l'autre coté un ami se connecte sur mon site et rempli son panier avec le même produit. Déjà ici se pose le problème, nous devrions normalement avoir un temps de réservation de produit par panier. En effet pour peu qu'il est une connexion plus rapide ou qu'il tape plus vite que moi il pourra commander ce produit alors que j'étais pourtant le premier à l'ajouter à mon panier.
Est il possible de mettre en place un système de réservation.

Je m'explique :

L'idée est d'avoir un champ en backoffice qui dit temps de validité d'un panier inactif. Exemple 15 min.
Si pendant 15 min le user 1 ne réalise pas d'action alors on vide automatiquement son panier et les produits qu'il y avait ajouté sonautomatiquement remis sur le site disponible.

De la même façon avant chaque ajout au panier il faudrait vérifier que le produit ajouter n'est pas déjà dans un panier et que cet ajout ne provequera pas un stock -1.

Stock réel = stock initial - stock réservé
Le stock réel à un instant T est le stock qui prend en compte les produits des différents panier.

Dans quel fichier puis je réaliser cette fonctionnalité. classes/Cart.php
Ou y a t il des gens qui se sont penchés sur la question.

Le risque avec la méthode actuelle c'est qu'un client se retrouve déçu puisqu'au moment de payer ou à tout autre moment on risque de lui dire que le produit n'est finalement plus disponible. On parle ainsi de panier percé.

Merci pour votre analyse et vos réponses.

Link to comment
Share on other sites


Mon problème est le suivant :
Je remplis mon panier avec un article, de l'autre coté un ami se connecte sur mon site et rempli son panier avec le même produit. Déjà ici se pose le problème, nous devrions normalement avoir un temps de réservation de produit par panier. En effet pour peu qu'il est une connexion plus rapide ou qu'il tape plus vite que moi il pourra commander ce produit alors que j'étais pourtant le premier à l'ajouter à mon panier.
Est il possible de mettre en place un système de réservation.


Bonsoir,

La réservation est surtout utilisée sur les sites de ventes privées, PrestaShop applique la règle plus simple du "1er payeur, 1er servi". Rappelons que sur la plupart des systèmes bancaires, le client dispose de 45 minutes pour régler avec sa carte (donc il faudrait réserver le panier au moins 45min + 5min).

Ce développement est donc réalisable mais reste malheureusement très spécifique à quelques marchands.

Cordialement,
Link to comment
Share on other sites

Je trouve la demande intéressante, et concernant quand même pas mal de petites boutiques, particulièrement celles de créateurs et artistes.
Cela dit, Bruno a raison, le problème n'est pas trivial, et de toute façon un des deux clients sera frustré : y'a pas forcément de raison que le premier arrivé soit le premier servi, surtout si ce dernier va traîner sur un autre site et oublier son panier, ce qui ferait rater une vente au deuxième. C'est une règle plus valable en boutique réelle qu'en ligne.
Bref, c'est pas simple. Note que le problème se pose surtout si le site est très populaire : s'il a seulement 50 visites par jour, le risque de clash est plus faible.

Par contre, je vois l'option de désactiver la commande d'un produit épuisé, c'est bien, mais pas d'option pour cacher / désactiver automatiquement ces produits (pas de réassort). On a ça sur Zen Cart, par exemple. C'est moi qui ne vois pas l'option ou il faut patcher ?
C'est assez important dans notre cas.

Link to comment
Share on other sites

En effet ce n'est pas une option standard, car ceci nécessiterait de vérifier le stock à chaque affichage des listes de produits.

Ceci est particulièrement problématique lorsqu'un produit dispose de nombreuses déclinaisons, ex :
50 produits avec 50 déclinaisons = 50 fois la fonction SUM() à appler dans MySQL

Si l'on combine avec des filtres ou des tris (par prix...etc), cela devient très lourd.

L'autre solution est de développer un petit script PHP qui désactive les produits hors stock toutes les minutes.

Exemple simple (sans déclinaisons) :

Db::getInstance()->Execute('UPDATE '._DB_PREFIX_.'product SET active = 0 WHERE quantity = 0');



Pour des déclanaisons le mieux c'est d'instancier les produits et d'utiliser la méthode universelle $product->getQuantity()

Cordialement,

Link to comment
Share on other sites

Bonjour et merci pour ces éclaircicements.

J'ai quelques remarques :

Ceci est particulièrement problématique lorsqu’un produit dispose de nombreuses déclinaisons, ex :
50 produits avec 50 déclinaisons = 50 fois la fonction SUM à appler dans MySQL


Il me semble qu'il n'est pas utile de faire appel 50 fois à la fonction SUM dans le cas de la liste de produit.
En effet, chaque produit à un stock global qui normalement devrait avoir pour valeur la somme totale des quantités de chacune des déclinaisons produits.

Ex : j'ai un produits en rouge et en noir
Produit rouge 10 qté
Produit noir 20 Qté
Dans ma table produit je devrais avoir un product_quantity = 30

Maintenant ça ne fonctionne peut être pas comme ça (j'ai pas eu le temps de regarder)

Donc pour la liste de produit on récupère juste la quantité globale pour savoir si celui-ci est disponible (réservé) ou non.
Une fois dans la fiche produit on fait un traitement sur la quantité disponible pour l'attribut_id sélectionné et le tour est joué.

1er payeur, 1er servi


Je ne suis pas tout à fait d'accord avec cette manière de procéder. Lorsque je vais dans un super marché. Si il ne reste plus qu'une paire de ciseaux et que je la mets dans mon caddie. Personne ne va venir me prendre cette paire de ciseaux pour la mettre dans son panier sous prétexte qu'il va payer plus vite que moi (effectivement je suis entrain de lire une BD dans le coin lecture :))

le client dispose de 45 minutes pour régler avec sa carte (donc il faudrait réserver le panier au moins 45min + 5min).


La encore je pense que nous pouvons faire quelque chose. En effet imaginons que dans l'adimin je prevois un champ qui dit que le panier est valide 15 min sans activité de la part du client.
Au moment ou il confirme sa commande et qu'on le redirige sur le serveur de paiement on peut tout à fait updater la date du panier avec un date + 60 min.

Cordialement,

Thomas - Profileo Team
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...