Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Page 1 of 2
Personnaliser Commande / Facture / BL / Avoir
 
apitronic
Jr. Member
 
Total Posts:  27
Joined:  2008-12-14
France
 

Bonjour,

En attendant d’avoir un peu plus de temps pour mettre tout ça au propre dans le wiki, je vais vous exposer :
* Comment personnaliser votre facture / BL / Avoir
* Comment mettre la facture / BL / Avoir en pièce jointe du mail envoyé au client
* Comment personnaliser vos numéros de facture

1) Comment personnaliser votre facture / BL / Avoir

La personnalisation des pdf ce fait encore dans le code php, il faut donc éditer directement le code pour changer l’aspect des documents.

Pour conserver les fichiers d’origines, en mettant en place vos modifications, nous allons copier les fichiers du répertoire \app\code\core\Mage\Sales\Model\Order\Pdf\ dans un répertoire dont il faut créer l’arborescence : \app\code\local\Mage\Sales\Model\Order\Pdf\

Il y a quatre fichiers : Abstract.php, Creditmemo.php, Invoice.php, Shipment.php et un répertoire Items
Le premier fichier Abstract contient le format par défaut des différents éléments du document, Creditmemo contient les spécificités pour les avoir, en particulier l’entête, Invoice contient les spécificités pour les factures et Shipment, les spécificités pour les Bon de Livraison.

Je vous laisse regarder le détail de ces fichiers, les noms de chaque fonction sont assez parlant… Bon courage pour arriver à recaler tous vos blocs avec les différentes coordonnées… Cette partie mérite vraiment d’être améliorée par l’équipe Magento !

2) Comment mettre la facture / BL / Avoir en pièce jointe du mail envoyé au client

Il faut faire une copie du fichier \app\code\core\Mage\Core\Model\Email\Template.php vers \app\code\local\Mage\Core\Model\Email\Template.php et ajouter à la fin du fichier la possibilité de mettre un pdf en pièce jointe du mail :

public function addAttachment(Zend_Pdf $pdf$filename)
    
{
        $file 
$pdf->render();
        
$attachment $this->getMail()->createAttachment($file);
        
$attachment->type 'application/pdf';
        
$attachment->filename $filename;
    
}

Ensuite, faire une copie du fichier \app\code\core\Mage\Sales\Model\Order\Invoice.php vers \app\code\local\Mage\Sales\Model\Order\Invoice.php (idem pour creditmemo.php et Shipment.php...)

Editer chacun de ces fichiers pour ajouter :

$pdf Mage::getModel('sales/order_pdf_invoice')->getPdf(array($this));
$mailTemplate->addAttachment($pdf$this->getIncrementId().".pdf");

dans la fonction sendMail, juste avant :

if ($notifyCustomer{
   $sendTo[] 
= array(
        
'name'  => $customerName,
        
'email' => $order->getCustomerEmail()
   );

Dans chaque cas bien sur, remplacer “invoice” par creditmemo ou shipment…

Et voila, maintenant vous avez vos documents en pièces jointes de vos mails, n’oubliez pas de modifier vos mails en conséquence…

 
Magento Community Magento Community
Magento Community
Magento Community
 
apitronic
Jr. Member
 
Total Posts:  27
Joined:  2008-12-14
France
 

bon, je vais faire le 3) dans un nouveau post, je crois que j’ai été trop bavard smile

3) Comment personnaliser vos numéros de facture

La, c’est un autre gros morceaux, avoir des numéros de facture personnalisé (fonctionne pour tous les documents, BL, FACT, COMMANDE ...)

Première chose à faire, nous allons copier le modèle d’incrémentation actuel pour le modifier. Copiez le fichier \app\code\core\Mage\Eav\Model\Entity\Increment\Numeric.php vers un fichier \app\code\local\Mage\Eav\Model\Entity\Increment\Numericdatetime.php

Ce fichier sera le nouveau modèle utilisé pour numéroter les documents qui en dépendent (voir la modification de la base de données ci-dessous)

Nous allons modifier le fichier pour avoir des numéros qui ressemble à FA0902000205, voici le code :

