Je vous invite à visualiser d’abord la partie 1 si vous ne l’avez pas encore fait

1 – Ajouter un attribut produit dans la facture

Il arrive que vous ajoutez certains attributs à vos produits que vous souhaitez afficher dans votre facture exemple : code barre (ean13) je vous explique comment procéder pour le faire

app/code/local/Mage/Sales/Model/Order/Pdf/Invoice.php

Commençons par ajouter l’entête cherchez ce code deux fois dans le fichier (lignes 88 et 151 pour Magento 1.7.2)

$page->drawText(Mage::helper('sales')->__('SKU'), 255, $this->y, 'UTF-8');

Ajouter après (Changez EAN13 par le nom que vous souhaitez)

$page->drawText(Mage::helper('sales')->__('EAN13'), 310, $this->y, 'UTF-8');

Ajoutons maintenant l’attribut du produit pour tout les produits (on va le mettre après la colonne SKU)

app/code/local/Mage/Sales/Model/Order/Pdf/Items/Invoice/Default.php

Cherchez (ligne 55)

$lines[0][] = array(
  'text' => Mage::helper('core/string')->str_split($this->getSku($item), 25),
  'feed' => 255
);

Si vous allez ajouter un attribut standard à magento présent par défaut (par exemple le poids) ajouter

$lines[0][] = array(
  'text' => $item->getWeight(),
  'feed' => 310
);

Par contre s’il s’agit d’un attribut que vous avez créer il faut charger le produit de nouveau { remplacer getean_13() par getCodeDeVotreAttribut() }

$Product = Mage::getModel('catalog/product')->load($item->getProductId());
$lines[0][] = array(
  'text' => $Product->getean_13(),
  'feed' => 320
);

 

2 – Ajouter un attribut client

On va ajouter un attribut administrable de la fiche client en bas de la facture juste en dessous du montant globale

app/code/local/Mage/Sales/Model/Order/Pdf/Invoice.php

Chercher

$page = $this->insertTotals($page, $invoice);

Ajouter après

$attr =Mage::getModel('customer/customer')->load($order->getCustomerId())->getPrefix();
if($attr!=''){
    $page->drawText('Conditions de règlement:', 416, $this->y, 'UTF-8');
    $this->y -=15;
    $page->drawText($attr, 416, $this->y, 'UTF-8');
}

Exemples d’attribut que vous pouvez utilisez

[entity_id] => 295
[entity_type_id] => 1
[attribute_set_id] => 0
[website_id] => 1
[email] => xxx@gml.com
[group_id] => 5
[increment_id] => 000000287
[store_id] => 0
[created_at] => 2012-08-30 13:46:32
[updated_at] => 2012-08-31 07:22:08
[is_active] => 1
[created_in] => Admin [prefix] =>
[firstname] => xxx
[middlename] =>
[lastname] => yyy
[suffix] =>
[password_hash] => ZZZ:4h
[taxvat] =>
[default_billing] => 314
[default_shipping] => 314

3 – Ajouter du texte dans le footer des factures de magento (mentions légales, numéro,adresse …)

app/code/local/Mage/Sales/Model/Order/Pdf/Abstract.php

Ajouter la fonction suivante n’importe ou dans le fichier (bien-sur pas à l’intérieur d’une autre fonction!) et modifiez le texte dans les drawtext($text, $x, $y) comme vous voulez

protected function insertFooterText(&$page, $store = null){
    $page->setFillColor(new Zend_Pdf_Color_RGB(0.93, 0.92, 0.92)); 
    $page->setLineColor(new Zend_Pdf_Color_GrayScale(0.5)); 
    $page->setLineWidth(0.5); 
    $posfoot1 = 60; 
    $page->drawRectangle(20, $posfoot1, 570, $posfoot1 - 55); 
    $posfoot1 +=10; 
    $page->setFillColor(new Zend_Pdf_Color_GrayScale(0)); 
    $this->_setFontRegular($page); 
    $posfoot = 50; 
    $page->drawText('(*) Remise client :', 30, $posfoot, 'UTF-8'); 
    $page->drawText('Le prix unitaire net HT affiché tient compte de la remise accordée.', 30, $posfoot-10, 'UTF-8'); 
    $page->drawText('Réserve de propriété :', 30, $posfoot-20, 'UTF-8'); 
    $page->drawText("Le transfert de propriété des marchandises est subordonné au paiement complet du prix et de ses accessoires.", 30, $posfoot-30, 'UTF-8'); 
    $page->drawText("Cependant, le client prendra en charge dès la livraison, les risques de perte et de détérioration des produits vendus, ainsi que les dommages qu'elles pourraient occasionner.", 30, $posfoot-40, 'UTF-8'); 
    $posfoot -=10; 
}

Editez app/code/local/Mage/Sales/Model/Order/Pdf/Invoice.php

et ajoutez juste après la ligne

$page = $this->insertTotals($page, $invoice); $this->insertFooterText($page);

Source 1 / Source 2