26 Sep 2019

Ajouter l’email client dans les factures PDF de Prestashop 1.7

Mise à jour de l’article le 24/11/2020 : Mon article est maintenant adapté au version 1.7.6.8 et plus. Descendez un peu dans la page pour trouver l’information.

Un tutoriel et des fichiers pour permettre l’affichage de l’adresse mail client sur les factures de votre Prestashop 1.7.

Vous utilisez peut-être les factures clients PDF pour préparer les commandes ou encore pour la comptabilité. Si vous avez besoin de contacter votre client par mail, vous êtes obligé d’aller dans le compte client. Grâce à ce tutoriel Prestashop très simple vous allez pouvoir afficher l’e-mail du client sur vos factures PDF.

Créer un Override sur votre Prestashop

Vous allez devoir faire une surcouche du fichier HTMLTemplate.php sur votre serveur.
Il faut créer ce fichier dans : override -> classes -> PDF

Ensuite collez ceci dans votre fichier :

<?php

/*
Override add telephone on PDF Invoice
https://www.matthieu-jalbert.fr/
*/

abstract class HTMLTemplate extends HTMLTemplateCore {

public function assignCommonHeaderData()
{
$this->setShopId();
$id_shop = (int)$this->shop->id;
$shop_name = Configuration::get('PS_SHOP_NAME', null, null, $id_shop);
$path_logo = $this->getLogo();
$customer = new Customer((int)$this->order->id_customer);

$this->smarty->assign(array(
'logo_path' => $path_logo,

'img_update_time' => Configuration::get('PS_IMG_UPDATE_TIME'),
'date' => $this->date,
'title' => $this->title,
'shop_name' => $shop_name,
'shop_details' => Configuration::get('PS_SHOP_DETAILS', null, null, (int)$id_shop),
'width_logo' => $width,
'height_logo' => $height,
'customer_id' => sprintf("%04d", $customer->id),
'customer_email' => $customer->email
));
}
}

Je joins le fichier tout prêt :

Ensuite il faut afficher la variable {$customer_email} créé, dans la facture. Il faut aller à la racine de votre site, dans le dossier PDF. Cherchez ensuite le invoice.tpl.

Pour ma part je mets l’adresse mail sous l’adresse par exemple à la ligne 35 :

<!-- Invoicing -->
<tr>
<td colspan="12">
{$addresses_tab}
{$customer_email}
</td>
</tr>

Vous pouvez maintenant aller dans l’onglet commande et vérifier cela sur une facture.
Si cela ne s’affiche pas, pensez à vider le cache de votre Prestashop.

Mon logo disparaît sur la facture de mon Prestashop 1.7.6.8

Au vu des commentaires et des mails de la communauté, j’ai effectuait des recherches concernant ce problème, suite à mon tutoriel plus haut.

Lors des dernières mises à jour du CMS, l’appel des factures a changé et du coup, l’override au dessus n’est plus bon à partir de cette version.

Si vous êtes au minimum sur 1.7.6.8, ne vous préoccupez pas de mon explication au-dessus. Par contre cette astuce ci-dessous, fonctionne avec toutes les versions de Prestashop !

Rendez-vous dans classes/pdf/HTMLTemplateInvoice.php et à la ligne 346 rajoutez l’adresse client. Vous devez avoir cela :

$data = array(
'order' => $this->order,
'order_invoice' => $this->order_invoice,
'order_details' => $order_details,
'carrier' => $carrier,
'cart_rules' => $cart_rules,
'delivery_address' => $formatted_delivery_address,
'invoice_address' => $formatted_invoice_address,
'addresses' => array('invoice' => $invoice_address, 'delivery' => $delivery_address),
'tax_excluded_display' => $tax_excluded_display,
'display_product_images' => $display_product_images,
'layout' => $layout,
'tax_tab' => $this->getTaxTabContent(),
'customer' => $customer,
'footer' => $footer,
'ps_price_compute_precision' => _PS_PRICE_COMPUTE_PRECISION_,
'round_type' => $round_type,
'legal_free_text' => $legal_free_text,
'customer_email' => $customer->email,
);

Ensuite, modifiez l’adresse client dans /pdf/invoice.addresses-tab.tpl et ajoutez l’email :

