Jump to content

[Résolu] Comment afficher le champ commentaire client sur les bons de livraison ?


kimzey

Recommended Posts

Bonsoir,

delivery-slip.tpl (dossier pdf) ligne 101 environ

            {if isset($message)}
            <b>{l s='Message:' pdf='true'}</b><br />
            {$message}<br />
            <br />
            {/if}

HTMLTemplateDeliverySlip.php (dossier classes > pdf) ligne 64 environ

        //add Message        
        $message = $this->order->getFirstMessage();
        
        $carrier = new Carrier($this->order->id_carrier);
        $carrier->name = ($carrier->name == '0' ? Configuration::get('PS_SHOP_NAME') : $carrier->name);
        $this->smarty->assign(array(
            'order' => $this->order,
            'order_details' => $this->order_invoice->getProducts(),
            'delivery_address' => $formatted_delivery_address,
            'invoice_address' => $formatted_invoice_address,
            'order_invoice' => $this->order_invoice,
            'carrier' => $carrier,
            'message' => $message,
        ));

Résultat

post-459329-0-12037400-1379437321_thumb.png

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Merci indesign, très sympa!

 

J'ai aussi vu dans ton exemple que tu as rajouté le transporteur, cela m'intéresse également donc j'ai rajoute les 3 lignes de ton exemple concernant le "Carrier" dans ma classe HTMLTemplateDeliverySlip.php et dans delivery-slip.tpl j'ai rajouté :

<b>{l s='Transporteur :' pdf='true'}</b><br />
{$carrier}<br />

Mais cela ne fonctionne pas, est ce que je m'y suis mal pris?

Link to comment
Share on other sites

En m'aidant de la classe de la facture et d'éléments trouvés sur le net j'ai réussi à ajouter l'adresse e-mail finalement :

 

delivery-slip.tpl

{$customer_email}

HTMLTemplateDeliverySlip.php

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

$this->smarty->assign(array(
	'order' => $this->order,
	'order_id' => $this->order_invoice->id_order,
	'order_details' => $this->order_invoice->getProducts(),
	'delivery_address' => $formatted_delivery_address,
	'invoice_address' => $formatted_invoice_address,
	'order_invoice' => $this->order_invoice,
	'carrier' => $carrier,
	'message' => $message,
	'customer_email' => $customer_email
));

Manque plus que le transporteur et ce sera parfait  :)

Edited by Trephisto (see edit history)
  • Like 1
Link to comment
Share on other sites

Bonjour Trephisto,

delivery-slip.tpl (dossier pdf) ligne 101 environ

            {if isset($message)}
            <b>{l s='Message:' pdf='true'}</b><br />
            {$message}<br />
            <br />
            {/if}
            {if isset($customer_email)}
            <b>{l s='Customer email:' pdf='true'}</b><br />
            {$customer_email}<br />
            <br />
            {/if}

HTMLTemplateDeliverySlip.php (dossier classes > pdf) ligne 52 environ

    public function getContent()
    {
        $delivery_address = new Address((int)$this->order->id_address_delivery);
        $formatted_delivery_address = AddressFormat::generateAddress($delivery_address, array(), '<br />', ' ');
        $formatted_invoice_address = '';

        if ($this->order->id_address_delivery != $this->order->id_address_invoice)
        {
            $invoice_address = new Address((int)$this->order->id_address_invoice);
            $formatted_invoice_address = AddressFormat::generateAddress($invoice_address, array(), '<br />', ' ');
        }

        $carrier = new Carrier($this->order->id_carrier);
        $carrier->name = ($carrier->name == '0' ? Configuration::get('PS_SHOP_NAME') : $carrier->name);
        //add Message        
        $message = $this->order->getFirstMessage();
        //add Customer email
        $customer = new Customer((int)$this->order->id_customer);
        $customer_email = $customer->email;
        $this->smarty->assign(array(
            'order' => $this->order,
            'order_details' => $this->order_invoice->getProducts(),
            'delivery_address' => $formatted_delivery_address,
            'invoice_address' => $formatted_invoice_address,
            'order_invoice' => $this->order_invoice,
            'carrier' => $carrier,
            'message' => $message,
            'customer_email' => $customer_email,            
        ));

        return $this->smarty->fetch($this->getTemplate('delivery-slip'));
    }

post-459329-0-96916100-1379936792_thumb.png

 

