[Magento] Modifier les factures PDF – Partie 2

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 poid) 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 apres

$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 fotter 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 (biensur 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

ajoutez juste après la ligne

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

Source 1 / Source 2