class Mage_Eav_Model_Entity_Increment_NumericDateTime
    
extends Mage_Eav_Model_Entity_Increment_Abstract
{
    
public function getNextId()
    
{
        $last 
$this->getLastId();
        
        
// Si il y a un prefix, on le supprime
        
if (strpos($last$this->getPrefix())===0{
            $last 
substr($laststrlen($this->getPrefix()));
        

        
        
// Les numéros sont sous la forme XXAAMMNNNNJJ
        //   - XX = FA pour facture, BL pour bon de livraison, CM pour commande, AV pour avoir
        //   - AA = Année sur 2 chiffres
        //   - MM = Mois sur 2 chiffres
        //   - N = Index (de 0 Ã  9999) => prévoir le nombre maxi de commande par mois
        //   - JJ = Jour
        // Exemple : FA0902000205 => Facture numéro 2 du 05/02/2009
        
        // Chaque mois, on reboucle l'index
        
if (substr($last,2,2)!=date("m"))
          
$last 0;
        else
          
// On supprime la date du numéro 4 chiffres en tête et une longueur de 4
          
$last = (int) substr($last4,4);
        
        
// On incrémente l'index
        
$next $last+1;
        
        return 
$this->format($next);
    
}
    
    
public function format($id)
    
{
        $result 
$this->getPrefix();
        
// On ajoute l'année + mois en début et le jour en fin (attention temps UTC)
        
$result.= date("ym").str_pad((string)$id4$this->getPadChar(), STR_PAD_LEFT).date("d");
        return 
$result;
    
}

}

Si vous créez votre propre modèle, pensez bien à renommer la classe en début de fichier wink

Le getPrefix renvoi un identifiant dépendant du document et défini dans la bdd (FL, CM, BL ...)
Le reste permet de mettre année et mois en début de numéro et jour en fin, avec un index au milieu.
J’ai essayé de commenter le code, mais n’hésitez pas pour les questions smile ...

Maintenant, modifions la base de données pour que magento prenne en compte ce modèle de numérotation ...

Il faut editer la table eav_entity_store pour définir les valeurs courantes de numérotation, ca vous permettra par exemple de ne pas commencer à 1 pour l’index ...
Il doit y avoir une ligne pour chaque document. La colonne increment_prefix contient le fameux prefixe en début de numéro, mettre votre préfixe, FA, FACT, FC .... ce que vous voulez !!!

La table la plus importante à modifier, est eav_entity_type, pour les lignes ayant comme entity_model sales/order, sales/order_invoice, sales/order_shipment et sales/order_creditmemo.

La, il faut indiquer le type d’incrementation utilisée (dans la colonne increment_model), il faut remplacer le eav/entity_increment_numeric par eav/entity_increment_numericdatetime (ou votre propre modèle bien sur...)

Et voila, vous avez des numéros de facture qui font ce que vous voulez !!!! smile

En espérant vous avoir été utile ... Merci à tous pour l’aide que j’ai trouvé sur ce forum !

 
Magento Community Magento Community
Magento Community
Magento Community
 
SeL_
Magento Team
 
Avatar
Total Posts:  1140
Joined:  2007-10-10
Paris, France
 

Effectivement, un article wiki serait parfait smile
Pense à mettre les tags “french” et “français” pour qu’on retrouve + facilement ton article. Merci !

 
Magento Community Magento Community
Magento Community
Magento Community
 
Herve Guetin
Sr. Member
 
Avatar
Total Posts:  216
Joined:  2008-05-10
Lyon, FR
 

Merci Apitronic !
C’est bien utile smile

 
Magento Community Magento Community
Magento Community
Magento Community
 
apitronic
Jr. Member
 
Total Posts:  27
Joined:  2008-12-14
France
 

PS: Si pour le point 2, vous voulez aussi ajouter les pdf sur les MAJ, mettre le code dans sendMail et dans sendUpdateMail ... smile

 
Magento Community Magento Community
Magento Community
Magento Community
 
electroheadfx
Jr. Member
 
Total Posts:  13
Joined:  2008-11-26
 

Merci apitronic pour ce tutorial/astuce,

Quand tu dis : ‘n’oubliez pas de modifier vos mails en conséquence…’
Que dois-je modifier en conséquence ??

merci à tous !

 
Magento Community Magento Community
Magento Community
Magento Community
 
apitronic
Jr. Member
 
Total Posts:  27
Joined:  2008-12-14
France
 
electroheadfx - 29 April 2009 11:07 PM

Merci apitronic pour ce tutorial/astuce,

Quand tu dis : ‘n’oubliez pas de modifier vos mails en conséquence…’
Que dois-je modifier en conséquence ??

merci à tous !

Il faut modifier le mail envoyé pour la facture pour qu’il dise que la facture est en pièce jointe, et non avoir la facture en HTML dans le mail.

Par exemple, voici les mails que j’utilise :

p><strong>Bonjour {{var order.getCustomerName()}},</strong></p><br /><br />
                  <
p>Merci pour votre commande sur Planète Domotique.<br /> </p>
                  <
p>Vous pouvez consulter le statut de votre commande Ã  tout moment en <a href="{{store url="customer/account/"}}" style="color: #1E7EC8;">vous connectant
                  sur votre compte
</a></p><br />
                  <
p>Veuillez trouver en pièce jointe votre facture n°{{var invoice.increment_id}}.</p>
                
                  <
p>Si vous ne possédez pas Acrobat readervous pouvez le charger <a href="http://www.adobe.fr/products/acrobat/readstep2.html">sur le site d'Adobe</a></p><br />
                  
                  <p>{{var comment}}</p>
                  <p>Si vous avez des questions au sujet de votre commande contactez-nous par mail sur <a href="mailto:support@planete-domotique.com" style="color: #1E7EC8;">support+a+planete-domotique.com</a>.</p>
                  <p>
                      Merci,</p><p><strong>L'
équipe Planète Domotique</strong>
                  </
p>

A+

 
Magento Community Magento Community
Magento Community
Magento Community
 
electroheadfx
Jr. Member
 
Total Posts:  13
Joined:  2008-11-26
 

Merci beaucoup Mickael !

 
Magento Community Magento Community
Magento Community
Magento Community
 
cooper
Sr. Member
 
Total Posts:  104
Joined:  2008-03-31
 

Super clair. Merci Mickael !

Quelqu’un a-t-il déjà intégrer la date de facture (obligatoire pour la législation française) dans les factures au lieu de la date de commande (non obligatoire)?

A+

 
Magento Community Magento Community
Magento Community
Magento Community
 
apitronic
Jr. Member
 
Total Posts:  27
Joined:  2008-12-14
France
 
cooper - 03 May 2009 12:49 AM

Super clair. Merci Mickael !

Quelqu’un a-t-il déjà intégrer la date de facture (obligatoire pour la législation française) dans les factures au lieu de la date de commande (non obligatoire)?

A+

Ben ouip, moi smile

Donc pour ça, il faut (enfin, j’ai fait smile) :

Editer les fichiers \app\code\core\Mage\Sales\Model\Order\Pdf\ * (creditmemo, invoice, shipment) et remplacer la ligne

$this->insertOrder($page$orderMage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_CREDITMEMO_PUT_ORDER_ID$order->getStoreId()));

par

$this->insertOrder($page$invoiceMage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_CREDITMEMO_PUT_ORDER_ID$order->getStoreId()));
ou
$this->insertOrder($page$creditmemoMage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_CREDITMEMO_PUT_ORDER_ID$order->getStoreId()));
ou
$this->insertOrder($page$shipmentMage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_CREDITMEMO_PUT_ORDER_ID$order->getStoreId()));

