Gérer les 'etat de stock'

17 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour,

Savez vous comment ajouter des états de stock ?

Mon besoin est le suivant:

1-J'ai des produits en stock, livrable immédiatement. (ajout au panier possible)

2-J'ai des produit non stocké mais dispo chez le fournisseur, livrable sous un certains délai (ajout au panier possible)

3-J'ai des produit non stocké, en réassort. (délai annoncé ou pas, mais surtout ajout au panier impossible)

J'ai donc besoin de créer l'état de stock numéro 2 dans ma liste.

J'ai bien pensé à activer l'ajout au panier sur les produit non dispo, mais j'ai quand meme besoin d'un état ou cela ne doit pas etre possible pour l'utilisateur. (car délais imprécis).

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

L'ajout d'un état de stock supplémentaire nécessite de modifier la fonction affiche_etat_stock() dans le fichier modules\stock_advanced\fonctions.php.

La modification doit être apportée dans la condition de la requête SQL :

    $resEtatStock = query("SELECT id, nom_" . $_SESSION['session_langue'] . " AS nom, image, valeur
FROM peel_etatstock
WHERE id='" . ($checked_value > 0 ? 1 : 2) . "'");[/CODE]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Simon,

Merci, mais que dois-je faire exactement ?

Autre chose (puisque je cherche différents moyens d'arriver au résultat souhaité):

Je titille un peu la gestion des stocks et j'ai découvert des petits soucis lorsque l'on utilise les couleurs, prenons un exemple:

j'active la possibilité d'ajouter au panier des produits qui ne sont pas en stock.

Un Tshirt (par exemple) est dispo en jaune (stock à 10), mais pas en bleu (stock à 0)

Dans la page catalogue et dans la fiche produit, le tshirt est marqué "en stock" (car effectivement dispo dans une certaine couleur)

Une fois dans la fiche produits, je séléctionne ma couleur bleu.

le statut visible est toujours "en stock" alors qu'il devrait se mettre à jour vers "livré sous 8 - 10 jours".

En fait le statut ne se met pas à jour.

Par ailleurs, voila ce que j'ai constaté :

Dans le back-office, on a la possibilité de forcer l'affichage du délais de livraison (une valeur en jours)

Mais aucune distinction n'est faite selon la couleur.

Pas de possibilité non plus de renseigner une référence différente selon la couleur...

A moins de créer une fiche article pour chaque couleur, mais la ça devient complètement absurde.

Lorsque l'on coche "rupture de stock" pour un produit, celui-ci reste sous le statut en stock dans les pages catalogue. c'est plutot embêtant.

Il y a-t-il certaines fonctionnalités ou configuration dont je n'aurais pas connaissance ?

merci d'avance pour les réponses à mes questions.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

J'ai créé un nouvel état de stock dans la base. "en cous de réapprovisionnement"

Reste à savoir comment le mettre en place dans:


$resEtatStock = query("SELECT id, nom_" . $_SESSION['session_langue'] . " AS nom, image, valeur

	    FROM peel_etatstock

	    WHERE id='" . ($checked_value > 0 ? 1 : 2) . "'");

Et comment lui dire si l'ajout au panier est possible ou non pour cet état.

En fait, admettons que tous mes produit soit en stock :

pour certains produits, une fois le stock à zéro, il faudrait qu'il passe en statut "livré sous 8-10 jours" avec ajout au panier possible

pour d'autres, une fois le stock à zéro, il faudrait qu'il passe en statut "en cours de réapprovisionnement" avec ajout au panier impossible

Reste là à trouver comment définir quel produits sont concernés (une case à cocher par exemple).

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Merci, mais que dois-je faire exactement ?

Reste là à trouver comment définir quel produits sont concernés (une case à cocher par exemple).

Le moyen le plus simple à mon sens serait de créer :

- Un nouveau champ dans la table peel_produits, et prendre en compte ce nouveau champ dans la Class Product. Il faut aussi prévoir son administration.

- Un nouveau paramètre dans la fonction affiche_etat_stock qui permettra de chercher le bon etat de stock, en fonction de ce qui est défini pour le produit.

Concrètement, il faut ajouter le champ resupplying (ou autre nom qui vous convienne) TINYINT 1 NOT NULL DEFAULT 0 dans la table peel_produit. Il faut ensuite ajouter $resupplying au début de la classe Product (vers la ligne 100). Il faut aussi ajouter le champ dans la requête SQL de la ligne 134. Une fois que c'est fait, il faut modifier la page administrer/produits.php pour l'administration de ce champ. Vous pouvez dupliquer le fonctionnement d'une autre champ checbox, comme on_rollover.

Une fois que le champ est administrable, et accessible depuis la classe Product, il faut modifier ensuite la fonction affiche_etat_stock(). Vous pouvez ajouter un paramètre $resupplying à cette fonction :

function affiche_etat_stock($stock, $on_rupture = false, $return_mode = false, $resupplying=null)

et ajouter ce paramètre dans la requête SQL :

$resEtatStock = query("SELECT id, nom_" . $_SESSION['session_langue'] . " AS nom, image, valeur

FROM peel_etatstock

WHERE id='" . ($checked_value > 0 ? 1 : (!empty($resupplying)? 3 : 2 ) ) . "'");

Je pars du principe que l'id de votre nouvel état de stock est 3, il faut modifier pour le bon id si ce n'est pas le cas.

Enfin, à chaque appel de la fonction il faut spécifier le nouveau paramètre. Dans lib\class\Product.php, ligne 947 :

return affiche_etat_stock($stock_remain_all, $this->on_rupture, true, $this->resupplying) ;

et dans lib\fonctions\display_product.php :

ligne 1177

' . affiche_etat_stock($stock_remain_all, false, true, $product_object->resupplying) . '';

ligne 1217

$output .= '' . affiche_etat_stock($stock_remain_all, false, true, $product_object->resupplying) . '';

Les numéros de lignes sont données pour une 6.3.1

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Merci Simon pour cette réponse très complète.

Je m'y mets de ce pas. ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonsoir,

Bon alors, on va dire que j'ai du faire 90% de la modif comme il faut.

- création du champ supplémentaire dans la table peel_produits (ok)

- pour la classe product, j'ai supposé qu'il s'agissait du fichier lib/class/Product.php :

donc ajout de la ligne : var $resupplying = null; (pas à la ligne 100 mais 71 juste après var $on_rupture = null;)

puis dans la requete sql de la ligne 134, j'ai ajouté la ligne suivante : , p.resupplying

- dans administrer/produits.php, j'ai dupliquer la checkbox de "on_rollover". je l'ai placée dans la partie "gestion du stock" comme ceci :


if (is_stock_advanced_module_active ()) {

			affiche_gestion_stock($frm);

   echo '

   <tr>

   <td valign="top" class="normal" style="font-weight:bold; font-size:13px;">Fonction resupplying' . BEFORE_TWO_POINTS . ':</td>

   <td><input type="checkbox" name="resupplying" value="1" ' . frmvalide(!empty($frm['resupplying'])) . ' /></td>

  </tr>';

   }

Ensuite j'ai remplacé chaque lignes comme prévu dans display_product.php et modules\stock_advanced\fonctions.php.

l'id de mon nouvel état de stock est bien le 3.

Donc, la checkbox apparait bien dans les fiches produits, mais lorsque je la coche et valide mon formulaire, l'action n'est pas enregistrée.

C'est à dire que si je reviens sur mon formulaire, la case est toujours décochée. Bien évidemment, l'état de stock du produit reste inchangé.

En revanche, lorsque je change la valeur du champ dans la base, l'état de stock du produit concerné change bien.

Et ma checkbox est cochée dans la fiche produit.

En gros, j'ai juste un problème de liaison avec la base, mais juste dans un sens.

Second problème mais je pense que vous ne l'aviez pas prévu donc normal:

L'ajout au panier reste possible dans cet état de stock alors qu'il ne faudrait pas.

Vous allez me dire que c'est parcequ'il est activé dans la config de la boutique mais c'est volontaire car j'en ai besoin pour permettre l'ajout au panier de mon etat de stock id=2 "livraison sou 8 - 10 jours".

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Pour le premier problème, avez-vous modifié les requêtes de création/modification de produits ? Pour être sur d'avoir modifié l'ensemble du code nécessaire sur cette page, vous pouvez faire une recherche sur le nom du champ d'une fonctionnalité déjà en place, comme on_rollover (produit à la une). Pour chaque occurrence de ce terme, il faut ajouter votre nouveau champ. Si vous faites cette recherche, vous verrez qu'il faut modifier

- la fonction affiche_formulaire_ajout_produit en ajoutant $frm['resupplying'] = ""; au début de cette fonction.

- Ajouter la checbox dans le formulaire.

- Ajouter $sqlProd .= ', resupplying'; et

$sqlProd .= "

, '" . nohtml_real_escape_string(vn($frm['resupplying'])) . "'"; dans la requête SQL de la fonction insere_produit.

- Enfin ajouter

$sql .= "

, resupplying = '" . nohtml_real_escape_string(vn($frm['resupplying'])) . "'";

Une fois les requêtes modifiées, la mise à jour du champ devrait fonctionner.

Pour le second point, l'affichage d'un état de stock est indépendant de la mise au panier du produit. Pour forcer la rupture de stock si le champ resupplying est coché, il faut modifier la fonction affiche_critere_stock() dans le fichier lib/fonctions/display_product.php. Dans cette fonction, vous pouvez remplacer les 4 occurences du test :

if (empty($product_object->on_rupture) || !empty($GLOBALS['site_parameters']['allow_add_product_with_no_stock_in_cart'])) {
par
if (empty($product_object->resupplying) && (empty($product_object->on_rupture) || !empty($GLOBALS['site_parameters']['allow_add_product_with_no_stock_in_cart']))) {
Au sujet de
Dans le back-office, on a la possibilité de forcer l'affichage du délais de livraison (une valeur en jours) Mais aucune distinction n'est faite selon la couleur.
Un développement sera fait sur PEEL7 pour permettre de séléctionner la rupture de stock pour une association taille/produits/couleurs. Pour ce point
j'active la possibilité d'ajouter au panier des produits qui ne sont pas en stock. Un Tshirt (par exemple) est dispo en jaune (stock à 10), mais pas en bleu (stock à 0) Dans la page catalogue et dans la fiche produit, le tshirt est marqué "en stock" (car effectivement dispo dans une certaine couleur) Une fois dans la fiche produits, je sélectionne ma couleur bleu. le statut visible est toujours "en stock" alors qu'il devrait se mettre à jour vers "livré sous 8 - 10 jours". En fait le statut ne se met pas à jour.
=> La correction consiste à ajouter un test sur la couleur lors du calcul du stock temporaire restant pour le produit. Dans la fonction affiche_critere stock, il faut remplacer

foreach ($product_stock_infos as $stock_infos) {
$stock_remain_all += $stock_infos['stock_temp'];
}
[/code] par
[code]
foreach ($product_stock_infos as $stock_infos) {
if (empty($selected_color_id) || (!empty($selected_color_id) && ($selected_color_id == $stock_infos['couleur_id']))){
$stock_remain_all += $stock_infos['stock_temp'];
}
}
vers la ligne 1170. Au sujet de
Pas de possibilit&#233; non plus de renseigner une r&#233;f&#233;rence diff&#233;rente selon la couleur...
A moins de cr&#233;er une fiche article pour chaque couleur, mais la &#231;a devient compl&#232;tement absurde.[/code]

=> La gestion de référence unique par couleur et par taille est un développement supplémentaire, qui consiste à ajouter une table de base de donnée supplémentaire, ainsi que la possibilité de les administrer, et d'exploiter et d'afficher ces références en front et back office. Si vous souhaitez cette fonctionnalité je vous invite à prendre contact avec le service commercial au 01 75 43 67 97.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonsoir,

Merci pour toutes ces réponses !

C'est désormais ok pour le dialogue avec la bdd, la fonction resupplying reste bien activée dans les fiches produits

Par contre j'ai encore des soucis avec l'ajout au panier.

- le remplacement de la ligne :


if (empty($product_object->on_rupture) || !empty($GLOBALS['site_parameters']['allow_add_product_with_no_stock_in_cart'])) {

par :

if (empty($product_object->resupplying) && (empty($product_object->on_rupture) || !empty($GLOBALS['site_parameters']['allow_add_product_with_no_stock_in_cart']))) {

dans la fonction "affiche_critere_stock" me bloque bien l'ajout au panier pour les produits resupplying.

Sauf que le bouton ajouter au panier et le choix de quantité restent bien présents.

(En fait c'est simplement que le bouton ajouter au panier n'est plus cliquable et qu'accessoirement le cadre à disparu)

Dans l'idéal, j'aimerais qu'ils disparaissent. (comme lorsque l'on a un produit ayant un stock à 0 et que la fonction d'ajout au panier pour les produits hors stock est désactivée)

Par ailleurs, lorsqu'un produit resupplying est de nouveau en stock, il n'est pas possible de l'ajouter au panier non plus.

Ensuite concernant les couleurs, la modification ne change rien.

Peut-être me suis-je mal exprimé...

j'aimerais que lors de la séléction de la couleur qui n'est pas en stock, (avant de cliquer sur ajouter au panier) l'état de stock dans le cadre se mette à jour sur l'état de stock id=2 soit livré sous 8-10 jours. Que l'utilisateur avant de cliquer sur "ajouter au panier" soit bien informé que le produit n'est pas dispo dans les mêmes délais.

Je vous rappel que j'utilise la fonction "ajout au panier pour les produit qui ne sont pas en stock" afin d'autoriser l'ajout au panier pour les produit livrables sous 8 - 10 jours.

Peut-être prenons nous le problème dans le mauvais sens, je ne sais pas.

Merci encore de votre patience Simon, on va finir par y arriver !

J'ai bien noté l'info concernant les références différentes par couleur,

si nous parvenons à régler cette histoire d'état de stock, j'y viendrai probablement.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

dans la fonction "affiche_critere_stock" me bloque bien l'ajout au panier pour les produits resupplying.

Sauf que le bouton ajouter au panier et le choix de quantité restent bien présents.

(En fait c'est simplement que le bouton ajouter au panier n'est plus cliquable et qu'accessoirement le cadre à disparu)

Dans l'idéal, j'aimerais qu'ils disparaissent. (comme lorsque l'on a un produit ayant un stock à 0 et que la fonction d'ajout au panier pour les produits hors stock est désactivée).

Pour supprimer l'affichage du bouton d'ajout au panier, pour les produits resupplying, il faut compléter ce test (ligne 1229)

if (empty($product_object->on_estimate)) {
par
if (empty($product_object->on_estimate) && empty($product_object->resupplying)) { {

Par ailleurs, lorsqu'un produit resupplying est de nouveau en stock, il n'est pas possible de l'ajouter au panier non plus.

Le produit sera à nouveau commandable après la mise à jour du champ dans le back office, cette opération n'est pas automatique.

Je regarde pour le problème des couleurs.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Merci pour la modif.

Par contre le fait de devoir décocher la fonction resupplying dans le back-office pose problème.

Enfin, plus exactement, c'est le fait de devoir la cocher une fois qu'il n'y a plus de stock qui poserai problème.

Cela impliquerai d'être H24 sur la boutique pour surveiller le stock, et encore c'est sans parler d'une commande supérieur au stock réel.

Car les utilisateurs pourront continuer à commander le produit, même si celui-ci n'est plus en stock.

Reprenons un exemple :

Le stock de l'article en question baisse petit à petit au fur et à mesure des commandes.

Lorsque celui-ci arrive à zéro, il va passer en statut "livré sous 8 - 10 jours" avec ajout au panier possible,

hors pour ce type de produit, une fois qu'il n'y a pus de stock, il faut qu'il passe directement dans le nouvel état de stock, le fameux resupplying (ou id=3) avec ajout au panier impossible jusqu'à que le stock soit à nouveau positif.

Sinon je risque d'avoir des commandes pour un produit que je n'ai plus en stock et que je souhaite justement mettre en resupplying pour les informer que le produit est en réaprovisionnement sans délais précis. (produit d'importation).

Il faut absolument que le changement de statut se fasse de manière automatique, sinon ce nouvel état de stock n'aura aucun intérêt.

Le problème étant comme vous me l'avez dit qu'il n'y a pas de lien entre l'ajout au panier et l'état de stock.

Il faut que la possibilité d'ajouter au panier soit fonction de l'id de l'état stock et non du fait que le produit soit coché resupplying ou non.

N'y a-t-il vraiment aucuns moyens ?

Essayons déjà de régler cela, on s'occupera de la mise à jour du statut pour les couleurs ensuite.

Merci encore !

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Pour automatiser la mise à jour du champ resupplying de la table peel_produits quand le stock temporaire tombe à 0, il faut modifier la fonction reservation_stock_temp() du fichier modules\stock_advanced\fonctions.php. Avant

if (!empty($GLOBALS['site_parameters']['timemax'])) {
Vous pouvez ajouter :

if(empty($stock_restant_apres_demande) {
query("UPDATE peel_produits
SET resupplying = 0
WHERE id = '" . intval($product_id) . "'");
}
[/code] Il faut également faire la manipulation inverse, si l'utilisateur vide le panier, le stock temporaire est réincrémenté et le produit doit être de nouveau disponible. Dans la fonction liberation_stock_temp() du même fichier, vous pouvez ajouter sous la ligne[i] $stock_temp_restant = $stock_temp_disponible + $quantite;[/i]
[CODE]
if (!empty($stock_temp_restant)) {
query("UPDATE peel_produits
SET resupplying = 1
WHERE id = '" . intval($product_id) . "'");
}

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Cela ne fonctionne pas Simon. (malgré l'ajout de la parenthèse manquante de la première modif).

Je viens d'ajouter du stock pour un produit, l'ajout au panier est toujours impossible. (normal me direz vous car le champs resupplying=1)

Lorsque resupplying=0, l'ajout au panier est possible (normal jusqu'ici) j'ajoute au panier une quantité supérieure ou égal à celle en stock.

Et l'article est toujours dispo, avec ajout au panier possible.

En fait le champs resupplying ne se met pas à jour. Car le stock lui même ne se met pas à jour.

Par contre, même si cela fonctionnerai, cette mise à jour va se faire pour tous les articles non et pas seulement ceux concernés, non?

Car le checkbox resupplying dans la fiche produit du back office servait justement à identifier les produit concernés par cet état de stock.

Si je suis votre raisonnement, (et si la dernière modif arrive a fonctionner) le champs resupplying deviendrait alors automatique.

donc plus besoin de checkbox pour lui dans le back office.

En effet, lorsque le stock est à zéro, il s'active "SET resupplying = 1" le produit prend l'état de stock numéro 3, l'ajout au panier disparait.

Par contre, a ce moment là, il faudrait rajouter encore un nouveau champs dans la table peel_produits, avec une checkbox pour reprendre la fonctionnalité première du checkbox resupplying, afin de définir lesquels produits sont concernés, lesquels ne le sont pas.

Et tout ce qui est lié au resupplying ne s'activerai que pour les produits dont le nouveau checkbox est coché.

Je sais pas si vous me suivez... je me complique peut-être la chose.

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

premium 7.

Je vois bien la bonne requête dans le fichier fonctions.php

 

$resEtatStock = query("SELECT id, nom_" . $_SESSION['session_langue'] . " AS nom, image, valeur
        FROM peel_etatstock
        WHERE id='" . ($checked_value > 0 ? 1 : 2) . "'");
 
mais impossible d'afficher dans l'administration un lien pour créer un nouvel état de stock.
Je viens de regarder aussi sur votre boutique en demo, et cette possibilité n'est pas affichée.
J'ai essayé d'ajouter une ligne dans le fichier fonction_admin.php sous la forme :
 
$menu_items['stocks'][$GLOBALS['wwwroot_in_admin'] . '/modules/stock_advanced/administrer/etatstock.php?mode=ajout'] = 'Ajouter un état de stock';
 
ce qui fait bien un lien vers la page ajout, mais génère des messages d'erreur lors de la validation.
 
Auriez-vous une autre solution svp ?
 
Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

L'ajout d'un nouvel état de stock nécessite de modifier plusieurs élément du code pour que le nouvel état soit pris en compte. L'ajout du lien en back office n'est qu'une première partie. Il faut également modifier le formulaire de modification d'état de stock pour permettre l'ajout, et modifier la fonction affiche_etat_stock à chaque fois qu'un nouvel état de stock est créé.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonsoir,

si j'ai bien compris, le plus simple serait de modifier la fonction affiche_etat_stock en choisissant par défaut par exemple :

si + de 10 --> couleur verte

si 10>x>6 --> couleur jaune

si 5>x>1 --> couleur bleu

Si 0 --> couleur rouge

et dans ce cas, pas besoin de modifier l'administration ou d'autres fichiers.

est-ce juste ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

oui, vous pouvez faire un  test sur la variable $checked_value de la fonction affiche_etat_stock, et afficher une image différente pour chaque cas de figure testé. La requête SQL qui va chercher les informations dans peel_etatstock ne servira plus, il ne sera donc plus possible d'administrer les états de stock

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping