Grouik Posted August 19, 2021 Share Posted August 19, 2021 Bonjour à tous, Je suis sur une version 1.6.1.17 de Prestashop. J'ai activé la gestion de stock simple (sans afficher la valeur de stock que je ne souhaite pas divulguer). Si un client achète plus d'article qu'il n'y en a en stock, l'étiquette "en stock" ne change pas sur la page produit, comme celle-ci n'est pas réactualisée pourquoi pas. Par contre sur la page panier c'est toujours indiqué "en stock". J'aimerai savoir si c'est le comportement normal de Prestashop, où si c'est moi qui est trop bidouillé mon TPL. Si ce n'est pas le comportement normal pouvez-vous m'indiquer une piste ? Je vous remercie par avance, Bonne journée, Jeff Link to comment Share on other sites More sharing options...
Eolia Posted August 19, 2021 Share Posted August 19, 2021 C'est le comportement normal si vous avez activé l'autorisation de vente hors-stock pour ce produit (Le produit est toujours montré en stock) Cela peut dépendre aussi du js de votre thème. Link to comment Share on other sites More sharing options...
Grouik Posted August 19, 2021 Author Share Posted August 19, 2021 Bonjour Eolia, Merci pour votre prompt réponse 🙂, effectivement j'autorise le client à passer commande quand le produit est hors stock, mais faut il encore qu'il soit au courant. C'est là que le bas blesse. J'utilise le thème de base de Prestashop, je n'ai pas trop bricolé les TPL concernés (shopping-cart.tpl et shopping-cart-product-line.tpl), je vais fouiller. Merci encore. Bien cordialement, Jeff Link to comment Share on other sites More sharing options...
Grouik Posted August 19, 2021 Author Share Posted August 19, 2021 Du coup j'ai modifié shopping-cart-product-line.tpl Pour indiquer à Prestashop qu'il mette dans la "page panier" l'étiquette "En cours de réapprovisionnement" si le client achète une quantité supérieur au stock. Pour cela vers la ligne 37 du fichier shopping-cart-product-line.tpl : <td class="cart_avail" style = "visibility:hidden;"><span class="label{if $product.quantity_available <= 0 && isset($product.allow_oosp) && !$product.allow_oosp} label-danger{elseif $product.quantity_available <= 0} label-warning{else} label-success{/if}">{if $product.quantity_available <= 0}{if isset($product.allow_oosp) && $product.allow_oosp}{if isset($product.available_later) && $product.available_later}{$product.available_later}{else}{l s='In Stock'}{/if}{else}{l s='Out of stock'}{/if}{else}{if isset($product.available_now) && $product.available_now}{$product.available_now}{else}{l s='In Stock'}{/if}{/if}</span>{hook h="displayProductDeliveryTime" product=$product}</td> J'ai changé les : $product.quantity_available <= 0 (stock supérieur à zéro) par $product.cart_quantity > $product.quantity_available (quantité commandée par le client supérieure au stock). Cela fonctionne nickel !!! Merci Eolia ! Le dernier micro soucis c'est que depuis cette page panier le client peut encore changer la quantité, et la page ne se réactualise pas toute seule (à moins d'appuyer sur la touche F5). Je ne maitrise pas du tout le JS j'imagine que le soucis vient de là. J'ai contrôlé via "l'inspecteur" de Chrome, il ne semble pas y avoir d'erreur JS. Le prix se met à jour mais pas l'étiquette de stock. Si quelqu'un a une idée ? Bonne soirée, ++, Jeff Link to comment Share on other sites More sharing options...
Eolia Posted August 19, 2021 Share Posted August 19, 2021 c'est normal car le js a reçu les nouvelles données mais n'a pas les lignes de script ajoutées pour mettre à jour ce que vous avez fait pour le tpl Link to comment Share on other sites More sharing options...
Eolia Posted August 19, 2021 Share Posted August 19, 2021 ca se passe dans product.js au niveau de cette fonction: //update display of the availability of the product AND the prices of the product function updateDisplay() { var productPriceDisplay = productPrice; var productPriceWithoutReductionDisplay = productPriceWithoutReduction; if (!selectedCombination['unavailable'] && quantityAvailable > 0 && productAvailableForOrder == 1) { //show the choice of quantities $('#quantity_wanted_p:hidden').show('slow'); //show the "add to cart" button ONLY if it was hidden $('#add_to_cart:hidden').fadeIn(600); //hide the hook out of stock $('#oosHook').hide(); $('#availability_date').fadeOut(); //availability value management if (stock_management && availableNowValue != '') { $('#availability_value').removeClass('label-warning').addClass('label-success').text(availableNowValue).show(); $('#availability_statut:hidden').show('slow'); } else $('#availability_statut:visible').hide('slow'); //'last quantities' message management if (!allowBuyWhenOutOfStock) { if (quantityAvailable <= maxQuantityToAllowDisplayOfLastQuantityMessage) $('#last_quantities').show('slow'); else $('#last_quantities').hide('slow'); } if (quantitiesDisplayAllowed) { $('#pQuantityAvailable:hidden').show('slow'); $('#quantityAvailable').text(quantityAvailable); if (quantityAvailable < 2) // we have 1 or less product in stock and need to show "item" instead of "items" { $('#quantityAvailableTxt').show(); $('#quantityAvailableTxtMultiple').hide(); } else { $('#quantityAvailableTxt').hide(); $('#quantityAvailableTxtMultiple').show(); } } } else { //show the hook out of stock if (productAvailableForOrder == 1) { $('#oosHook').show(); if ($('#oosHook').length > 0 && function_exists('oosHookJsCode')) oosHookJsCode(); } //hide 'last quantities' message if it was previously visible $('#last_quantities:visible').hide('slow'); //hide the quantity of pieces if it was previously visible $('#pQuantityAvailable:visible').hide('slow'); //hide the choice of quantities if (!allowBuyWhenOutOfStock) $('#quantity_wanted_p:visible').hide('slow'); //display that the product is unavailable with theses attributes if (!selectedCombination['unavailable']) { $('#availability_value').text(doesntExistNoMore + (globalQuantity > 0 ? ' ' + doesntExistNoMoreBut : '')); if (!allowBuyWhenOutOfStock) $('#availability_value').removeClass('label-success').addClass('label-warning'); } else { $('#availability_value').text(doesntExist).removeClass('label-success').addClass('label-warning'); $('#oosHook').hide(); } if ((stock_management == 1 && !allowBuyWhenOutOfStock) || (!stock_management && selectedCombination['unavailable'])) $('#availability_statut:hidden').show(); if (typeof(selectedCombination['available_date']) !== 'undefined' && typeof(selectedCombination['available_date']['date_formatted']) !== 'undefined' && selectedCombination['available_date']['date'].length != 0) { var available_date = selectedCombination['available_date']['date']; var tab_date = available_date.split('-'); var time_available = new Date(tab_date[0], tab_date[1], tab_date[2]); time_available.setMonth(time_available.getMonth()-1); var now = new Date(); if (now.getTime() < time_available.getTime() && $('#availability_date_value').text() != selectedCombination['available_date']['date_formatted']) { $('#availability_date').fadeOut('normal', function(){ $('#availability_date_value').text(selectedCombination['available_date']['date_formatted']); $(this).fadeIn(); }); } else if (now.getTime() < time_available.getTime()) $('#availability_date').fadeIn(); } else $('#availability_date').fadeOut(); //show the 'add to cart' button ONLY IF it's possible to buy when out of stock AND if it was previously invisible if (allowBuyWhenOutOfStock && !selectedCombination['unavailable'] && productAvailableForOrder) { $('#add_to_cart:hidden').fadeIn(600); if (stock_management && availableLaterValue != '') { $('#availability_value').addClass('label-warning').text(availableLaterValue).show('slow'); $('#availability_statut:hidden').show('slow'); } else $('#availability_statut:visible').hide('slow'); } else { $('#add_to_cart:visible').fadeOut(600); if (stock_management == 1 && productAvailableForOrder) $('#availability_statut:hidden').show('slow'); } if (productAvailableForOrder == 0) $('#availability_statut:visible').hide(); } Link to comment Share on other sites More sharing options...
Grouik Posted August 23, 2021 Author Share Posted August 23, 2021 Merci pour votre réponse argumentée. Là j'avoue je cale sur le JS. J'ai le sentiment que cela se joue ici : //display that the product is unavailable with theses attributes if (!selectedCombination['unavailable']) { $('#availability_value').text(doesntExistNoMore + (globalQuantity > 0 ? ' ' + doesntExistNoMoreBut : '')); if (!allowBuyWhenOutOfStock) $('#availability_value').removeClass('label-success').addClass('label-warning'); } else { $('#availability_value').text(doesntExist).removeClass('label-success').addClass('label-warning'); $('#oosHook').hide(); } if ((stock_management == 1 && !allowBuyWhenOutOfStock) || (!stock_management && selectedCombination['unavailable'])) $('#availability_statut:hidden').show(); et qu'il faudrait que je change le "globalQuantity > 0" par un "quantité commandé par le client" < "Quantité du stock". J'avoue que je sèche complètement. Suis je loin du compte ? Merci encore, Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now