Jump to content
  • 0
Maxime G

[Patch] Afficher les prix au kilo ou au litre (MAJ -> v3)

Question

Bonjour à tous.

J'ai eu besoin de pouvoir afficher le prix au kilo sur certains produits afin d'être conforme à la législation.

J'ai cherché et n'ai rien trouvé. Je vous livre donc ma solution. Je l'ai étendue pour afficher un prix au litre ou autre.
Il est impossible avec la conception actuelle de Prestashop d'en faire un module. Donc il va falloir attaquer le code source. Les modifs à faire sont simples, et ne touchent pas au code sensible.

Comment ça marche ?
On se base sur le prix (jusque là, ça va) et sur le poids logistique renseigné dans la fiche produit.
On divise l'un par l'autre et on a ce qu'on voulait.
La manip est faite pour être compatible avec les attributs (et leur modifs de prix et poids) et, petit bonus, le prix au kilo change bien quand on change de déclinaison.
L'affichage n'a lieu que sur la fiche produit.

Prérequis :
Vous n'utilisez pas vraiment le poids des commandes pour calculer les fdp :
* Le poids renseigné dans les fiches produits est le vrai poids (et non le poids logistique ie avec emballage...)
* Je la refais : le poids renseigné dans les fiches produits est le poids net (et non le poids brut)
* Pour les autres unités, la valeur renseignée dans les fiches produits est nette et est "la bonne en unité" : par exemple, une bouteille de vin de 75cl, vous renseignez dans le champs poids la valeur 0.75 ; ainsi vous afficherez un prix au litre.

Et quelle version de Prestashop ?
Ceci est valable pour la 1.3.0.5 (ie 1.3.0 RC2).
Valable aussi pour la 1.2.5 (testé par Gilbert).
Vous devez refaire la manip après chaque mise à jour, puisque vous écraserez les fichiers modifiés.

Instruction d'installation :
Téléchargez le diff en pièce jointe du message et appliquez ça.
Si ça ne vous parle pas, c'est pas compliqué, vous ouvrez ça avec votre éditeur de texte, et vous ajoutez les lignes commençant par un + aux bons endroits (en enlevant le +) et quand il y a un - (un moins) vous enlevez la ligne.

Exemple :
Le diff :

diff --git a/themes/prestashop/css/global.css b/themes/prestashop/css/global.css
index d117840..50477bd 100644
--- a/themes/prestashop/css/global.css
+++ b/themes/prestashop/css/global.css
[spam-filter] -2250,3 +2250,9 [spam-filter] A
B
+ligne_entre_B_et_C
C
D
-E
+nouveau_E
F
G



Vous trouvez les lignes A et B et C et D, et entre B et C vous ajouter le bloc où il y a les + (en les enlevant).
Pour la deuxième partie, c'est pareil, mais vous enlevez d'abord la ligne ou il y a le moins.

Pour les avertis vous faites dans la racine de votre install prestashop : patch < priceweight.diff


