Personnaliser bon de livraison pour les cadeaux

Prestashop
1.6

Difficulté
1/4

Durée
10′

 

Lorsque vous activez l’option “Emballage cadeau” dans Prestashop, le bon de livraison généré affiche le mode de paiement et le montant. Ce qui pour un cadeau n’est pas du meilleur effet vous en conviendrez 🙁

personnaliser le bon de livraison dans Prestashop 1.6
Ce petit tuto vous explique comment personnaliser le template du bon de livraison, pour ne pas afficher cette information, si votre client a coché l’option Emballage cadeau.

Le fichier à modifier est dans :

themes/nomdevotretheme/pdf/delivery-slip.payment-tab.tpl
  • si le dossier n’existe pas, créez le dossier themes/nomdevotretheme/pdf/
  • et copiez le fichier original qui se trouve dans pdf/delivery-slip.payment-tab.tpl

Ensuite éditez le fichier avec un éditeur de texte (Notepad, Wordpad, Textedit…) et remplacez le code suivant :

<table id="payment-tab" width="100%" cellpadding="4" cellspacing="0">
  <tr>
    <td class="payment center small grey bold" width="44%">{l s='Payment Method' pdf='true'}</td>
    <td class="payment left white" width="56%">
      <table width="100%" border="0">
     {foreach from=$order_invoice->getOrderPaymentCollection() item=payment}
        <tr>
          <td class="right small">{$payment->payment_method}</td>
          <td class="right small">{displayPrice currency=$payment->id_currency price=$payment->amount}</td>
        </tr>
     {foreachelse}
        <tr>
         <td>{l s='No payment' pdf='true'}</td>
        </tr>
     {/foreach}
      </table>
    </td>
  </tr>
</table>

par :

{if $order->gift!=1}
<table id="payment-tab" width="100%" cellpadding="4" cellspacing="0">
  <tr>
    <td class="payment center small grey bold" width="44%">{l s='Payment Method' pdf='true'}</td>
    <td class="payment left white" width="56%">
      <table width="100%" border="0">
     {foreach from=$order_invoice->getOrderPaymentCollection() item=payment}
        <tr>
          <td class="right small">{$payment->payment_method}</td>
          <td class="right small">{displayPrice currency=$payment->id_currency price=$payment->amount}</td>
        </tr>
     {foreachelse}
        <tr>
         <td>{l s='No payment' pdf='true'}</td>
        </tr>
     {/foreach}
      </table>
    </td>
  </tr>
</table>
{/if}

 

Et voilà !

En bonus, vous pouvez afficher sur le bon de commande que le client a demandé un emballage cadeau, pratique pour le préparateur 🙂

Ajouter le code suivant à la fin du même fichier :

{if $order->gift==1}
<p><b>{l s='GIFT WRAPPING' pdf='true'}</b></p>
{/if}

Puis traduire le texte dans le backoffice “Localisation / Traductions /

Traduction des textes des templates PDF dans Prestashop 1.6

