THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Je souhaitais connaître la méthode pour joindre le PDF de la facture avec le mail de confirmation si vous avez une idée ça m’intéresse !

Last edited by ronanaupetit (07-01-2016 10:02:16)

Online


Thelia 2 utilise la librairie Swift Mailer (http://swiftmailer.org/ ) pour envoyer les mails. Tu trouveras dans la doc toutes les infos nécessaires : http://swiftmailer.org/docs/messages.html


OpenStudio Toulouse

Offline


Merci j'ai regardé mais je vois pas trop comment utilisé ça ... (désolé en dev j'suis pas une lumière)
A l'heure actuel j'envoi mes mail de la sorte

$message = $this->getMailer()->createEmailMessage("sws_contact",
                    $from, $to, $messageParameters, $locale);
                $this->getMailer()->send($message);

Je n'ai pas trouvé de méthode dans MailerFactory permettant d'attacher un fichier à mon mail

Online


Regarde la methode attach() de Swift Mailer.

La factory est... juste une factory, et retourne une instance de Swift Mailer.


OpenStudio Toulouse

Offline


ok j'ai réussi avec une image !
Bon maintenant je galère un peu pour le pdf. Je pense que je dois d'abord générer mon pdf grâce à la méthode "generateInvoicePdf($id)" mais lorsque j'appelle cette méthode comme ceci :

OrderController::generateInvoicePdf($id)

J'ai une erreur me disant que j'appelle une fonction non définit "checkOrderCustomer()"
Je ne sais pas si je procède bien, en tout cas je veux bien un peu d'aide pour générer ce pdf svp.

En tout cas merci encore roadster pour tes réponses, tu es vraiment top !

Offline


Je viens d'avancer un peu sur mon problème.

Dans un contrôleur qui étend la classe BaseFrontController, j'ai réussi (je pense) à générer un pdf

$pdf=$this->generateOrderPdf($id, ConfigQuery::read('pdf_invoice_file', 'invoice'));

Mais impossible de le passer en paramètre de la méthode attach() ce qui je pense est logique sachant que j'ai besoin du lien du pdf. Je ne sais pas trop comment procéder...

Online


Tu ne peux pas appeler ton contrôleur comme ça. Le plus simple est d'utiliser get_file_content() avec l'URL de la facture pour récupérer les données PDF, que tu écris dans un fichier temporaire que tu joins à ton mail.


OpenStudio Toulouse

Offline


D'accord merci ! je test ça dès que je peux

Offline


Bonjour,

Je me suis repenché sur ce problème ce matin et j'ai finalement réussi, j'y apporte donc ma solution pour ceux qui aurait un problème similaire.

                $parser = $this->container->get("thelia.parser");

                $parser->setTemplateDefinition(TemplateHelper::getInstance()->getActivePdfTemplate());
                $html = $parser->render(ConfigQuery::read('pdf_invoice_file', 'invoice').'.html', array('order_id' => $order_id));

                $pdfEvent = new PdfEvent($html);
                $action = new Pdf();

                $action->generatePdf($pdfEvent);

                $generatedPdf = $pdfEvent->getPdf();
                $handle= fopen("test.pdf", "c+");
                fwrite($handle, $generatedPdf);
                fclose($handle);

                $instance = \Swift_Attachment::fromPath("test.pdf");

                $from = array(ConfigQuery::getStoreEmail() => ConfigQuery::getStoreName());
                $to = array( $form->get("email")->getData());
                $message = $this->getMailer()->createEmailMessage("xxx_contact",
                $from, $to, $messageParameters, $locale)->attach($instance);
                $this->getMailer()->send($message);
                unlink("test.pdf");

Je génère un Pdf que je récupère dans une variable, je mets le contenu de cette variable dans un fichier pdf que je crée puis que je supprime à la fin de mon code.
Bon le code ci-dessus c'est celui de mon formulaire de contact mais il n'y a pas de raison que ça marche différemment pour l'envoi du mail après la commande passée.
En tout cas merci Roadster pour m'avoir aiguillé pour la fonction attach() et l'idée du fichier temporaire !

Offline


Ah nouvelle interrogation..

Je souhaite joindre ce fichier au mail de confirmation de commande envoyé grâce à la méthode "sendConfirmationEmail(OrderEvent $event)".
Comment puis-je joindre ce fichier sans toucher au core ?
Il faudrait que je fasse un module ça j'en suis casi sur mais que faire dedans svp ?

Online


Tu fais un event listener qui intercepte l'event ORDER_SEND_CONFIRMATION_EMAIL, envoie le mail personnalisé, et stoppe la propagation de l'event.

Tu as un exemple de ce type dans le module Paybox.


OpenStudio Toulouse

Offline


Donc dans mon module je crée une méthode qui effectue un $event->stopPropagation() et j'appelle cette methode dans l'array de mon événement dans ma méthode getSubscibedEvents() et ça suffirait à bloquer l'envoi du mail ?

EDIT : ça fonctionne ! j'avais oublié d'ajouter le service à mon premier essai. Grand merci à toi encore !

Last edited by ronanaupetit (17-12-2015 16:26:47)

Online