<table id="addresses-tab" cellspacing="0" cellpadding="0">
<tr>
<td width="50%">{if $delivery_address}<span class="bold">{l s='Delivery Address' d='Shop.Pdf' pdf='true'}</span><br/><br/>
{$delivery_address}<br />{$customer_email}
{/if}
</td>
<td width="50%"><span class="bold">{l s='Billing Address' d='Shop.Pdf' pdf='true'}</span><br/><br/>
{$invoice_address}<br />{$customer_email}
</td>
</tr>
</table>

Nous avons la même variable que dans ma 1er explication au début de l’article : {$customer_email}.
On l’ajoute tout simplement à la ligne de chaque adresse avec un retour à la ligne en HTML.

J’ai trouvé cette astuce sur le forum de Prestashop, j’ai juste ajusté certaine chose.

N’oubliez surtout pas de vider le cache de votre Prestashop.

Tenir une bonne comptabilité sur votre Prestashop

Vous savez maintenant comment rajouter cette option sur les factures dans Prestashop. Cependant il faut savoir qu’un site e-commerce doit suivre des « règles » de comptabilité. Une entreprise physique ou virtuelle est soumise aux mêmes lois. J’ai publié une vidéo pour parler de comptabilité. Tenez-vous informé pour ne rien oublier dans votre compta.

28 commentaires sur “Ajouter l’email client dans les factures PDF de Prestashop 1.7”
  1. Bonjour,
    Sur 1.7.8, le code fonctionne mais fait sauter le logo.
    Cet override fonctionne :

    setShopId();
    $id_shop = (int) $this->shop->id;
    $shop_name = Configuration::get('PS_SHOP_NAME', null, null, $id_shop);

    $logo = $this->getLogo();

    $width = 0;
    $height = 0;
    if (!empty($logo)) {
    list($width, $height) = getimagesize(_PS_IMG_DIR_ . $logo);
    $customer = new Customer((int)$this->order->id_customer);
    }

    // Limit the height of the logo for the PDF render
    $maximum_height = 100;
    if ($height > $maximum_height) {
    $ratio = $maximum_height / $height;
    $height *= $ratio;
    $width *= $ratio;
    }

    $this->smarty->assign([
    'logo_path' => Tools::getShopProtocol() . Tools::getMediaServer(_PS_IMG_) . _PS_IMG_ . $logo,
    'img_ps_dir' => Tools::getShopProtocol() . Tools::getMediaServer(_PS_IMG_) . _PS_IMG_,
    'img_update_time' => Configuration::get('PS_IMG_UPDATE_TIME'),
    'date' => $this->date,
    'title' => $this->title,
    'shop_name' => $shop_name,
    'shop_details' => Configuration::get('PS_SHOP_DETAILS', null, null, (int) $id_shop),
    'width_logo' => $width,
    'height_logo' => $height,
    'customer_id' => sprintf("%04d", $customer->id),
    'customer_email' => $customer->email,
    ]);
    }
    }

    1. Après test sur 1.7.8.3, ma solution fonctionne sans que le logo saute.
      Je laisse à disposition votre override pour les lecteurs

      Merci en tout cas

      1. Merci pour ce commentaire.

        Mon code est plutôt là pour permettre que tout fonctionne avec un override et non en devant modifier le core.

        Si cela peut aider.

  2. Rendez-vous dans classes/HTMLTemplateInvoice.php et à la ligne 346 rajoutez l’adresse client. Vous devez avoir cela :

    –> vous avez fait une erreur, c’est dans classes/pdf/HTMLTemplateInvoice.php

    sinon, merci pour le tuto

  3. L’article porte sur la facture et donc ce n’est pas adapté au bon de livraison.
    Il faudrait faire un override du même type exprès mais je n’ai jamais eu le cas à ce jour

  4. Bonjour

    Auparavant l’adaptation de ce systeme était possible pour les Bons de livraison (delivery slip) mais impossible depuis les versions 1.7.8, un idée si jamais ?
    merci

  5. Bonjour Baptiste,

    Le système sur cette version de Prestashop est identique aux autres.
    Vider le cache ne fera rien étant donné que nous sommes sur des PDF et non un impact en front sur le site.
    Si le logo disparaît, une balise doit être mal fermée, ce qui « casse » le PDF

Laisser un commentaire

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