Ensuite, dans le fichier abstract.php, on modifie la fonction insertOrder de la manière suivante :

Remplacer

protected function insertOrder(&$page$order$putOrderId true)
    
{

Par

protected function insertOrder(&$page$source$putOrderId true)
    
{
        $order 
$source->getOrder();

Et pour afficher la bonne date, il suffit d’utiliser :

$page->drawText(Mage::helper('sales')->__('Date : ')." "Mage::helper('core')->formatDate($source->getCreatedAt(), 'medium'false), 450730'UTF-8');

Qui pourra par exemple remplacer la ligne qui affiche actuellement la date de commande wink

Voila…

A+,

Mickael

 
Magento Community Magento Community
Magento Community
Magento Community
 
cooper
Sr. Member
 
Total Posts:  104
Joined:  2008-03-31
 

Mickael,

Merci encore! Ça marche!  surprised

Désolé pour le délais de ma réponse mais mpff.. je cours, je cours.... tongue rolleye

Bon et maintenant je suis confronté à un nouveau problème lors de l’édition des factures : lorsque le panier contient de nombreux articles et que la factures PDF devrait faire plusieurs page, je n’obtiens que la première page (donc sans le reste, le total et la fin....).

Avez-vous le même problème?

 
Magento Community Magento Community
Magento Community
Magento Community
 
cooper
Sr. Member
 
Total Posts:  104
Joined:  2008-03-31
 

Ok il s’agissait d’un problème de mise en page. En augmentant la marge inférieure dans tout s’affiche. Il fallait changer :

if ($this->y<15) dans invoice.php par

if ($this->y<100).

Maintenant il me reste à afficher le numéro de page sur chaque pages de la facture.

Mais là çà dépasse mes compétences…

Si quelqu’un à une idée .... grin

A+

 
Magento Community Magento Community
Magento Community
Magento Community
 
guillaume7684
Sr. Member
 
Total Posts:  241
Joined:  2008-10-20
 
apitronic - 03 May 2009 11:02 AM


Et pour afficher la bonne date, il suffit d’utiliser :

$page->drawText(Mage::helper('sales')->__('Date : ')." "Mage::helper('core')->formatDate($source->getCreatedAt(), 'medium'false), 450730'UTF-8');

Bonjour,

Merci pour ce tuto.

Par contre je ne comprends pas ce que je dois faire avec cette ligne de code.
Dois-je la rajouter et dans quel fichier?

Merci.

 
Magento Community Magento Community
Magento Community
Magento Community
 
guillaume7684
Sr. Member
 
Total Posts:  241
Joined:  2008-10-20
 

La colonne increment_prefix contient le fameux prefixe en début de numéro, mettre votre préfixe, FA, FACT, FC .... ce que vous voulez !!!

Bonjour,

Il y a ça aussi que je n’arrive pas à mettre en place.
J’ai le préfixe 6 pour mes commandes, le préfixe 3 pour mes factures, ...

J’aimerais le modifier comment faire?

Merci.

 
Magento Community Magento Community
Magento Community
Magento Community
 
guillaume7684
Sr. Member
 
Total Posts:  241
Joined:  2008-10-20
 

Bonjour,

Et oui je suis toujours sur ce problème de facture.

Dans le premier message c’est marqué de dupliquer des fichiers, mais à quel endroit on indique à Magento le chemin des fichiers dupliqués.

Car pour moi ça ne marche pas et pourtant, j’ai fait les modifs dans les codes des fichiers que j’ai dupliqué.

Je n’arrive pas à ajouter la facture au mail envoyé au client.

Merci.

 
Magento Community Magento Community
Magento Community
Magento Community
 
alltex
Jr. Member
 
Total Posts:  18
Joined:  2008-12-03
 
guillaume7684 - 22 May 2009 02:57 AM

apitronic - 03 May 2009 11:02 AM


Et pour afficher la bonne date, il suffit d’utiliser :

$page->drawText(Mage::helper('sales')->__('Date : ')." "Mage::helper('core')->formatDate($source->getCreatedAt(), 'medium'false), 450730'UTF-8');

Bonjour,

Merci pour ce tuto.

Par contre je ne comprends pas ce que je dois faire avec cette ligne de code.
Dois-je la rajouter et dans quel fichier?

Merci.

Il faut remplacer le texte semblable sur la page abstract.php :
$page->drawText(Mage::helper(’sales’)->__(’Order Date: ‘) . Mage::helper(’core’)->formatDate($order->getCreatedAtStoreDate(), ‘medium’, false), 35, 740, ‘UTF-8’);

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top
Page 1 of 2