genius_ Posted June 3, 2013 Share Posted June 3, 2013 (edited) Bonjour J'ai créé un module qui permet en BO de remplir quelques champs (pour louer un article) et donc l'admin peut saisir un champ "tarif" qui modifie le prix de l'article pour le remplacer par celui saisi. J'arrive bien à modifier la table ps_product (donc la colonne price) ainsi que la table ps_product_attribute (colonne price) et la table ps_layered_price_index mais à moitié (uniquement la colonne price_min qui est le prix HT, pas price_max qui est le prix TTC) Quand je vais dans l'onglet prix de la page de modification d'un produit (en BO) je ne retrouve pas le prix que j'ai saisi via mon module qui a son onglet aussi dans la page de modification d'un produit (vous savez les onglets prix, informations, déclinaisons, quantités etc)... ... Incompréhension totale. Comment faire pour modifier correctement le prix HT, pour ensuite calculer automatiquement le prix TTC ? Je désespère, je vous remercie de votre patience Edited June 5, 2013 by genius_ (see edit history) Link to comment Share on other sites More sharing options...
Pepitoww Posted June 3, 2013 Share Posted June 3, 2013 Bonjour, je suis sur un Presta 1.5.3.1 et la table ps_layered_price_index n'existe pas. Je peux néanmoins vous indiquer des pistes, il semblerait que seul l'attribut price de la table ps_product soit utilisé pour l'affichage dans l'onglet Prix lors de la création/modification d'un produit. Le prix de vente HT correspond ainsi à l'attribut price puis le prix de vente TTC est ensuite calculé avant affichage sur la base du prix HT. Cordialement Link to comment Share on other sites More sharing options...
genius_ Posted June 3, 2013 Author Share Posted June 3, 2013 (edited) Merci pour les informations, c'est donc bien ce que je pensais, seule la table ps_product est utilisée pour l'affichage (et les getters de la classe Product). Vraiment bizarre que le .tpl qui affiche les prix n'aille pas "récupérer" les valeurs qui sont pourtant correctes dans ma table ps_product D'ailleurs je ne l'ai pas précisé, mais l'affichage du prix pose problème dans le FO : lors du listing des produits, et dans la fiche produit. j'ai donc écris un getter qui fonctionne, mais celà n'est pas très pro et je dois donc appeler ce getter dans tout les .tpl qui affichent le prix ... pas pratique du tout. EDIT : La variable qui affiche le prix dans les .tpl, notamment product_list.tpl est : $product.show_price. Je suis perdu, je pensais qu'on accéder aux attributs d'une classe via nomClasse->attribut, il ne s'agit donc pas de l'affichage de l'attribut d'un objet produit ? SVP Edited June 3, 2013 by genius_ (see edit history) Link to comment Share on other sites More sharing options...
Pepitoww Posted June 3, 2013 Share Posted June 3, 2013 Pour vérifier ce point, êtes vous sur que les modifications sont bien prises en compte et enregistrer dans la Bdd ? Il est possible qu'aucune modification ne soit faite et que vous récupérer finalement les valeurs de base des prix pour chaque produit. Link to comment Share on other sites More sharing options...
genius_ Posted June 3, 2013 Author Share Posted June 3, 2013 (edited) Oui, lorsque je saisi mon tarif dans mon champs et que j'enregistre. je vais voir ma table ps_product : elle contient bien la valeur saisie (dans la colonne price). Voici le code qui s'exécute lorsque j'enregistres mes modifications en BO : public function hookActionProductUpdate($params) { $id_product = Tools::getValue('id_product'); $sampleObj = BlockLocationClasse::loadByIdProduct($id_product); $sampleObj->dispo = (boolean)Tools::getValue('dispo'); $sampleObj->texte = Tools::getValue('texte'); $sampleObj->tarif = (float)Tools::getValue('tarif'); $sampleObj->nb_jour_max = Tools::getValue('nb_jour_max'); $sampleObj->id_product = $id_product; //Test l'objet et son attribut "tarif" pour voir si on peut modifier le tarif dans la BDD if( !empty($sampleObj) && isset($sampleObj->tarif) ) { $this->setProductPrice($id_product, $sampleObj->tarif); /*<-------------------- ICI QUE J'APPELLE MA METHODE*/ } //Test l'objet afin de voir s'il faut le modifier ou le crééer if( !empty($sampleObj) && isset($sampleObj->id) ) { $sampleObj->update(); } else { $sampleObj->add(); } } La méthode en question : /* Méthode pour modifier uniquement le prix d'un produit en fonction de son ID Arguments : - id_produit pour le WHERE - price qui est le tarif à modifier */ public function setProductPrice($id_product, $price) { $result = Db::getInstance()->update('product', array('price' => $price), 'id_product = '.(int)$id_product); } EDIT : qui plus est, lorsque j'accède au listing des produits en BO (donc Catalogue -> produits) j'ai bien le tarif saisi qui s'affiche correctement dans la colonne prix de base donc je soupçonne les fichiers .tpl de ne pas aller récupérer la bonne valeur dans la BDD ... vraiment étrange. Edited June 3, 2013 by genius_ (see edit history) Link to comment Share on other sites More sharing options...
Pepitoww Posted June 3, 2013 Share Posted June 3, 2013 (edited) EDIT : La variable qui affiche le prix dans les .tpl, notamment product_list.tpl est : $product.show_price. Je suis perdu, je pensais qu'on accéder aux attributs d'une classe via nomClasse->attribut, il ne s'agit donc pas de l'affichage de l'attribut d'un objet produit ? SVP Vous n'êtes pas au bon emplacement concernant le fichier template, comme on est dans la partie back office, le véritable fichier template qui plus relatif à l'onglet Prix est accessible par ce chemin : /admin/themes/default/template/controllers/products/prices.tpl Le champ Prix de vente HT récupére la valeur issu de la Bdd (prix de base indiqué dans le tableau des produits). Ensuite selon la taxe sélectionnée le prix de vente TTC final est calculé conditionnant également le Prix final. Edited June 3, 2013 by Pepitoww (see edit history) Link to comment Share on other sites More sharing options...
genius_ Posted June 4, 2013 Author Share Posted June 4, 2013 Oui je suis conscient qu'il s'agit de prices.tpl que j'ai d'ailleurs exploré pour voir comment le prix était affiché. Il semblerait que l'affichage se fasse avec l'attribut $price de l'objet $product. L'accès se fait donc via : $product->price. Voici le paramètre du champs INPUT du prix HT : value="[spam-filter]toolsConvertPrice price=$product->price}|string_format:'%.2f'}" Le code complet : <td style="padding-bottom:5px;"> <input type="hidden" id="priceTEReal" name="price" value="{toolsConvertPrice price=$product->price}" /> {$currency->prefix}<input size="11" maxlength="14" id="priceTE" name="price_displayed" type="text" value="[spam-filter]toolsConvertPrice price=$product->price}|string_format:'%.2f'}" onchange="noComma('priceTE'); $('#priceTEReal').val(this.value);" onkeyup="$('#priceType').val('TE'); $('#priceTEReal').val(this.value.replace(/,/g, '.')); if (isArrowKey(event)) return; calcPriceTI();" />{$currency->suffix} <p class="preference_description">{l s='The pre-tax retail price to sell this product'}</p> </td> Je te remercie encore pour ton soutien, je bloque toujours autant. Il s'agit de POO alors j'imagine que l'attribut $price de la classe Product (objet $product dans le code) doit être initialisé à partir de sa valeur dans la BDD (donc de la valeur que j'ai saisi et qui est dans cette BDD ... incompréhension totale) Link to comment Share on other sites More sharing options...
genius_ Posted June 5, 2013 Author Share Posted June 5, 2013 Je viens de découvrir qu'en fait il s'agit de la colonne price de la table ps_product_shop qui est utilisée (que ce soit pour l'affichage ou le calcul du prix TTC) ... si seulement la BDD était plus claire Et bien merci pour ton aide à toi Pepitoww. je peux maintenant me consacrer à la gestion du tarif journalier pour la location produit. Encore merci ! Link to comment Share on other sites More sharing options...
Pepitoww Posted June 5, 2013 Share Posted June 5, 2013 Bonjour, bien un problème de résolu et vous m'apprenez également que c'est la table product_shop qui est utilisée pour le menu Produit. Bon courage pour la suite. Cordialement 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