ryudr Posted October 17, 2010 Share Posted October 17, 2010 Bonjour,Il semble que d'après mes recherches sur les forums, cette requête n'a jamais été évoquée.Voilà, je voudrai joindre automatiquement un fichier pdf qui contient les CGV lors de l'envoi du mail de commande. Ainsi une fois sa commande finie, l'utilisateur recevra un mail récapitulatif accompagné du fichier pdf.Pour cela je me suis penché sur 2 fichiers : classes/Mail.php et classes/PaymentModule.phpVoici les modifications que j'ai effectués :Dans classes/PaymentModule.php, aux alentours de la ligne 360 :J'ai changé ceci : '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency, false, false)); if (is_array($extraVars)) $data = array_merge($data, $extraVars); // Join PDF invoice if (intval(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number) { $fileAttachment['content'] = PDF::invoice($order, 'S'); $fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', intval($order->id_lang)).sprintf('d', $order->invoice_number).'.pdf'; $fileAttachment['mime'] = 'application/pdf'; } else $fileAttachment = NULL; if ($orderStatus->send_email AND Validate::isEmail($customer->email)) Mail::Send(intval($order->id_lang), 'order_conf', 'Order confirmation', $data, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, $fileAttachment); $this->currentOrder = intval($order->id); return true; } Par (ajout d'un bout code + modification de la fonction Mail::Send) : '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency, false, false)); if (is_array($extraVars)) $data = array_merge($data, $extraVars); // Joindre les CGV en PDF --- ON $PdfCGV['name'] = __PS_BASE_URI__ . 'CGV/CGV.pdf'; $PdfCGV['mime'] = 'application/pdf'; $PdfCGV['content'] = file_get_contents($PdfCGV['name']); // Joindre les CGV en PDF --- OFF // Join PDF invoice if (intval(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number) { $fileAttachment['content'] = PDF::invoice($order, 'S'); $fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', intval($order->id_lang)).sprintf('d', $order->invoice_number).'.pdf'; $fileAttachment['mime'] = 'application/pdf'; } else $fileAttachment = NULL; if ($orderStatus->send_email AND Validate::isEmail($customer->email)) Mail::Send(intval($order->id_lang), 'order_conf', 'Order confirmation', $data, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, $fileAttachment /* Joindre les CGV en PDF --- ON*/ , $PdfCGV /* Joindre les CGV en PDF --- OFF */); $this->currentOrder = intval($order->id); return true; } Dans classes/Mail.php, aux alentours de la ligne 22 :J'ai changé ceci : static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_) Par cela (ajout de la variable $PdfCGV) : static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_, $PdfCGV) J'ai du omettre quelque chose, car cela ne semble pas fonctionner : aucun fichier pdf n'est attaché au mail. Si quelqu'un a une idée ?Merci bien. Link to comment Share on other sites More sharing options...
Jean-Bruno Posted October 18, 2010 Share Posted October 18, 2010 Je suis intéressé également Ryudr. Mais malheureusement cette demande n'est pas nouvellehttp://www.prestashop.com/forums/viewthread/28967/discussion_generale/jetais_convaincu_que_mes_clients_recevaient_la_facture_pdf_par_mail_ Link to comment Share on other sites More sharing options...
ryudr Posted October 18, 2010 Author Share Posted October 18, 2010 Je suis intéressé également Ryudr. Mais malheureusement cette demande n'est pas nouvellehttp://www.prestashop.com/forums/viewthread/28967/discussion_generale/jetais_convaincu_que_mes_clients_recevaient_la_facture_pdf_par_mail_ Je vais encore travailler la question, mais je ne suis pas expert en développement, une petite aide serait la bienvenue Link to comment Share on other sites More sharing options...
jeckyl Posted October 18, 2010 Share Posted October 18, 2010 Bonjour,regardez du côté de la librairie swift comment configurer l'envoie de fichiers.J'ajoute même du côté de cette fonction : http://swiftmailer.org/docs/attaching-files Link to comment Share on other sites More sharing options...
Jean-Bruno Posted October 19, 2010 Share Posted October 19, 2010 Merci ami Jeckil, je vais creuser de ce côté de la force.Bonne journée Link to comment Share on other sites More sharing options...
ryudr Posted October 20, 2010 Author Share Posted October 20, 2010 Merci ami Jeckil, je vais creuser de ce côté de la force.Bonne journée J'y suis parvenu ! Je posterai la marche à suivre ce soir Link to comment Share on other sites More sharing options...
ryudr Posted October 20, 2010 Author Share Posted October 20, 2010 Voilà la solution testée avec succès chez moi :Avertissement : J'ai donné le nom de $pdfCGV à ma variable mais vous pouvez l'appeler autrement.1) Dans classes/Mail.php :Modifier : static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_) Par : static public function Send($id_lang, $template, $subject, $templateVars, $to, $toName = NULL, $from = NULL, $fromName = NULL, $fileAttachment = NULL, $pdfCGV = NULL, $modeSMTP = NULL, $templatePath = _PS_MAIL_DIR_) Modifier : global $_LANGMAIL; /* Create mail and attach differents parts */ $message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME').'] '.((is_array($_LANGMAIL) AND key_exists($subject, $_LANGMAIL)) ? $_LANGMAIL[$subject] : $subject)); $templateVars['{shop_logo}'] = (file_exists(_PS_IMG_DIR_.'logo.jpg')) ? $message->attach(new Swift_Message_Image(new Swift_File(_PS_IMG_DIR_.'logo.jpg'))) : ''; $templateVars['{shop_name}'] = Configuration::get('PS_SHOP_NAME'); $templateVars['{shop_url}'] = 'http://'.Tools::getHttpHost(false, true).__PS_BASE_URI__; $swift->attachPlugin(new Swift_Plugin_Decorator(array($to_plugin => $templateVars)), 'decorator'); if ($configuration['PS_MAIL_TYPE'] == 3 OR $configuration['PS_MAIL_TYPE'] == 2) $message->attach(new Swift_Message_Part($templateTxt, 'text/plain', '8bit', 'utf-8')); if ($configuration['PS_MAIL_TYPE'] == 3 OR $configuration['PS_MAIL_TYPE'] == 1) $message->attach(new Swift_Message_Part($templateHtml, 'text/html', '8bit', 'utf-8')); if ($fileAttachment AND isset($fileAttachment['content']) AND isset($fileAttachment['name']) AND isset($fileAttachment['mime'])) $message->attach(new Swift_Message_Attachment($fileAttachment['content'], $fileAttachment['name'], $fileAttachment['mime'])); /* Send mail */ $send = $swift->send($message, $to, new Swift_Address($from, $fromName)); $swift->disconnect(); return $send; Par : global $_LANGMAIL; /* Create mail and attach differents parts */ $message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME').'] '.((is_array($_LANGMAIL) AND key_exists($subject, $_LANGMAIL)) ? $_LANGMAIL[$subject] : $subject)); $templateVars['{shop_logo}'] = (file_exists(_PS_IMG_DIR_.'logo.jpg')) ? $message->attach(new Swift_Message_Image(new Swift_File(_PS_IMG_DIR_.'logo.jpg'))) : ''; $templateVars['{shop_name}'] = Configuration::get('PS_SHOP_NAME'); $templateVars['{shop_url}'] = 'http://'.Tools::getHttpHost(false, true).__PS_BASE_URI__; $swift->attachPlugin(new Swift_Plugin_Decorator(array($to_plugin => $templateVars)), 'decorator'); if ($configuration['PS_MAIL_TYPE'] == 3 OR $configuration['PS_MAIL_TYPE'] == 2) $message->attach(new Swift_Message_Part($templateTxt, 'text/plain', '8bit', 'utf-8')); if ($configuration['PS_MAIL_TYPE'] == 3 OR $configuration['PS_MAIL_TYPE'] == 1) $message->attach(new Swift_Message_Part($templateHtml, 'text/html', '8bit', 'utf-8')); if ($fileAttachment AND isset($fileAttachment['content']) AND isset($fileAttachment['name']) AND isset($fileAttachment['mime'])) $message->attach(new Swift_Message_Attachment($fileAttachment['content'], $fileAttachment['name'], $fileAttachment['mime'])); if ($pdfCGV AND isset($pdfCGV)) $message->attach(new Swift_Message_Attachment(new Swift_File(_PS_ROOT_DIR_.'/REPERTOIRE + NOM DU FICHIER PDF'), 'NOM DU FICHIER PDF.pdf')); /* Send mail */ $send = $swift->send($message, $to, new Swift_Address($from, $fromName)); $swift->disconnect(); return $send; 2) Dans classes/PaymentModule.php :Ajouter : $pdfCGV = 1; Sous (~ ligne 322) : $invoice_state = $invoice->id_state ? new State(intval($invoice->id_state)) : false; Et modifier : Mail::Send(intval($order->id_lang), 'order_conf', 'Order confirmation', $data, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, $fileAttachment); Par : Mail::Send(intval($order->id_lang), 'order_conf', 'Order confirmation', $data, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, $fileAttachment, $pdfCGV); Pour ceux qui utilisent le module Mail Alerts (Alertes email) :3) Dans modules/mailalerts/mailalerts.php :Modifier : Mail::Send($id_lang, $template, $subject, $templateVars, explode(self::__MA_MAIL_DELIMITOR__, $this->_merchant_mails), NULL, $configuration['PS_SHOP_EMAIL'], $configuration['PS_SHOP_NAME'], NULL, NULL, dirname(__FILE__).'/mails/'); Par : Mail::Send($id_lang, $template, $subject, $templateVars, explode(self::__MA_MAIL_DELIMITOR__, $this->_merchant_mails), NULL, $configuration['PS_SHOP_EMAIL'], $configuration['PS_SHOP_NAME'], NULL, NULL, NULL, dirname(__FILE__).'/mails/'); Link to comment Share on other sites More sharing options...
Jean-Bruno Posted October 21, 2010 Share Posted October 21, 2010 Merci l'amiJe vais plutot utiliser ceci qui va certainement t'interesser http://www.prestashop.com/forums/viewthread/73566/P0/developpement/resolu_premodule_fonction_qui_envoie_les_mails_lors_du_changement_de_statuta+ Link to comment Share on other sites More sharing options...
mehdi2405 Posted October 21, 2010 Share Posted October 21, 2010 genial !!quel taf !!savez vous comment ajouter une colonne au bon de commande et à la facturej'aimerais rajouter la marquemerci Link to comment Share on other sites More sharing options...
luggy Posted December 5, 2010 Share Posted December 5, 2010 Bonjour, Vu que je suis pas doué avec le code, j'aurais voulu savoir comment faire que pour la meme conditionif ($pdfCGV AND isset($pdfCGV)) on puisse enlever juste le logo.jpg en attachement et qu'il n'y est pas le nom de la boutique(et la description) dans l'objet du message.Merci. J'y suis arrivé. Link to comment Share on other sites More sharing options...
nini1505 Posted March 11, 2011 Share Posted March 11, 2011 Bonjour!- ryudr: Super boulot!Merci à toi!Je voudrais me servir de la même variable que toi. Ma question est peut être stupide mais je n'y connais rien en variable: dois je créer cette variable dans une table ou autre? Ou est-ce que je rédige textuellement ce que tu a mentionné ci-dessus? Merci par avance pour ta réponse A défaut de ryudr, est-ce que quelqu'un pourrait m'aider svp?Merci @ tous Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now