Dans le BO :
Il vous faut créer deux caractéristiques :
* special_priceweight avec comme valeur possible : 1
* special_priceweight_unit avec comme valeurs possibles kg, L, et/ou vos autres unités (celui là est optionnel, s'il n'existe pas ou n'est pas affecté à la fiche produit, "kg" sera utilisé)

Ces deux "caract spéciales" ne seront pas affichées sur la fiche produit.

Activer le prix au kilo sur la fiche produit :
* On renseigne le poids sur la fiche produit ainsi que les éventuelles modifications de poids des déclinaisons*.
* On place la caractéristique "special_priceweight" à "1".
* Si nécessaire, on choisit l'unité à afficher avec special_priceweight_unit.

*Exemple (à la con) pour les déclinaisons : Vous vendez des biscuits, vous avez deux déclinaisons : paquet de 100g (par défaut) et paquet de 200g.
* Vous créez la déclinaison "conditionnement" avec comme attribut "Paquet de 100g" et "Paquet de 200g" (si ce n'est pas déjà fait)
* Vous créez une fiche produit en spécifiant sur la fiche principale les valeurs de la décl par défaut le prix, disons 5€, et le poids 0.1 (=100g).
* Vous ajouter la décl Paquet de 100g, aucune modif prix, aucune modif poids.
* Vous ajouter la décl Paquet de 200g, modif prix +3€, modif poids +0.1.

Vous aurez ainsi : Paquet de 100g, 5€, 50€/kg et Paquet de 200g, 8€, 40€/kg.

(rem : on peut aussi faire 0€, 0kg sur la fiche principale et faire les modifs en +prix et +poids, plutôt que faire des différences alambiquées)


Précautions
Comme d'hab, utilisez ça à vos risques et périls, blablabla, testez avant sur une version qui n'est pas en production, blablabla, je ne saurez être tenu pour responsable de tout préjudice subi suite à l'application de ce patch.

Licence
Copyright moi. Vous êtes libre d'utiliser et d'améliorer, à la condition de le signaler et de partager vos améliorations dans ce post (partage dans les mêmes conditions). Sinon, je saurais vous retrouver :vampire:

À vous...
...de jouer !
Et de partager.

--

Historique
* v1 :
** Release initiale, pour tests.
* v2 :
** Correction mineures (NOTICE & cas où le poids renseigné vaut 0)
** Prise en compte de special_priceweight comme modifieur (pour par exemple afficher un prix par 100g tout en ayant un vrai poids en kilo dans la fiche produit (dans ce cas, on met 0.1 dans special_priceweight))
* v3 :
** 2 Corrections majeures.

--

Un fichier zip avec les fichiers modifiés prêts pour la 1.2.5 se trouve plus loin dans le topic. Lisez le topic pour comprendre les implications de vos changements.

--

PS: info pour moi :
v1 : commit f66bfc522aad2a7623e757eabaff447c7fe48a0c.
v2 : commit 898352ea829e58680196a6d0ecee43f9a3426645.
v3 : commit 43832d14322cd9d4897fb2efe9602bbe62566fe7.

priceweight.diff.txt

priceweight-v2.diff.txt

priceweight-v3.diff.txt

Share this post


Link to post
Share on other sites

114 answers to this question

Recommended Posts

  • 0

Bonjour à tous et merci pour toutes ces précieuses information pour améliorer la gestion des prix / poids sur prestashop.

Cependant je pense qu'il y a un réel problème sur la condition de départ qui consiste à considérer le poids dans la fiche produit comme le poids net à utiliser pour calculer le prix par rapport à l'unité de référence. En effet celui ci est pris en compte pour calculer le poids de la commande et ainsi déterminer le tarifs de la livraison.

Etant donné la différence parfois importante entre le poids net et le poids brut, cela peut avoir un impact évident sur le coût du transport et peut être à l'origine d'un déficit sur la marge prévu sur chaque produit.

Voici un exemple pour illustrer mes propos en prenant un marchand d'huile d'olive (prix fictif):


il vend une bouteille d'huile d'olive en 0,25 L à 5€ l'unité (soit 20€/L) dont le poids brut pour le transport est de 500g.
il vend une bouteille d'huile d'olive en 0,75 L à 12€ l'unité (soit 16€/L) dont le poids brut pour le transport est de 1000g.
il vend une bouteille d'huile d'olive en 1 L à 15 € l'unité (soit 15€/L) dont le poids brut pour le transport est de 1500g

ps: le poids brut n'est pas linéaire car le modèle de la bouteille utilisé pour chaque conditionnement est différent.


Pour avoir le bon prix au litre en considérant le poids de la fiche produit comme poids net, il faudrait que je mette special-weight en Litre et special_priceweight à 1000 et que je mette le poids suivant sur chaque déclinaison :
poids à 250g pour simuler le 0,25 L
poids à 750g pour simuler le 0,75 L
poids à 1000g pour simuler le 1 L


Or pour chaque bouteille d'1L le coût de livraison est à 8€ pour 1000g et 9€ pour 1500g. Le marchand perd donc 1€ sur la marge de son produit ce qui n'est non négligeable.

Si je considère le poids de la fiche produit comme le poids brut comme c'est prévu à l'origine par prestashop, j'obtiens alors un prix par rapport à l'unité de référence avec special-weight en Litre et special_priceweight à 1000

la bouteille à 0,25 L affichera 10€/L (5/500*1000)
la bouteille à 0,75 L affichera 12€/L (12/1000*1000)
la bouteille à 1 L affichera 10€/L (15/1500*1000)


Dans ce cas le coût de la livraison est correcte mais le prix au Litre ne correspond plus et j'affiche une mauvaise valeur au client.

Tout ça pour vous dire qu'il faudrait rajouter un champs poids net (ou poids du conditionnement) dans la classe produit (et en base bien sur) et un impact sur la déclinaison. Ce sera sur ce poids qu'on se basera pour afficher le prix selon l'unité de référence.

Dans le fichier product.php il faudra changer $product->weight en $product->packaging_weight.

Pour reprendre cette idée avec l'exemple du marchand d'olive ça donnerait ceci avec special-weight en Litre et special_priceweight à 1


la bouteille à 0,25 L avec un poids brut de 500g un poids de conditionnement à 0,25 et avec un prix à 5€.

la bouteille à 0,50 L avec un poids brut de 1000g un poids de conditionnement à 0,75 et avec un prix à 12€.

la bouteille à 1 L avec un poids brut de 1500g un poids de conditionnement à 1 et avec un prix à 15€.


Dans ce cas on aura donc un coût de transport et le prix selon l'unité de référence seront corrects.

Bien sur cette solution demande une modification beaucoup plus profonde que la solution V3 proposée:
Il faut rajouter un champs packaging_weight en base dans la table product avec le même type que le champ weight actuel.
Il faut rajouter ce champs dans la classe Product avec ses valeurs respectives dans $fieldsRequired, $fieldsSize, $fieldsValidate... si besoin et les rajouter dans les fonctions faisant des appels à la base de données ou populant l'instance Product.

Qu'en pensez-vous?

Share this post


Link to post
Share on other sites
  • 0

LA SOLUTION QUE JE PROPOSE (utiliser une caratéristique plutôt que le poids logistique) permet de prendre en compte ta remarque de manière ultra simple et sans modifier le core.
La voici en résumé
Créer une caractéristique "metrage" (par exemple) et renseigner en créant des valeurs coorespondant aux produits pour lesquels on souhaite que cette formule apparraisse.
Puis dans product.tpl quelque part dans <!-- prices --> insérer ceci juste après une balise {/if}

<!-- METRAGE -->
 {if $features}
     {foreach from=$features item=feature}
         {if $feature.name=='metrage' && $feature.value!='' }
 {convertPrice price=$product->getPrice(true, $smarty.const.NULL, 2)/$feature.value} TTC le m²{/if}

     {/foreach}
 {/if}
 <!-- FIN METRAGE --> 



NB : je n'ai pas encore trouvé la solution pour les produits avec déclinaisons mais j'ai cru voir apparaitre une fonctionnalité dans la 1.4.0.2

Et voilà le boulot ! Merci à mon ami le Dahu sans qui j'aurais passé encore 1 an sur ce "détail" ;-)

a+

Share this post


Link to post
Share on other sites
  • 0

salut à tous !
J'ai suivi à la lettre ce tuto, car j'aimerai afficher les prix à l'unité, car la plupart de mes produits sont en paquets de 10, 20, 30,...
et pouvoir afficher un prix unitaire à X exemplaires. ensuite le client choisit son type de conditionnement et le prix de 20 n'est pas le même qu'à 50...

Bref, j'ai effectué toutes les modifs apportées par Jean-Bruno, en me basant sur $location puisque j'utilise ean13.

Mais voilà, rien ne s'affiche ans ma fiche produit, enfin du moins je ne comprends pas réellement comment agir dans le BO pour voir l'affichage.
Je ne comprends pas pourquoi toucher à une caractéristique en début de tuto, si il faut renseigner l'emplacement qui correspond à une déclinaison.

Merci de vos réponses, cela me ferait grandement avancer.

Tramber.

Share this post


Link to post
Share on other sites
  • 0

Salut Jean-bruno, je suis presque en prod (donc toujours en cré...) mais la boutique doit être opérationnelle pour hier.
en fait j'essaie de regarder les dernières fonctionnalités à apporter.

du coup je reviens à ma demande, quels champs remplis-tu pour voir les modifications. Est-ce que ça marche, est-ce selon toi la bonne méthode pour afficher non pas un prix au kg ou au mètre mais à l'unité sachant qu'il peut être vendu dans différents conditionnement.
J'ai essayé plusieurs bidouillage dans le BO mais rien ne s'afffiche...

Après pour la SVN, est-ce que ça marche si la boutique est en prod et surtout comment ça marche?

Merci d'avance.

Share this post


Link to post
Share on other sites
  • 0

Tu choisis un produit et tu lui crées une caractéristique que tu appelle "metrage" (pour l'exemple, ça te donneras des metres carrés)
Dans la caractéristique tu ajoutes les valeurs de ton produit dans toutes ses configurations
Si c'est des paquets de 2.1 m2 tu entre "2.1"
Si tu as des packs de 2 paquets de 2,1 m2 tu entres "4.2"

C'est le nombre que va diviser ton prix.

Ensuite remplace le fichier product.tpl par celui que je te joins et tu va sur la page de ton produit : miracle ça marche.
Pour le faire avec d'autres caractéristiques tu fais pareil et tu modifie ton tpl comme commenté (cherche METRAGE dans le code du tpl

courage

le code pour mémoire

<!-- METRAGE -->
 <?php if ($this->_tpl_vars['features']): ?>
     <?php $_from = $this->_tpl_vars['features']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
   foreach ($_from as $this->_tpl_vars['feature']):
?>
         <?php if ($this->_tpl_vars['feature']['name'] == 'metrage' && $this->_tpl_vars['feature']['value'] != ''): ?>
 <?php echo Product::convertPrice(array('price' => $this->_tpl_vars['product']->getPrice(true,@NULL,2)/$this->_tpl_vars['feature']['value']), $this);?>
TTC le m²<?php endif; ?>

     <?php endforeach; endif; unset($_from); ?>
 <?php endif; ?>
 <!-- FIN METRAGE -->

Share this post


Link to post
Share on other sites
  • 0

Merci pour la qualité de votre travail, mais, je dois m'y prendre comme un manche, parce que je n'arrive pas a le faire fonction sous la versions 1.3.1 de prestashop.

Existe-t-il un zip avec les fichiers pré-modé a mettre juste après une installation de prestashop ?
( spécial manche ou newbies svp )

et dan mon cas c'est une obligation bien plus pressente que la loi chatel, mais c'est pour afficher en clair en quoi je me démarque de ma concurrence )

merci par avance de vos réponses

Share this post


Link to post
Share on other sites
  • 0

Salut Spacespy,
En effet ils ne nous disent pas tout dans ce topic... J' me suis acharné et je suis arrivé à un affichage qui s'en rapproche, pour afficher le prix unitaire en fonction du conditionnement.
J'ai un peu fait un mix des 2 solutions car en suivant à la lettre les infos de Jean-bruno je n'y suis pas arrivé.

Si tu veux voir ce que ça donne : http://artsephemeres.com/decotable/82-decors-de-table
c'est en rose : à partir de : ....€
Et le prix unitaire dans la fiche produit.

Dis moi où tu en es si t'as besoin d'aide.

Tramber.

Share this post


Link to post
Share on other sites
  • 0

je vois bien le fameux prix unitaire.

le probleme c'est que j'ai copié tous les morceaux de code, et que y'a rien qui fonctionne.

de plus il n'est pas clairement expliqué quelle case remplir et surtout avec quoi.

Dans mon cas c'est pour un site de vente en ligne de produits de la mer, ou les prix changent tous les jours et surtout les prix des lots sont proportionnels au prix kilo.

S'il faut renseigner le prix des lots ou même faire une fiche par type de lot c'est pas un probléme, mais bon dieu, c'est pas croyable qu'il n'y ai rien de clair pour se mettre en conformité avec la loi .

Je rappel qu'aux termes de la loi Châtel et surtout aux termes du code du commerce, seul les prix par unités de mesure conventionnelles inscrites auprès de l'institut national des poids et mesures sont légitimes dans la définition du prix d'un produit.

donc s'il vous plait, proposez un pack pour patcher son installation afin de se mettre en conformité avec la loi.

Je n'aime pas les bracelets chromés, et encore moins devoir payer l'amende de la DGCCRF de l'ordre de la centaine d'euros par produits (et plus ou moins doublée en cas de récidive) surtout que je vais mettre en ligne dans les 300 produits hors variations de conditionnements.

Par avance merci

Share this post


Link to post
Share on other sites
  • 0

La communauté n'a aucune obligation de créer un pack pour qui que ce soit... Chacun apporte sa pierre à lédifice (qui est déjà colossal !!)

Pour répondre à ta question j'ai remplacé la variable "metrage" par conditionnement dans le product-list.tpl
Ensuite j'ai créé une caractéristique (onglet caractéristique dans catalogue) "conditionnement" dans le Back office, ensuite j'ai créé une valeur par conditionnement : 5, 10 20,...
Et il s'affiche bien le prix unitaire, cette variable est le diviseur pour avoir l'unité. Il se renseigne par les caractéristiques.

Après concernant la loi, chacun vend des produits différents, à chacun d'adapter sa boutique à ces produits.

En espérant t'avoir aidé.

Share this post


Link to post
Share on other sites
  • 0

mon probleme c'est que rien ne s'affiche.

merci de ton aide en tout cas.

( mon coup de stress est surtout pour l'editeur et les programmeurs pros, car suite a un coup de telephone, la seul réponse qui m'ai été fournie est : c'est impossible pour des raison d'arrondis qui ne se font pas )

Share this post


Link to post
Share on other sites
  • 0

Bonjour,

J'ai un peu de mal à adapter cette fonction à la version 1.4 de prestashop...

Dans ProductController.php, il faut mettre :

self::$smarty->assign(array(
           'display_weightprice' => $display_weightprice,
           'unit_weightprice' => $unit_weightprice,
           'product_weightprice' => $product_weightprice,
           'combinations_weightprice' => $combinations_weightprice));


au lieu de :

$smarty->assign(array(
           'display_weightprice' => $display_weightprice,
           'unit_weightprice' => $unit_weightprice,
           'product_weightprice' => $product_weightprice,
           'combinations_weightprice' => $combinations_weightprice));


pour que les variables passent bien sous smarty.
Cependant, sur la fiche produit, bien que l'unité change correctement (Kg devient L quand besoin), le prix au litre/kg reste à zero...

Si quelqu'un a la solution, je suis preneur, merci...

En passant, j'ai directement modifié le fichier ProductController.php, je n'ai pas compris comment passer les deux bouts de code en override. Si quelqu'un pourrait un peu m'expliquer le concept...

Share this post


Link to post
Share on other sites
  • 0
Bonjour,
En passant, j'ai directement modifié le fichier ProductController.php, je n'ai pas compris comment passer les deux bouts de code en override. Si quelqu'un pourrait un peu m'expliquer le concept...


Par exemple , dans ton cas, si tu veux surcharger la methode process() de ProductControllerCore

Dans /override/controllers tu crées un fichier nommé ProductController.php


Dedans :

class ProductController extends ProductControllerCore
{

   public function process()
   {

       parent::process(); // pas obligatoire mais c'est mieux que de tout reprendre

       ....ton code ici... 

   }

}

Share this post


Link to post
Share on other sites
  • 0

Bonjour à tous,

Comment se passe la mise en place de ce patch "prix unitaire" sur Prestashop 1.4 ?
La question va se poser rapidement pour pas mal de gens, et ils vont tous atterir ici !

Depuis la 1.3, le contenu de product.php a beaucoup changé, du coup j'ai peur de passer 3 jours à patauger dans les fichiers PHP à la recherche des justes emplacements pour mettre en place ce patch salvateur... ( Qui n'a hélas pas été mis en place pour la 1.4... Vivement la 1.5 ? )

Je m'occupe d'un site de produits alimentaires sur lequel il me faut impérativement un prix unitaire fiable, qui ne se mette pas à faire le foufou quand un produit existe en plusieurs déclinaisons, sous peine que je finisse en cavale ou dans un cachot (cf. les lois de 2008, je force un peu le trait) : sans vouloir vous mettre la pression, ce patch et vous autres êtes le SEUL recours qui semble exister, rien que ça !

Hedrad et Broceliande, le point que vous avez soulevé est-il la seule difficulté d'adaptation ? Comment s'est finie la mise en place pour toi, Hedrad ?

Merci d'avance !

Share this post


Link to post
Share on other sites
  • 0

...Et le javascript ?

Ca a l'air 1 peu trop simple pour être vrai, mais ça éviterait de toucher au PHP, non ?
Après tout, les internautes n'activant pas le JS ne peuvent de toute façon pas utiliser une boutique Prestashop, il me semble !

L'algo pourrait ressembler à ça :

si le produit existe en plusieurs déclinaisons,
alors : extraire de la page le poids en Kg/volume en L + le prix TTC ,
afficher après calcul le prix unitaire correct arrondi au centime.
(sinon : on peut utiliser la fonction prix unitaire dispo en BO, le script ne touche à rien.)

Share this post


Link to post
Share on other sites
  • 0

Rom soul ,
en fait je n'ai ici fourni qu'une methode d'override globale , et je n'ai personnellement pas intégré ce patch.
Je ne peux pas donc te répondre concernant son intégration.

A certains de mes clients j'ai fourni, de memoire, une solution différente 100% modulaire , adaptée au besoin précis (mètres linéaires etc )
Comme tous les produits n'ont pas nécessairement besoin d'une indication de prix unitaire, et comme tous n'ont pas nécessairement la même unité (ex : ml et m² ) , ils ont juste une petite admin distincte leur permettant d'assigner ainsi une unité et un coefficient aux produits concernés...
L'approche javascript est pas bête non plus , mais moins copine avec les tables et bdd à moins de coder les unités en dur dans le js , ce qui ne répond pas forcément à tous les produits d'un même site.

Share this post


Link to post
Share on other sites
  • 0

Merci Broceliande de répondre si vite,

méthode d'override bien notée, et pour mon projet je vais donner sa chance à la solution javascript, ça a l'air + simple !

Après tout si le prix et la quantité figurent sur la page, on doit bien pouvoir les récupérer et en faire une bonne vieille division !
Mais effectivement le JS n'ayant accès qu'au HTML final de la page, et pas aux infos BD, cette solution risque d'être précaire car dépendante des divers templates et intitulés des déclinaisons en BO... On va voir ça.

Share this post


Link to post
Share on other sites
  • 0

Hello !

Petite visite rapide sur ce sujet fort intéressant ... (malheureusement pas récent) !

Regardez ce qu'on peut faire avec un module tel que ComparaME (en test actuellement ici), un tout nouveau module qui se présente sous forme d'un onglet de la fiche produit et qui permet d'effectuer automatiquement un calcul de prix au kilo (ou litre) de l'article et qui le compare le prix (en % et valeur absolue) et qui le classe avec des sites concurrents... Bien pratique pour montrer clairement à vos clients que vous étés bien placé !

Pour les sites qui vendent des produits où la notion de poids/volume est importante tel que le secteur alimentaire, on ne met pas assez en avant un bon prix alors qu'il est finalement compétitif même face à des sites qui ont plus de visibilité ... Et souvent cette différence n'est pas visible facilement car c'est au niveau du prix au kilo que la différence apparaît réellement !

44733_8NXj0g3FugAFG4IIKwTc_t

Share this post


Link to post
Share on other sites
  • 0

Joli site ton épicerie basque !
... Et sacré module en perspective, mais la page que tu linkes ne montre pas clairement si le module résoud notre problème de prix unitaire :
actuellement Prestashop 1.4 ne gère pas proprement ce PU dès qu'il existe des déclinaisons : le PU augmente systématiquement avec la quantité vu que Prestashop ne tient pas compte pour le calculer de l'augmentation de la quantité, seulement de celle du prix TTC ...

Ou alors j'ai loupé un truc dans le back-office ? ça m'étonne qu'on ne soit pas plus nombreux à avoir ce problème : toutes les boutiques faisant de l'alimentaire sont concernées, mine de rien !

Share this post


Link to post
Share on other sites
  • 0

Merci Rom !

Pour le probleme des declinaisons c'est effectivement un bon casse-tete !
Sinon vous pouvez voir du coté d'une edition spéciale de Presta German Edition ou figure la notion de prix au kilo.

http://www.homepage-community.de/ecommerce_eigener_onlineshop/prestashop_baseprice_modul_grundpreis-t599.0.html
http://www.prestashop-deutschland.de/prestashop-modul-baseprice-grundpreis-nach-pangv/490.html

Share this post


Link to post
Share on other sites
  • 0
Merci Rom !

Pour le probleme des declinaisons c'est effectivement un bon casse-tete !
Sinon vous pouvez voir du coté d'une edition spéciale de Presta German Edition ou figure la notion de prix au kilo.

http://www.homepage-community.de/ecommerce_eigener_onlineshop/prestashop_baseprice_modul_grundpreis-t599.0.html
http://www.prestashop-deutschland.de/prestashop-modul-baseprice-grundpreis-nach-pangv/490.html


Ben justement , ça me semble pas si compliqué que ça en fait , compte tenu qu'on connais toujours le prix final , et qu'il suffit d'avoir la logique inverse , je m'explique :

J'ai traîté ce type de demande deux ou trois fois au moins.
Chaque fois la première idée du client était de pouvoir avoir un prix unitaire en guise de prix et trouver une méthode 'savante' disons pour que le prix final corresponde au prix d'un lot, par exemple , ou d'un conditionnement.

Le truc c'est que presta ne permet pas d'avoir des quantité décimales, et c'est pas un mal je dirais ...

Comme ce qui est obligatoire, c'est l'affichage du prix unitaire, et qu'au final le web marchand achete et vends presque toujours des lots indivisibles, l'approche est donc de partir du prix de chaque lot ou article , de traiter les déclinaisons et prix dégressifs comme bon nous semble, et d'avoir simplement une correspondance quantitative , du rapport unitaire, et l'unité souhaitée (pour affichage)

Exemple : j'ai un lot de lattes de parquet de xxx m² que je vends 100€
Un module me permet de dire que le prix d'un lot sur ce produit est un prix au m²
Un autre champ me permet d'indiquer qu'une unité de lot correspond à xxx m²

En front office , la partie rendu du module a tous les éléments en main pour calculer et afficher, si et seulement si les champs existent pour ce produits , une phrase du type : 'Soit xx,xx € au m²' , et ce quelque soit le prix final ou la déclinaison , puisque c'est justement de ce prix final que l'on repart pour le calcul.

La règlementation est respectée , et la gestion des lots ou des conditionnements , tarifs degressifs , etc ,en est facilitée, puisqu'on conserve toutes les fonctionnalités native .

Côté achat , on achète des quantités indivisibles , sans aucune gestion particulière.

La méthode s'adapte à toute sorte d'unité , puisqu'on utilise dans tous les cas un coeficient unique pour un produit.

Au final on a un module somme toute plutôt simple à coder.

Il reste simplement à expliquer au web marchand en quoi l'approche est plus simple et plus avantageuse . Ce qui n'est pas compliqué non plus

Share this post


Link to post
Share on other sites
  • 0

@Ludo: Je ne parle pas allemand :[ ... ça y est, je regrette d'avoir choisi Espagnol en LV2 ! Si tu as un équivalent de ce lien en English ou Espanol, je prends !

@Brocéliande : ta technique consiste à utiliser en BO le champs prix (HT ou TTC) pour y stocker le PU (prix unitaire), puis à jouer sur les quantités pour proposer des baisses de prix unitaires, c'est bien ça ? C'est bien pensé, mais est-ce applicable aux boutiques dans lesquelles la commande ne peut se résumer à une quantité de tel article ?

Je m'explique par un exemple, sur une boutique d'épicerie fine imaginaire (mais plus pour longtemps).
Si un client veut 1 Kg de mon pâté aux truffes, ça ne me suffit pas pour lui dire combien il me doit.
Parce que mon pâté existe en boîtes de 100, 200 et 500g ; et que sa commande sera moins chère s'il prend 2 fois 500g que 10 fois 100g !

En BD, je crée un seul article (vu que les ingrédients, le descriptif etc. sont les mêmes pour les 3 boîtes) et je propose mon article en 3 déclinaisons de poids: 100g/200g/500g. L'idée étant que la boîte de 500g revient moins chère du Kg que celle de 100g, sauf que le PU calculé par Prestashop buggue et va en augmentant .

Si la technique que tu évoques reste valable dans ces cas-là, peux-tu donner un peu + d'infos ?

Share this post


Link to post
Share on other sites
  • 0

Une solution pour "maitriser" le prix unitaire dans les déclinaisons sous Prestashop 1.4

Ca y est, j'ai trouvé quels fichiers modifier pour afficher correctement mes PU (prix unitaires) pour les produits de type "Ma boîte de pâté aux truffes" : déclinée en 3 versions :

- boîte de 100g à 10€ - soit 100€/Kg

- boîte de 200g à 15€ - soit 75€/Kg

- boîte de 500g à 30€ - soit 60€/Kg (notez les prix dégressifs)

J'avais beau remplir avec attention les infos en BO, le PU calculé n'était pas correct.... Je n'ai toujours pas compris d'ailleurs par quel savant calcul mon cher Prestashop arrivait aux résultats proposés... Pas grave, on va continuer quand même !

La solution consiste en BO à laisser dans la page principale du produit le prix de vente à 0€ et le PU à 0€/Kg
Pour chaque déclinaison du produit , la différence de prix à définir sera du coup le prix de la déclinaison, idem pour la différence de poids et pour la différence de PU. (technique fortement inspirée par ShagShag sur ce forum, merci à lui) NB: pour nos histoires de PU il suffit de laisser le PU à 0, mais je vous encourage à le faire aussi pour le prix...ça vous épargnera du calcul mental !

Il y a ensuite 2 fichiers à retoucher pour que Prestashop affiche le PU malgré ces valeurs initiales à 0 :

Dans themes/mon_theme_perso/product.tpl ligne 294 environ :
transformer l'affichage du prix unitaire qui ressemble à ça :

{if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
   {math equation="pprice / punit_price"  pprice=$productPrice  punit_price=$product->unit_price_ratio assign=unit_price}

{convertPrice price=$unit_price} {l s='per'} {$product->unity|escape:'htmlall':'UTF-8'}
{/if}



en ça : (on affiche le PU même s'il vaut 0 dans le cas où existent des déclinaisons)

{if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
   {math equation="pprice / punit_price"  pprice=$productPrice  punit_price=$product->unit_price_ratio assign=unit_price}

{convertPrice price=$unit_price} {l s='per'} {$product->unity|escape:'htmlall':'UTF-8'}
{elseif isset($groups) && !empty($product->unity) && $product->unit_price_ratio == 0.000000}

{l s='xxx'} {l s='per'} {$product->unity|escape:'htmlall':'UTF-8'}
{/if}



Dans themes/mon_theme_perso/js/product.js ligne 333 environ :
transformer la répercussion du prix unitaire qui ressemble à ça :

if (productUnitPriceRatio > 0 )
{    newUnitPrice = (productPrice / parseFloat(productUnitPriceRatio)) + selectedCombination['unit_price'];
   $('#unit_price_display').text(formatCurrency(newUnitPrice, currencyFormat, currencySign, currencyBlank));
}



en ça : (on calcule le PU de la déclinaison si il est à 0 pour le produit)

if (productUnitPriceRatio > 0 )
{    newUnitPrice = (productPrice / parseFloat(productUnitPriceRatio)) + selectedCombination['unit_price'];
   $('#unit_price_display').text(formatCurrency(newUnitPrice, currencyFormat, currencySign, currencyBlank));
}
else if (productUnitPriceRatio == 0 )
{    newUnitPrice = selectedCombination['unit_price'];
   $('#unit_price_display').text(formatCurrency(newUnitPrice, currencyFormat, currencySign, currencyBlank));
}

Share this post


Link to post
Share on other sites
  • 0

Bonjour à tous,

J'écris ici car je cherche depuis un bon bout de temps une solution à mon problème.

En fait j'aimerais afficher un prix unitaire au mètre carré pour des produits comme rouleaux de tapis.

J'utilise donc le champ prix à l'unité dans l'onglet infos de mon produit. Le problème est que lorsque j'ajoute une déclinaison en augmentant le prix du rouleau, le prix à l'unité augmente lui aussi, même si je laisse "impact sur le prix à l'unité" à "auncun". J'ai parcouru rapidement ce post qui me semblait quasi similaire à ce que je recherche. Mais sans trouver de réponse.

Quelqu'un d'aimable aurait-il la solution ?

Merci beaucoup.

[EDIT] : Ok j'ai rien dis, il suffisait de changer l'ID "unit_price_display" en autre chose pour que le JS ne s'applique pas.. C'est lui qui calculait (je ne sais pas trop comment) le prix.

Share this post


Link to post
Share on other sites
  • 0

Salut Irina231,

J'ai eu exactement le même souci que toi... avec des Kg !
Si tu utilises Prestashop 1.4, je t'encourage à mettre en place la solution que j'ai trouvée : elle n'est pas "parfaite" mais en attendant que l'équipe de Prestashop supprime ce bug étrange sur les PU, elle fonctionne.

Tout est expliqué dans mon message ci-dessus (16mai) : il y a juste quelques lignes à modifier dans 2 fichiers : product.tpl et product.js : pas besoin d'être un expert - je suis moi-même assez peu doué :) - il suffit de copier-coller les bouts de code et de vérifier que ça marche.
Au cas ou, fais au préalable une copie des 2 fichiers à modifier, que tu pourras restaurer si jamais la modif devait ne pas fonctionner chez toi... Comme ça, pas de risque !

Le truc qui n'est pas parfait, c'est que cette modif t'oblige, pour que le prix unitaire affiché soit correct, à renseigner les infos en BO d'une certaine façon, c'est aussi expliqué dans mon message.

Dis-nous ce que ça donne !

Share this post


Link to post
Share on other sites
  • 0

Salut Rom Soul,

J'ai essayé ta méthode, il me semble que cela ne fonctionne pas. Du moins ce n'est pas ce que j'essayais de mettre en place. J'ai juste désactivé le javascript qui agissait sur mon prix unitaire, puisque je n'avais pas besoin qu'il recalcule mes prix unitaire. Merci quand même, bonne soirée

Share this post


Link to post
Share on other sites
  • 0

Ca marche très bien !

Merci Rom Soul !

 

C'est une solution provisoire très facile à mettre en place en attendant que la motif soit faite.

(1 an est passé depuis ton poste et rien n'a évolué... si ?)

 

Pour parfaire le tout, il faudrait virer "augmenter/diminuer" dans le BO..

Share this post


Link to post
Share on other sites
  • 0

Bonjour à tous,

 

je dois installer ce patch sur une version 1.3.6 mais je ne vois comment faire avec le fichier .diff, je ne trouve pas les lignes correspondantes...

Quelqu'un à t'il déjà fait cette mise à jour sur cette version de Prestashop ?

 

j'ai trouvé tout ce qu'il fallait en page 4 de ce post.

Edited by erehcab

Share this post


Link to post
Share on other sites
  • 0

MERCI ROm SOul !!

Ton explication super claire fonctionne très bien même sur la version 1.5.

En plus cette solution est beaucoup plus intéressante et pratique que la version de base qui consiste à augmenter ou diminuer le prix, le poids et surtout le poids au kg (là c'est du grand n'importe quoi) en fonction des déclinaisons.

Encore merci Rom Soul !

Share this post


Link to post
Share on other sites
  • 0

Avec plaisir Jullover ! Je n'ai fait qu'améliorer un peu la solution que d'autres avaient trouvé... Chacun amène sa pierre a l'édifice ^_^

 

J'aurais pourtant mis ma main au feu l'an dernier que ce bug serait rectifié en 1.5 ... Pour ma part je m'en tiens à la 1.4.8 pour l'instant, je laisse les autres essuyer un peu les plâtres !

Share this post


Link to post
Share on other sites
  • 0

Le système est bien, mais...

lorsque dans prix spécifique, j'attribue un prix de vente du produit HT pour un groupe et pour une déclinaison, le prix dans la fiche produit n'est pas le bon. Il ajoute le prix du produit que je viens rentrer au prix de la déclinaison concernée...

 

par exemple si j'ai rentré comme prix spécifique 10 euros et que ma déclinaison est de 12 euros, alors il va afficher 22 euros au lieu d'afficher 10 euros...

 

Ce qui est dingue c'est que dans la "product-list" et dans le panier, les prix sont corrects...

Dans la product-list (product_list.tpl) et dans le panier(shopping-cart-product-libe.tpl) le prix est appelé de cette façon :

{convertPrice price=$product.price}

alors que dans la fiche produit (product.tpl) le prix est appelé avec :

{convertPrice price=$productPrice} :

 

En changeant l'un par l'autre, ça plante, évidemment...

product.tpl a l'air de faire appel à product.js pour afficher le prix,

mais je ne sais pas quelle ligne modifier pour lui dire quel est le bon prix...

 

AU SECOUR !!

Edited by jullover

Share this post


Link to post
Share on other sites
  • 0

Pour prestashop version 1.5.6.1, ça marche ou pas ? Je galère, je ne pige pas comment sont calculés les prix dans les déclinaisons dans "Impact sur le prix à l'unité".

Quelqu'un peut-il m'éclairer je vous prie.

 

Cordialement.

 

MErci Olabong

Share this post


Link to post
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

×