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...)
bon, je vais faire le 3) dans un nouveau post, je crois que j’ai été trop bavard
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($last, strlen($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($last, 4,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)$id, 4, $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
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 ...
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 !!!!
En espérant vous avoir été utile ... Merci à tous pour l’aide que j’ai trouvé sur ce forum !
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 reader, vous 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>
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)?
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
Donc pour ça, il faut (enfin, j’ai fait ) :
Editer les fichiers \app\code\core\Mage\Sales\Model\Order\Pdf\ * (creditmemo, invoice, shipment) et remplacer la ligne
Désolé pour le délais de ma réponse mais mpff.. je cours, je cours....
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....).