19 réactions au sujet de « Personnaliser bon de livraison pour les cadeaux »

    1. Bonjour, je suppose que vous utilisez un module pour les codes barres. Dans ce cas il faut analyser en fonction du module pas d’autres solutions, on est dans du spécifique.

      1. Non je n’utilise pas de module pour les codes barres, je rentre les codes barres de mes fournisseurs dans les déclinaisons de chaque fiche produit. Je ne pense pas que ce soit du spécifique ? Je me disais qu’un module qui permettrait de mettre ce dont on a vraiment besoin pour bien préparer les commandes seraient super utile à beaucoup de e-commercants utilisant Prestashop. Des infos comme le code barre, la ref fournisseurs, la photo, l’emplacement dans le stock, l’emballage cadeau…. Je suis même étonnée que ce ne soit natif dans Prestashop vu l’importance que ça a pour livrer les bons produits aux clients finaux.
        (désolée pour mon retour tardif je viens juste de voir votre message)

        1. Bonne idée, mais compliqué de faire un module paramétrable, car on touche aux templates PDF qui peuvent déjà être personnalisés dans un thème 🙁 En plus toutes les informations dont vous parlez ne sont pas forcément disponibles dans le template, ce qui oblige donc à modifier également les classes et/ou controller pdf par des override. C’est tout de suite plus compliqué !
          Par exemple nous avons réalisé pou un client un template spécifique avec la marque, la ref fournisseur et trié par marque pour faciliter le travail du logisticien, et cela a demandé du développement spécifique comme je viens d’indiquer. Si vous avez un besoin spécifique n’hésitez pas à nous contacter 🙂

  1. Bonjour,
    Je souhaiterais ajouter la photo des produits dans mes bons de livraisons car nous avons plus de 500 000 produits et pas frocément toutes les photos. En affichant les photos, cela permettra au préparateur de commande de prendre la photo du produit pour l’ajouter sur le site.
    Pour l’instant j’ai réussi à ajouter une colonne dans mon bon de commande pour les photos, mais je n’arrive pas à récupérer la photo.
    Un peu d’aide serait la bienvenue.
    D’avance merci pour vos réponse.

    1. Julien, il s’agit d’une configuration de base de Prestashop. Pour afficher les images des produits dans le bon de livraison, il suffit dans le backoffice de Prestashop d’aller dans « Commandes / Bons de livraison » et d’activer l’option « Afficher l’image du produit » 🙂

  2. Merci j’ai réussi.
    Une seule chose bizarre persiste, je ne parviens pas à centrer l’image et elle reste systématiquement bloquée sur la première partie de la page A4 sans jamais dépasser le centre.
    Mais à ce stade c’est bien pour un BL.

        1. Aie 🙁 Bon après analyse en fait le template delivery-slip.payment-tab.tpl est appelé dans une colonne de tableau qui ne fait que 7 / 12.
          Alors l’astuce est de déplacer le code pour l’image dans le template de base delevrey-slip.tpl. Tu le recopies dans ton themes/tontheme/pdf/ et tu ajoutes en ligne 76 le code suivant :

          {if $order->gift==0}
          <table width="100%" cellpadding="0" cellspacing="0">
          	<tr>
          		<td class="center" width="100%">
          			<img src="http://www.comonsoft.com/uploads/images/actualites/nouveau-service-google-tester-site.jpg" width="200" />
          		</td>
          	</tr>
          </table>
          {/if}
          
          
  3. Super ! Merci beaucoup, ça marche sur mon site.
    Dans la même logique j’aimerais ajouter en suivant l’email fourni par le client. Non pas dans l’adresse mais également dans le fichier themes/nomdevotretheme/pdf/delivery-slip.payment-tab.tpl.
    En fait j’utilise le BL comme bon de préparation et cette donnée est importante puisque je l’utilise pour saisir les adresses dans Coliship. J’ai bien vu que l’email est dans la table customer mais je n’y arrive pas. Une solution ? Merci d’avance.

    1. Hélas Lili l’objet client n’est pas disponible dans smarty pour le bon le livraison 🙁 ça va être un petit peu plus complexe, il faut faire un override de la classe classes/pdf/HTMLTemplateDeliverySlip.php et de la méthode public function getContent() pour ajouter la variable smarty de l’email du client.
      Pour récupérer l’email il faut créer un objet client

      $customer = new Customer((int)$this->order->id_customer);

      et ajouter l’email dans les varaibles smarty

      'customer_email' => $customer->email

      et après dans le template PDF tu pourras l’afficher avec

      {$customer_email}

      Voilà

    1. En fait c’était simple, il suffisait de rajouter une ligne de ce type et ca donne :
      IL faudra aussi rajouter dans la traduction le mention appropriée.
      {if $order->gift==1}
      {l s=’GIFT WRAPPING’ pdf=’true’}
      {l s=’GIFT MESSAGE’ pdf=’true’}{$order->gift_message}
      {/if}

      Reste maintenant à trouver le code qui permettra d’ajouter une image au milieu des PDF quand il n’y a pas de cadeau pour promouvoir une publicité.

      1. Rien de plus simple pour la pub dans le PDF sous forme d’image :

        {if $order->gift==1}
        <p>
        {l s='EMBALLAGE CADEAU' pdf='true'}
        </p>
        {else}
        <p style="text-align:center"><img src="http://www.comonsoft.com/uploads/images/actualites/nouveau-service-google-tester-site.jpg" width="200" /></p>
        {/if}
        {if ($order->gift_message|strlen)>1}
        <p><span class="grey"> <b>{l s='Message' pdf='true'}</b> </span><br />
        {$order->gift_message|nl2br}</p>
        {/if}
        
    2. Quelques lignes de plus :

      {if $order->gift==1}
      <p>
      {l s='EMBALLAGE CADEAU' pdf='true'}
      </p>
      {/if}
      {if ($order->gift_message|strlen)>1}
      <p><span class="grey"> <b>{l s='Message' pdf='true'}</b> </span><br />
      {$order->gift_message|nl2br}</p>
      {/if}
      

      Et voilà 🙂

      1. Merci pour ces éléments,
        Ca m’a permis de corriger le souci que je rencontrais depuis un bon moment : avoir le message sur le bon de livraison sans avoir recours à la base de données.
        Dommage que ce n’aie pas été corrigé dans les versions officielles.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.