Vote to Improve PrestaShop

PrestaShop Forum: Build a free online shop. Count on the Community!

The best place in the world to ask questions about PrestaShop and get advice from our passionate community!

PrestaShop Forum: Build a free online shop. Count on the Community!

Jump to content

Photo

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


  • Please log in to reply
114 replies to this topic
emraud

    PrestaShop Apprentice

  • Members
  • PipPip
  • 304 posts

Posted 20 May 2010 - 09:15 PM

Cette adaptation, peut certainement marcher avec $supplier_reference si vous utilisé ean13 ou location
Eco MateRiAUx Durables
ps 1.2.5 - actualisation en cours

jilham

    PrestaShop Newbie

  • Members
  • Pip
  • 10 posts

Posted 30 August 2010 - 08:01 AM

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?

Jean-Bruno

    PrestaShop Fanatic

  • Moderators
  • 1400 posts

Posted 30 August 2010 - 08:50 AM

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!='' }<p class="price-weight"><span id="priceweight_display"> {convertPrice price=$product->getPrice(true, $smarty.const.NULL, 2)/$feature.value} </span>TTC le m²</p>{/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+
Morgao.com travaux pratiques en communication et technologies 2.0

Tramber

    PrestaShop Apprentice

  • Members
  • PipPip
  • 61 posts

Posted 27 September 2010 - 11:26 AM

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.

Jean-Bruno

    PrestaShop Fanatic

  • Moderators
  • 1400 posts

Posted 27 September 2010 - 11:48 AM

Tu es en création ou déjà en prod ? Parce que si tu es en créa cette fonctionnalité est présente dans la SVN, si si
a+
Morgao.com travaux pratiques en communication et technologies 2.0

Tramber

    PrestaShop Apprentice

  • Members
  • PipPip
  • 61 posts

Posted 27 September 2010 - 12:44 PM

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.

Jean-Bruno

    PrestaShop Fanatic

  • Moderators
  • 1400 posts

Posted 27 September 2010 - 02:39 PM

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'] != ''): ?><p class="price-weight"><span id="priceweight_display"> <?php echo Product::convertPrice(array('price' => $this->_tpl_vars['product']->getPrice(true,@NULL,2)/$this->_tpl_vars['feature']['value']), $this);?> </span>TTC le m²</p><?php endif; ?>      <?php endforeach; endif; unset($_from); ?>  <?php endif; ?>  <!-- FIN METRAGE -->

Morgao.com travaux pratiques en communication et technologies 2.0

spacespy

    PrestaShop Newbie

  • Members
  • Pip
  • 3 posts

Posted 29 November 2010 - 03:03 PM

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

Tramber

    PrestaShop Apprentice

  • Members
  • PipPip
  • 61 posts

Posted 29 November 2010 - 03:21 PM

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...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.

spacespy

    PrestaShop Newbie

  • Members
  • Pip
  • 3 posts

Posted 29 November 2010 - 05:06 PM

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

Tramber

    PrestaShop Apprentice

  • Members
  • PipPip
  • 61 posts

Posted 29 November 2010 - 06:06 PM

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é.

spacespy

    PrestaShop Newbie

  • Members
  • Pip
  • 3 posts

Posted 30 November 2010 - 03:11 PM

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 )

Hedrad

    PrestaShop Apprentice

  • Members
  • PipPip
  • 468 posts

Posted 22 March 2011 - 01:06 PM

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...

Broceliande

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1658 posts

Posted 22 March 2011 - 05:09 PM

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...     }}

Développeur web, php, mysql , javascript, c#, modules prestashop ...
http://www.presta-broceliande.fr
Modules et fonctionnalités sur mesure.

Hedrad

    PrestaShop Apprentice

  • Members
  • PipPip
  • 468 posts

Posted 23 March 2011 - 07:44 AM

Merci, c'est plus clair.

Rom Soul

    PrestaShop Apprentice

  • Members
  • PipPip
  • 107 posts

Posted 05 May 2011 - 01:39 PM

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.

Broceliande

    PrestaShop Fanatic

  • Members
  • PipPipPipPip
  • 1658 posts

Posted 05 May 2011 - 01:15 PM

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.
Développeur web, php, mysql , javascript, c#, modules prestashop ...
http://www.presta-broceliande.fr
Modules et fonctionnalités sur mesure.

Rom Soul

    PrestaShop Apprentice

  • Members
  • PipPip
  • 107 posts

Posted 05 May 2011 - 01:07 PM

...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.)

Rom Soul

    PrestaShop Apprentice

  • Members
  • PipPip
  • 107 posts

Posted 05 May 2011 - 12:55 PM

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 !

ludo

    PrestaShop Addict

  • Members
  • PipPipPip
  • 846 posts

Posted 06 May 2011 - 11:55 PM

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 !

Attached Files


Posted Image
Posted Image
1er Annuaire Prestashop : 100% Prestashop
Shop Modules Prestashop : PrestaToolBox
Blog eCommerce : eco 2.0




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users