PS

Il faut traduire les champs

post-459329-0-96916100-1379936792_thumb.png

 

post-459329-0-20518200-1379936846_thumb.png

Edited by indesign (see edit history)
Link to comment
Share on other sites

  • 3 years later...

Bonjour, 

 

Après 3 ans je me permets de ré-ouvrir ce sujet... 

 

Je cherche à ajouter dans le BL le champs "message client" pour faciliter la vie de notre logisticien et surtout satisfaire les demandes de nos clients. 

 

J'ai appliqué les instructions ci-dessous, mais malheureusement j'ai une erreur 500 lorsque que je veux télécharger le BL.

 

Quelqu'un aurait une solution ? 

 

Version Prestashop : 1.6.1.4

 

Merci pour vos réponses !  :)

 

 

Bonsoir,

delivery-slip.tpl (dossier pdf) ligne 101 environ

            {if isset($message)}
            <b>{l s='Message:' pdf='true'}</b><br />
            {$message}<br />
            <br />
            {/if}

HTMLTemplateDeliverySlip.php (dossier classes > pdf) ligne 64 environ

        //add Message        
        $message = $this->order->getFirstMessage();
        
        $carrier = new Carrier($this->order->id_carrier);
        $carrier->name = ($carrier->name == '0' ? Configuration::get('PS_SHOP_NAME') : $carrier->name);
        $this->smarty->assign(array(
            'order' => $this->order,
            'order_details' => $this->order_invoice->getProducts(),
            'delivery_address' => $formatted_delivery_address,
            'invoice_address' => $formatted_invoice_address,
            'order_invoice' => $this->order_invoice,
            'carrier' => $carrier,
            'message' => $message,
        ));

Résultat

attachicon.gifmessage.png

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

J'avais appliqué ceci depuis longtemps, et cela fonctionnait très bien sur le 1.6.1.4

Depuis que j'ai fait la mise à jour vers 1.6.1.9, j'ai réappliqué le m^me methode dans mes fichiers comme indiqué ci-dessus mais je n'ai rien qui s'affiche ?

 

Avez-vous une idée ?

 

D'avance Merci.

 

André.
 

Link to comment
Share on other sites

j'ai 1.6.1.7, ça marche bien, n'oublie pas de mettre le code avant le }

 

        // footer informations
        $this->shop = new Shop((int)$this->order->id_shop);
    
    
         //add Message        
        $message = $this->order->getFirstMessage();
        
        $carrier = new Carrier($this->order->id_carrier);
        $carrier->name = ($carrier->name == '0' ? Configuration::get('PS_SHOP_NAME') : $carrier->name);
        $this->smarty->assign(array(
            'order' => $this->order,
            'order_details' => $this->order_invoice->getProducts(),
            'delivery_address' => $formatted_delivery_address,
            'invoice_address' => $formatted_invoice_address,
            'order_invoice' => $this->order_invoice,
            'carrier' => $carrier,
            'message' => $message,
        ));

    }

Link to comment
Share on other sites

  • 2 years later...

Bonjour,

Comme j'ai un peu galéré, je partage ce que j'ai fait pour avoir l'email du client sur le B/L avec un Prestashop 1.6.0, en noir les lignes existantes, en rouges les lignes de codes à ajouter. Et ça marche, ouf! Par contre, pour le message du client, ça ne marchait pas, ça affichait des informations sur le paiement à la place donc j'ai supprimé la partie message et ça me va.

Voilà il ne me reste plus qu'à trouver un moyen d'afficher l'EAN des déclinaisons sur le B/L. En espérant que ce post sera utile à quelqu'un.

Fichier HTMLTemplateDeliverySlip.php (dossier classes > pdf)

