aguiu Posted June 30, 2017 Share Posted June 30, 2017 (edited) I have created a new status of the order, and I need that when I change the order to that particular order status, the store send an email with the template of the complete order, but that it is not sent to the customer email but to another different email that I can associate with that specific order status. What overrides should I do and what code should I put in each override? I'm a little new Thanks in advance. Edited June 30, 2017 by aguiu (see edit history) Link to comment Share on other sites More sharing options...
Scully Posted June 30, 2017 Share Posted June 30, 2017 (edited) You would have to do some coding for that. ../classes/Mail.php would be your friend in this case. Make either a copy of it or make an override for that in ../override/classes/Mail.php If and after you create an override file, delete ../cache/class_index.php. This is necessary to rebuild the list of overrides. Relevant function is public static function Send. At around line 120 add this: if ($template = "yournewtemplate") { $to = "[email protected]"; $to_name = "Recipient Name"; } Important:In order status you have to enable send mail to customer flag, otherwise the function would not be called at all. Report back an like the answer if it helped. Edited June 30, 2017 by Scully (see edit history) Link to comment Share on other sites More sharing options...
aguiu Posted June 30, 2017 Author Share Posted June 30, 2017 have i to replace "yournewtemplate" with the name of my new status order? Link to comment Share on other sites More sharing options...
Scully Posted June 30, 2017 Share Posted June 30, 2017 (edited) No. This is the name of a new email template you have to set in this specifiy order status. Why this? The mail send function doesn't know anything about order states but only about templates. Take order_conf.html and order_conf.txt and copy (not rename) them to specific_status.html and specific_status.txt. Once you have done that, activate send mail to customer in your new ordere state. Then you get the choice including this new template. Chose it an save your new order state. All this also requires the change of Mail.php with above posted code. Edited June 30, 2017 by Scully (see edit history) Link to comment Share on other sites More sharing options...
aguiu Posted June 30, 2017 Author Share Posted June 30, 2017 i need to send to a diferent email depending of the order status, for example for order status 1 send to [email protected], for order status 2 send to [email protected], etc.. can i do that with your code? Link to comment Share on other sites More sharing options...
Scully Posted June 30, 2017 Share Posted June 30, 2017 Of course, but you had to create new templates for all other statuses. Might not be the best solution for many different recipients. Link to comment Share on other sites More sharing options...
Scully Posted June 30, 2017 Share Posted June 30, 2017 If you like, we'd write an Override for your where you could just put in a the mailadress into the order status text and the mail would automacially be sent to the respective address. So you would be free to add as many order stati as you like with as many adresses as you need. This would be a paid offer. Send my a personal message if you are interested in this solution. Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 I am trying but it not works, when i change the order status, the client receives the email but not the email that i have write in the mail.php. in the code: if ($template = "yournewtemplate") { $to = "[email protected]"; $to_name = "Recipient Name";} i have to replace "yournewtemplate" with the name of the email template, for example "mytemplate1". i have to replace "[email protected]" with the email where i want ro receive the email, for example [email protected], and for what i have to replace "Recipient Name" ? Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 (edited) this is the override that i have create in main/override/classes/Mail.php: <?php class Mail extends MailCore public static function Send($id_lang, $template, $subject, $template_vars, $to, $to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null, $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null, $reply_to = null) { if (!$id_shop) { $id_shop = Context::getContext()->shop->id; } $configuration = Configuration::getMultiple(array( 'PS_SHOP_EMAIL', 'PS_MAIL_METHOD', 'PS_MAIL_SERVER', 'PS_MAIL_USER', 'PS_MAIL_PASSWD', 'PS_SHOP_NAME', 'PS_MAIL_SMTP_ENCRYPTION', 'PS_MAIL_SMTP_PORT', 'PS_MAIL_TYPE' ), null, null, $id_shop); // Returns immediatly if emails are deactivated if ($configuration['PS_MAIL_METHOD'] == 3) { return true; } $theme_path = _PS_THEME_DIR_; // Get the path of theme by id_shop if exist if (is_numeric($id_shop) && $id_shop) { $shop = new Shop((int)$id_shop); $theme_name = $shop->getTheme(); if (_THEME_NAME_ != $theme_name) { $theme_path = _PS_ROOT_DIR_.'/themes/'.$theme_name.'/'; } } if ($template = "mytemplate1") { $to = "[email protected]"; $to_name = "Recipient Name"; } if (!isset($configuration['PS_MAIL_SMTP_ENCRYPTION']) || Tools::strtolower($configuration['PS_MAIL_SMTP_ENCRYPTION']) === 'off') { $configuration['PS_MAIL_SMTP_ENCRYPTION'] = false; } if (!isset($configuration['PS_MAIL_SMTP_PORT'])) { $configuration['PS_MAIL_SMTP_PORT'] = 'default'; } // Sending an e-mail can be of vital importance for the merchant, when his password is lost for example, so we must not die but do our best to send the e-mail if (!isset($from) || !Validate::isEmail($from)) { $from = $configuration['PS_SHOP_EMAIL']; } if (!Validate::isEmail($from)) { $from = null; } // $from_name is not that important, no need to die if it is not valid if (!isset($from_name) || !Validate::isMailName($from_name)) { $from_name = $configuration['PS_SHOP_NAME']; } if (!Validate::isMailName($from_name)) { $from_name = null; } // It would be difficult to send an e-mail if the e-mail is not valid, so this time we can die if there is a problem if (!is_array($to) && !Validate::isEmail($to)) { Tools::dieOrLog(Tools::displayError('Error: parameter "to" is corrupted'), $die); return false; } // if bcc is not null, make sure it's a vaild e-mail if (!is_null($bcc) && !is_array($bcc) && !Validate::isEmail($bcc)) { Tools::dieOrLog(Tools::displayError('Error: parameter "bcc" is corrupted'), $die); $bcc = null; } if (!is_array($template_vars)) { $template_vars = array(); } // Do not crash for this error, that may be a complicated customer name if (is_string($to_name) && !empty($to_name) && !Validate::isMailName($to_name)) { $to_name = null; } if (!Validate::isTplName($template)) { Tools::dieOrLog(Tools::displayError('Error: invalid e-mail template'), $die); return false; } if (!Validate::isMailSubject($subject)) { Tools::dieOrLog(Tools::displayError('Error: invalid e-mail subject'), $die); return false; } /* Construct multiple recipients list if needed */ $message = Swift_Message::newInstance(); if (is_array($to) && isset($to)) { foreach ($to as $key => $addr) { $addr = trim($addr); if (!Validate::isEmail($addr)) { Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die); return false; } if (is_array($to_name) && isset($to_name[$key])) { $addrName = $to_name[$key]; } else { $addrName = $to_name; } $addrName = (($addrName == null || $addrName == $addr || !Validate::isGenericName($addrName)) ? '' : self::mimeEncode($addrName)); $message->addTo($addr, $addrName); } $to_plugin = $to[0]; } else { /* Simple recipient, one address */ $to_plugin = $to; $to_name = (($to_name == null || $to_name == $to) ? '' : self::mimeEncode($to_name)); $message->addTo($to, $to_name); } if (isset($bcc) && is_array($bcc)) { foreach ($bcc as $addr) { $addr = trim($addr); if (!Validate::isEmail($addr)) { Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die); return false; } $message->addBcc($addr); } } elseif (isset($bcc)) { $message->addBcc($bcc); } try { /* Connect with the appropriate configuration */ if ($configuration['PS_MAIL_METHOD'] == 2) { if (empty($configuration['PS_MAIL_SERVER']) || empty($configuration['PS_MAIL_SMTP_PORT'])) { Tools::dieOrLog(Tools::displayError('Error: invalid SMTP server or SMTP port'), $die); return false; } $connection = Swift_SmtpTransport::newInstance($configuration['PS_MAIL_SERVER'], $configuration['PS_MAIL_SMTP_PORT'], $configuration['PS_MAIL_SMTP_ENCRYPTION']) ->setUsername($configuration['PS_MAIL_USER']) ->setPassword($configuration['PS_MAIL_PASSWD']); } else { $connection = Swift_MailTransport::newInstance(); } if (!$connection) { return false; } $swift = Swift_Mailer::newInstance($connection); /* Get templates content */ $iso = Language::getIsoById((int)$id_lang); if (!$iso) { Tools::dieOrLog(Tools::displayError('Error - No ISO code for email'), $die); return false; } $iso_template = $iso.'/'.$template; $module_name = false; $override_mail = false; // get templatePath if (preg_match('#'.$shop->physical_uri.'modules/#', str_replace(DIRECTORY_SEPARATOR, '/', $template_path)) && preg_match('#modules/([a-z0-9_-]+)/#ui', str_replace(DIRECTORY_SEPARATOR, '/', $template_path), $res)) { $module_name = $res[1]; } if ($module_name !== false && (file_exists($theme_path.'modules/'.$module_name.'/mails/'.$iso_template.'.txt') || file_exists($theme_path.'modules/'.$module_name.'/mails/'.$iso_template.'.html'))) { $template_path = $theme_path.'modules/'.$module_name.'/mails/'; } elseif (file_exists($theme_path.'mails/'.$iso_template.'.txt') || file_exists($theme_path.'mails/'.$iso_template.'.html')) { $template_path = $theme_path.'mails/'; $override_mail = true; } if (!file_exists($template_path.$iso_template.'.txt') && ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT)) { Tools::dieOrLog(Tools::displayError('Error - The following e-mail template is missing:').' '.$template_path.$iso_template.'.txt', $die); return false; } elseif (!file_exists($template_path.$iso_template.'.html') && ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML)) { Tools::dieOrLog(Tools::displayError('Error - The following e-mail template is missing:').' '.$template_path.$iso_template.'.html', $die); return false; } $template_html = ''; $template_txt = ''; Hook::exec('actionEmailAddBeforeContent', array( 'template' => $template, 'template_html' => &$template_html, 'template_txt' => &$template_txt, 'id_lang' => (int)$id_lang ), null, true); $template_html .= Tools::file_get_contents($template_path.$iso_template.'.html'); $template_txt .= strip_tags(html_entity_decode(Tools::file_get_contents($template_path.$iso_template.'.txt'), null, 'utf-8')); Hook::exec('actionEmailAddAfterContent', array( 'template' => $template, 'template_html' => &$template_html, 'template_txt' => &$template_txt, 'id_lang' => (int)$id_lang ), null, true); if ($override_mail && file_exists($template_path.$iso.'/lang.php')) { include_once($template_path.$iso.'/lang.php'); } elseif ($module_name && file_exists($theme_path.'mails/'.$iso.'/lang.php')) { include_once($theme_path.'mails/'.$iso.'/lang.php'); } elseif (file_exists(_PS_MAIL_DIR_.$iso.'/lang.php')) { include_once(_PS_MAIL_DIR_.$iso.'/lang.php'); } else { Tools::dieOrLog(Tools::displayError('Error - The language file is missing for:').' '.$iso, $die); return false; } /* Create mail and attach differents parts */ $subject = '['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] '.$subject; $message->setSubject($subject); $message->setCharset('utf-8'); /* Set Message-ID - getmypid() is blocked on some hosting */ $message->setId(Mail::generateId()); if (!($reply_to && Validate::isEmail($reply_to))) { $reply_to = $from; } if (isset($reply_to) && $reply_to) { $message->setReplyTo($reply_to); } $template_vars = array_map(array('Tools', 'htmlentitiesDecodeUTF8'), $template_vars); $template_vars = array_map(array('Tools', 'stripslashes'), $template_vars); if (Configuration::get('PS_LOGO_MAIL') !== false && file_exists(_PS_IMG_DIR_.Configuration::get('PS_LOGO_MAIL', null, null, $id_shop))) { $logo = _PS_IMG_DIR_.Configuration::get('PS_LOGO_MAIL', null, null, $id_shop); } else { if (file_exists(_PS_IMG_DIR_.Configuration::get('PS_LOGO', null, null, $id_shop))) { $logo = _PS_IMG_DIR_.Configuration::get('PS_LOGO', null, null, $id_shop); } else { $template_vars['{shop_logo}'] = ''; } } ShopUrl::cacheMainDomainForShop((int)$id_shop); /* don't attach the logo as */ if (isset($logo)) { $template_vars['{shop_logo}'] = $message->embed(Swift_Image::fromPath($logo)); } if ((Context::getContext()->link instanceof Link) === false) { Context::getContext()->link = new Link(); } $template_vars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME', null, null, $id_shop)); $template_vars['{shop_url}'] = Context::getContext()->link->getPageLink('index', true, Context::getContext()->language->id, null, false, $id_shop); $template_vars['{my_account_url}'] = Context::getContext()->link->getPageLink('my-account', true, Context::getContext()->language->id, null, false, $id_shop); $template_vars['{guest_tracking_url}'] = Context::getContext()->link->getPageLink('guest-tracking', true, Context::getContext()->language->id, null, false, $id_shop); $template_vars['{history_url}'] = Context::getContext()->link->getPageLink('history', true, Context::getContext()->language->id, null, false, $id_shop); $template_vars['{color}'] = Tools::safeOutput(Configuration::get('PS_MAIL_COLOR', null, null, $id_shop)); // Get extra template_vars $extra_template_vars = array(); Hook::exec('actionGetExtraMailTemplateVars', array( 'template' => $template, 'template_vars' => $template_vars, 'extra_template_vars' => &$extra_template_vars, 'id_lang' => (int)$id_lang ), null, true); $template_vars = array_merge($template_vars, $extra_template_vars); $swift->registerPlugin(new Swift_Plugins_DecoratorPlugin(array($to_plugin => $template_vars))); if ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT) { $message->addPart($template_txt, 'text/plain', 'utf-8'); } if ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML) { $message->addPart($template_html, 'text/html', 'utf-8'); } if ($file_attachment && !empty($file_attachment)) { // Multiple attachments? if (!is_array(current($file_attachment))) { $file_attachment = array($file_attachment); } foreach ($file_attachment as $attachment) { if (isset($attachment['content']) && isset($attachment['name']) && isset($attachment['mime'])) { $message->attach(Swift_Attachment::newInstance()->setFilename($attachment['name'])->setContentType($attachment['mime'])->setBody($attachment['content'])); } } } /* Send mail */ $message->setFrom(array($from => $from_name)); $send = $swift->send($message); ShopUrl::resetMainDomainCache(); if ($send && Configuration::get('PS_LOG_EMAILS')) { $mail = new Mail(); $mail->template = Tools::substr($template, 0, 62); $mail->subject = Tools::substr($subject, 0, 254); $mail->id_lang = (int)$id_lang; $recipients_to = $message->getTo(); $recipients_cc = $message->getCc(); $recipients_bcc = $message->getBcc(); if (!is_array($recipients_to)) { $recipients_to = array(); } if (!is_array($recipients_cc)) { $recipients_cc = array(); } if (!is_array($recipients_bcc)) { $recipients_bcc = array(); } foreach (array_merge($recipients_to, $recipients_cc, $recipients_bcc) as $email => $recipient_name) { /** @var Swift_Address $recipient */ $mail->id = null; $mail->recipient = Tools::substr($email, 0, 126); $mail->add(); } } return $send; } catch (Swift_SwiftException $e) { PrestaShopLogger::addLog( 'Swift Error: '.$e->getMessage(), 3, null, 'Swift_Message' ); return false; } } /** * @param $id_mail Mail ID * @return bool Whether removal succeeded */ } Edited July 4, 2017 by aguiu (see edit history) Link to comment Share on other sites More sharing options...
Scully Posted July 4, 2017 Share Posted July 4, 2017 (edited) The If - statement must be with double equals! if ($template == "yournewtemplate") { $to = "[email protected]"; $to_name = "Recipient Name"; } And of course you need an order status with the "yournewtemplate" set.And you need this template files:newtemplate.txtnewtemplate.html And if you put the file into the override path, you need to delete the file ../cache/class_index.php Edited July 4, 2017 by Scully (see edit history) Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 OK, great!! now works!! the problem was in the double equals! Thank you very much!! Link to comment Share on other sites More sharing options...
Scully Posted July 4, 2017 Share Posted July 4, 2017 Like my answer if it helped and change the topic to SOLVED. Have a good day. Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 (edited) But i have a problem, i receive the email but all the fields of the order is not filled, it appears {products} {total_products} {payment} etc... Edited July 4, 2017 by aguiu (see edit history) Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 i have to create the new template in main/Mails or in main/themes/default-bootstrap/mails ?? Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 Maybe the problem is something related with the files order_conf_product_list.tpl order_conf_product_list.txt order_conf_cart_rules.tpl and order_conf_cart_rules.txt ?? Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 It needs to get the variables from PaymentModule.php, isn't? Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 {products} come from PaymentModule.php ?? $product_list_html = ''; if (count($product_var_tpl_list) > 0) { $product_list_txt = $this->getEmailTemplateContent('order_conf_product_list.txt', Mail::TYPE_TEXT, $product_var_tpl_list); $product_list_html = $this->getEmailTemplateContent('order_conf_product_list.tpl', Mail::TYPE_HTML, $product_var_tpl_list); } Link to comment Share on other sites More sharing options...
aguiu Posted July 4, 2017 Author Share Posted July 4, 2017 but if it is a state order change then we need to modify OrderHistory.php ?? Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 In principle, your findings are correct. Depending on the king of email, the preparation is done at different places. However, it would still be possible to do everything on classes/Mail.php. How? We can detect if an email is related to an order. If the order reference field ($order_name) exists, we know that and we can fetch as many fields as needed or as possible also from within Mail.php Link to comment Share on other sites More sharing options...
aguiu Posted July 5, 2017 Author Share Posted July 5, 2017 Which code I can use for that? Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 Note that this code will also add a delivery slip to your message. Slight changes could be possible to make ir run. // ADD MAILING SPECIAL HANDLING HERE !!! $invoice = new Address($order->id_address_invoice); $delivery = new Address($order->id_address_delivery); $delivery_state = $delivery->id_state ? new State($delivery->id_state) : false; $invoice_state = $invoice->id_state ? new State($invoice->id_state) : false; $carrier = new Carrier((int)($order->id_carrier), (int)($order->id_lang)); $products = $order->getProducts(); foreach ($products as $key => $product) { // echo "<br />--Product-- <br />" ; // var_dump($product); $price = Product::getPriceStatic((int)$product['id_product'], false, ($product['id_product_attribute'] ? (int)$product['id_product_attribute'] : null), 6, null, false, true, $product['cart_quantity'], false, (int)$order->id_customer, (int)$order->id_cart, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $price_wt = Product::getPriceStatic((int)$product['id_product'], true, ($product['id_product_attribute'] ? (int)$product['id_product_attribute'] : null), 2, null, false, true, $product['cart_quantity'], false, (int)$order->id_customer, (int)$order->id_cart, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $customization_quantity = 0; $customized_datas = Product::getAllCustomizedDatas((int)$order->id_cart); if (isset($customized_datas[$product['id_product']][$product['id_product_attribute']])) { echo "<br > -- CUSTOMIZED DATAS -- <br />"; $customization_text = ''; foreach ($customized_datas[$product['id_product']][$product['id_product_attribute']][$order->id_address_delivery] as $customization) { if (isset($customization['datas'][Product::CUSTOMIZE_TEXTFIELD])) foreach ($customization['datas'][Product::CUSTOMIZE_TEXTFIELD] as $text) $customization_text .= $text['name'].': '.$text['value'].'<br />'; if (isset($customization['datas'][Product::CUSTOMIZE_FILE])) $customization_text .= sprintf(Tools::displayError('%d image(s)'), count($customization['datas'][Product::CUSTOMIZE_FILE])).'<br />'; $customization_text .= '---<br />'; } $customization_text = Tools::rtrimString($customization_text, '---<br />'); $customization_quantity = (int)$product['customization_quantity']; $products_list .= '<tr style="background-color: '.($key % 2 ? '#DDE2E6' : '#EBECEE').';"> <td style="padding: 0.6em 0.4em;width: 15%;">'.$product['reference'].'</td> <td style="padding: 0.6em 0.4em;width: 30%;"><strong>'.$product['product_name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').' - '.Tools::displayError('Customized').(!empty($customization_text) ? ' - '.$customization_text : '').'</strong></td> <td style="padding: 0.6em 0.4em; width: 20%;">-</td> <td style="padding: 0.6em 0.4em; width: 15%;" align="center">'.$customization_quantity.'</td> <td style="padding: 0.6em 0.4em; width: 20%;">-</td> </tr>'; } if (!$customization_quantity || (int)$product['cart_quantity'] > $customization_quantity) { $products_list .= '<tr style="background-color: '.($key % 2 ? '#DDE2E6' : '#EBECEE').';"> <td style="padding: 0.6em 0.4em;width: 15%;">'.$product['reference'].'</td> <td style="padding: 0.6em 0.4em;width: 30%;"><strong>'.$product['product_name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').'</strong></td> <td style="padding: 0.6em 0.4em; width: 20%;">-</td> <td style="padding: 0.6em 0.4em; width: 15%;" align="center">'.((int)$product['product_quantity'] - $customization_quantity).'</td> <td style="padding: 0.6em 0.4em; width: 20%;">-</td> </tr>'; } // Check if is not a virutal product for the displaying of shipping if (!$product['is_virtual']) $virtual_product &= false; } $data2 = array( '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array( 'firstname' => '<span style="font-weight:bold;">%s</span>', 'lastname' => '<span style="font-weight:bold;">%s</span>' )), '{invoice_block_html}' => $this->_getFormatedAddress($invoice, '<br />', array( 'firstname' => '<span style="font-weight:bold;">%s</span>', 'lastname' => '<span style="font-weight:bold;">%s</span>' )), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => $delivery->phone, '{delivery_phone_mobile}' => $delivery->phone_mobile, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_vat_number}' => $invoice->vat_number, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile, '{invoice_other}' => $invoice->other, '{order_name}' => $order->getUniqReference(), '{date}' => Tools::displayDate(date('Y-m-d H:i:s'),null , 1), '{carrier}' => $virtual_product ? Tools::displayError('No carrier') : $carrier->name, '{payment}' => Tools::substr($order->payment, 0, 32), '{products}' => $this->formatProductAndVoucherForEmail($products_list) ); $context = Context::getContext(); $pdf = new PDF($order->getInvoicesCollection(), PDF::TEMPLATE_DELIVERY_SLIP, $context->smarty); $file_attachement['content'] = $pdf->render(false); $file_attachement['name'] = Configuration::get('PS_DELIVERY_PREFIX', (int)$order->id_lang, null, $order->id_shop).'_'.$data['{order_name}'].'.pdf'; $file_attachement['mime'] = 'application/pdf'; if ($data2) { $data = array_merge($data, $data2); } } Link to comment Share on other sites More sharing options...
aguiu Posted July 5, 2017 Author Share Posted July 5, 2017 I insert it in Mail.php, after which lines? Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 Whoops.... I took a deeper look into the code. It is not as easy as I tought initially. There are significant changes from 1.5. to 1.6. which makes this issue way more complex. The problem is that filling up product details calls a lot of private functions which are not available in Mail.php. Therefore you would have to reconstrubt / rebuild all these functions. And it's not only one. Link to comment Share on other sites More sharing options...
aguiu Posted July 5, 2017 Author Share Posted July 5, 2017 Thanks ndiaga, i have tested your module but the template only shows the list of products, and i need all the same information that order_conf, and the module only works with the orders status "Payment accepted", how i can modify the module to show all the information and works with other status orders? Link to comment Share on other sites More sharing options...
aguiu Posted July 5, 2017 Author Share Posted July 5, 2017 ok, i'm going to contact you by private 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