// footer informations
        $this->shop = new Shop((int)$this->order->id_shop);

        //add Customer email
        $customer = new Customer((int)$this->order->id_customer);
        $customer_email = $customer->email;
        $this->smarty->assign(array(
            'order' => $this->order,
            'order_details' => $this->order_invoice->getProducts(),
            'delivery_address' => $formatted_delivery_address,
            'invoice_address' => $formatted_invoice_address,
            'order_invoice' => $this->order_invoice,
            'carrier' => $carrier,
            'customer_email' => $customer_email,            
        ));

    }

    /**
     * Returns the template's HTML content

 

Fichier delivery-slip.tpl (dossier pdf)

{if isset($carrier)}
            <b>{l s='Carrier:' pdf='true'}</b><br />
            {$carrier->name}<br />
            <br />
            {/if}
            {if isset($customer_email)}
                        <b>{l s='Customer email:' pdf='true'}</b><br />
                        {$customer_email}<br />
                        <br />
                        {/if}

            
            <!-- / CUSTOMER INFORMATIONS -->

 

Link to comment
Share on other sites

  • 5 months later...

Bonjour

Je déterre le topic car ma demande est presque similaire et je ne suis pas certain qu'un nouveau post soit utile, cela sera plus en complément après réponse

Je voudrais faire apparaitre sur mon bon de livraison la référence fournisseur de chaque produit, j'utilise cette mention plus pour des infos de préparation (emplacement et/ou mention complémentaire....des infos internes pour le préparateur de paquet).

Je suis sous la version 1.6.1.4

Merci de votre aide

Link to comment
Share on other sites

  • 1 year later...

Bonjour,

 

Au cas où ca peut encore aidé, j'avais le même besoin : ajouter la ref fournisseur sur le BL.

Voila comment j'ai fait (désolé pour la mis en forme, je suis débutant prestashop et aussi sur les forums):

Inspiré du post : https://www.prestashop.com/forums/topic/986400-faire-apparaitre-fournisseur-sur-bon-de-livraison/

Dont voici le détail

Pour faire apparaitre le fournisseur dans ton bon de livraison voici les étapes à suivre:

Modifier la method getContent() du  fichier /classes/pdf/HTMLTemplateDeliverySlip.php

 dans le methode getContent vers la ligne 97 Juste aprés ce code :

$order_details = $this->order_invoice->getProducts();

Ajouter ce code 

o    foreach ($order_details as &$order_detail) {

o        $order_detail['supplier_name'] = Supplier::getNameById((int)$order_detail['id_supplier']);

}

Ensuite modifier le fichier /pdf/delivery-slip.product-tab.tpl :

Remplacer l'entête du tableau <thead>....</thead> par ce code :

o    <thead>

o       <tr>

o          <th class="product header small" width="20%">{l s='Reference' pdf='true'}</th>

o          <th class="product header small" width="55%">{l s='Product' pdf='true'}</th>

o          <th class="product header small" width="15%">{l s='Fournisseur' pdf='true'}</th>

o          <th class="product header small" width="10%">{l s='Qty' pdf='true'}</th>

o       </tr>

</thead>

Dans le <tbdoy> juste avant : 

o    <td class="product center">

o       {$order_detail.product_quantity}

</td>

AJouter ce bout de code:

o    <td class="product center">

o       {if empty($order_detail.supplier_name)}

o          ---

o       {else}

o          {$order_detail.supplier_name}

o       {/if}

</td>

Enregistrer et uploader sur votre serveur

 

Mais dans notre cas, pas besoin d’aller chercher le nom du fournisseur car la ref du fournisseur est déjà attachée au produit. Donc pas de modif de la « method getcontent() » (le point 1 ci-dessus).

Donc uniquement faire 2 et 3, en adaptant 2.

Voici ce que ca donne dans le fichier /pdf/delivery-slip.product-tab.tpl

Remplacer l'entête du tableau <thead>....</thead> par ce code :

            <thead>

    <tr>

      <th class="product header small" width="20%">{l s='Reference' pdf='true'}</th>

      <th class="product header small" width="55%">{l s='Product' pdf='true'}</th>

      <th class="product header small" width="15%">{l s='Ref. Fourn.' pdf='true'}</th>

      <th class="product header small" width="10%">{l s='Qty' pdf='true'}</th>

   </tr>

            </thead>

Dans le <tbdoy> juste avant : 

o    <td class="product center">

o       {$order_detail.product_quantity}

</td>

AJouter ce bout de code:

            <td class="product center">

                                                  {if empty($order_detail.product_supplier_reference)}

                                                     ---

                                                  {else}

                                                     {$order_detail.product_supplier_reference}

                                                  {/if}

                                                           </td>

Ca marche !

Link to comment
Share on other sites

il y a 41 minutes, Lolo1402 a dit :

Bonjour,

 

Au cas où ca peut encore aidé, j'avais le même besoin : ajouter la ref fournisseur sur le BL.

Voila comment j'ai fait (désolé pour la mis en forme, je suis débutant prestashop et aussi sur les forums):

Inspiré du post : https://www.prestashop.com/forums/topic/986400-faire-apparaitre-fournisseur-sur-bon-de-livraison/

Dont voici le détail

Pour faire apparaitre le fournisseur dans ton bon de livraison voici les étapes à suivre:

Modifier la method getContent() du  fichier /classes/pdf/HTMLTemplateDeliverySlip.php

 dans le methode getContent vers la ligne 97 Juste aprés ce code :


$order_details = $this->order_invoice->getProducts();

Ajouter ce code 


	foreach ($order_details as &$order_detail) {

	$order_detail['supplier_name'] = Supplier::getNameById((int)$order_detail['id_supplier']);

}

Ensuite modifier le fichier /pdf/delivery-slip.product-tab.tpl :

Remplacer l'entête du tableau <thead>....</thead> par ce code :


    <thead>

       <tr>

          <th class="product header small" width="20%">{l s='Reference' pdf='true'}</th>

          <th class="product header small" width="55%">{l s='Product' pdf='true'}</th>

          <th class="product header small" width="15%">{l s='Fournisseur' pdf='true'}</th>

          <th class="product header small" width="10%">{l s='Qty' pdf='true'}</th>

       </tr>

</thead>

Dans le <tbdoy> juste avant : 


    <td class="product center">

       {$order_detail.product_quantity}

</td>

AJouter ce bout de code:


    <td class="product center">

       {if empty($order_detail.supplier_name)}

          ---

       {else}

          {$order_detail.supplier_name}

       {/if}

</td>

Enregistrer et uploader sur votre serveur

 

Mais dans notre cas, pas besoin d’aller chercher le nom du fournisseur car la ref du fournisseur est déjà attachée au produit. Donc pas de modif de la « method getcontent() » (le point 1 ci-dessus).

Donc uniquement faire 2 et 3, en adaptant 2.

Voici ce que ca donne dans le fichier /pdf/delivery-slip.product-tab.tpl

Remplacer l'entête du tableau <thead>....</thead> par ce code :


            <thead>

    <tr>

      <th class="product header small" width="20%">{l s='Reference' pdf='true'}</th>

      <th class="product header small" width="55%">{l s='Product' pdf='true'}</th>

      <th class="product header small" width="15%">{l s='Ref. Fourn.' pdf='true'}</th>

      <th class="product header small" width="10%">{l s='Qty' pdf='true'}</th>

   </tr>

            </thead>

Dans le <tbdoy> juste avant : 


    <td class="product center">

       {$order_detail.product_quantity}

</td>

AJouter ce bout de code:


    <td class="product center">

        {if empty($order_detail.product_supplier_reference)}

        ---

        {else}

        {$order_detail.product_supplier_reference}

        {/if}

    </td>

Ca marche !

 

il y a 49 minutes, Lolo1402 a dit :

Modifier la method getContent() du  fichier /classes/pdf/HTMLTemplateDeliverySlip.php

Bien entendu il est préférable et même obligatoire de faire une surcharge de cette clasee et non pas de la modifier dans le coeur pusique cela empêchera toute mise à jour et provoquera des difficulté d'analyse pour un intervenant externe si le code provoque une incompatibilité.

Link to comment
Share on other sites

Merci Mediacom pour cette precision. Mais à vrai dire c'est du chinois pour moi.

 

Je me suis inspiré d'un post proposant cette solution, mais pour l'adapter à ma problèmatique, je n'ai pas touché à "la method getcontent()" .

J'ai juste appliqué des modifs au fichier delivery-slip.product-tab.tpl

Donc c'est ok pour toi?

Merci

Link to comment
Share on other sites

  • 2 years later...
On 9/17/2013 at 7:02 PM, indesign47 said:
$message = $this->order->getFirstMessage();

Bonjour,

Merci pour les codes.

Avec $message = $this->order->getFirstMessage(); cela retourne le message le plus récent, y compris si le message est un message privé.
J'ai cette situation avec mes modules de paiement qui ajoutent un message privé. Du coup, quand il n'y a pas de message du client, c'est le message du module de paiement qui s'affiche sur le PDF.

Comment faire pour exclure les messages privés et ainsi être certain de récupérer le message du client quand il y en a un ?

Merci

Link to comment
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
×
×
  • Create New...