Mikael Mortensen Posted March 27, 2019 Share Posted March 27, 2019 (edited) Hi, I use Prestashop 1.6, and generate a Credit slip when customers return products from their ordre. When creating a credit slip in the order, using the "partial refund" function, the customer automatically gets an e-mail, which says that a credit slip has been created. The e-mail is based on the template named credit_slip.html. Is it possible to attach the credit slip as a PDF to this e-mail automatically? I've been searching the forum, and can see, that I might have to change something in AdminOrdersController. But what should I Change? Maybe something around line 990?: if (!OrderSlip::create($order, $product_list, $shipping, $voucher, $choosen)) { $this->errors[] = Tools::displayError('A credit slip cannot be generated. '); } else { Hook::exec('actionOrderSlipAdd', array('order' => $order, 'productList' => $full_product_list, 'qtyList' => $full_quantity_list), null, false, true, false, $order->id_shop); @Mail::Send( (int)$order->id_lang, 'credit_slip', Mail::l('New credit slip regarding your order', (int)$order->id_lang), $params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int)$order->id_shop ); } Hope you can help... Best regards, Mikael Edited September 25, 2020 by Mikael Mortensen Solved (see edit history) Link to comment Share on other sites More sharing options...
Casper_O Posted September 25, 2020 Share Posted September 25, 2020 (edited) In AdminOrdersController.php look for OrderSlip::create I changed it to this around liine 990 to the following in the else function if (!OrderSlip::create($order, $product_list, $shipping, $voucher, $choosen)) { $this->errors[] = Tools::displayError('A credit slip cannot be generated. '); } else { Hook::exec('actionOrderSlipAdd', array('order' => $order, 'productList' => $full_product_list, 'qtyList' => $full_quantity_list), null, false, true, false, $order->id_shop); // Get id_order_slip based on customer ID and Order ID $orderSlipTemp = OrderSlip::getOrdersSlip((int)($order->id_customer), (int)($order->id), true); // Create objects and PDF $orderSlip = new OrderSlip((int) ($orderSlipTemp[0]['id_order_slip'])); $orderNew = new Order((int)$orderSlip->id_order); if (!Validate::isLoadedObject($orderNew)) die(Tools::displayError('The order cannot be found within your database.')); $orderNew->products = OrderSlip::getOrdersSlipProducts($orderSlip->id, $orderNew); $pdf = new PDF($orderSlip, PDF::TEMPLATE_ORDER_SLIP, $this->context->smarty); $file_attachement['content'] = $pdf->render(false); $file_attachement['name'] = $pdf->filename; $file_attachement['mime'] = 'application/pdf'; @Mail::Send( (int)$order->id_lang, 'credit_slip', Mail::l('New credit slip regarding your order', (int)$order->id_lang), $params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, $file_attachement, null, _PS_MAIL_DIR_, true, (int)$order->id_shop ); } I also found around like 725 and changed it to the following if (!OrderSlip::create($order, $order_detail_list, $shipping_cost_amount, $voucher, $choosen, (Tools::getValue('TaxMethod') ? false : true))) { $this->errors[] = Tools::displayError('You cannot generate a partial credit slip.'); } else { Hook::exec('actionOrderSlipAdd', array('order' => $order, 'productList' => $order_detail_list, 'qtyList' => $full_quantity_list), null, false, true, false, $order->id_shop); // Get id_order_slip based on customer ID and Order ID $orderSlipTemp = OrderSlip::getOrdersSlip((int)($order->id_customer), (int)($order->id), true); // Create objects and PDF $orderSlip = new OrderSlip((int) ($orderSlipTemp[0]['id_order_slip'])); $orderNew = new Order((int)$orderSlip->id_order); if (!Validate::isLoadedObject($orderNew)) die(Tools::displayError('The order cannot be found within your database.')); $orderNew->products = OrderSlip::getOrdersSlipProducts($orderSlip->id, $orderNew); $pdf = new PDF($orderSlip, PDF::TEMPLATE_ORDER_SLIP, $this->context->smarty); $file_attachement['content'] = $pdf->render(false); $file_attachement['name'] = $pdf->filename; $file_attachement['mime'] = 'application/pdf'; $customer = new Customer((int)($order->id_customer)); $params['{lastname}'] = $customer->lastname; $params['{firstname}'] = $customer->firstname; $params['{id_order}'] = $order->id; $params['{order_name}'] = $order->getUniqReference(); @Mail::Send( (int)$order->id_lang, 'credit_slip', Mail::l('New credit slip regarding your order', (int)$order->id_lang), $params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, $file_attachement, null, _PS_MAIL_DIR_, true, (int)$order->id_shop ); } Edited September 25, 2020 by Casper_O (see edit history) Link to comment Share on other sites More sharing options...
Mikael Mortensen Posted September 25, 2020 Author Share Posted September 25, 2020 Hi Capser, Thanks for your solution. I had to pay a guy to make it 😊 Best regards, Mikael Link to comment Share on other sites More sharing options...
Casper_O Posted September 25, 2020 Share Posted September 25, 2020 Okay good to hear you had it sorted out. Took me a few mins to figure out myself and it seems like a few people ask for the solution, so i thought i better post it here for other to find Link to comment Share on other sites More sharing options...
Spouter Posted January 6, 2022 Share Posted January 6, 2022 Hello, I'm trying to do same for 1.7.8 version. But there is no AdminOrdersController.php I found similar file in classes/order/OrderHistory.php where is public function sendEmail($order, $template_vars = false) { $result = Db::getInstance()->getRow(' SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, c.`email`, os.`module_name`, os.`id_order_state`, os.`pdf_invoice`, os.`pdf_delivery` FROM `' . _DB_PREFIX_ . 'order_history` oh LEFT JOIN `' . _DB_PREFIX_ . 'orders` o ON oh.`id_order` = o.`id_order` LEFT JOIN `' . _DB_PREFIX_ . 'customer` c ON o.`id_customer` = c.`id_customer` LEFT JOIN `' . _DB_PREFIX_ . 'order_state` os ON oh.`id_order_state` = os.`id_order_state` LEFT JOIN `' . _DB_PREFIX_ . 'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = o.`id_lang`) WHERE oh.`id_order_history` = ' . (int) $this->id . ' AND os.`send_email` = 1'); if (isset($result['template']) && Validate::isEmail($result['email'])) { ShopUrl::cacheMainDomainForShop($order->id_shop); $topic = $result['osname']; $carrierUrl = ''; if (Validate::isLoadedObject($carrier = new Carrier((int) $order->id_carrier, $order->id_lang))) { $carrierUrl = $carrier->url; } $data = [ '{lastname}' => $result['lastname'], '{firstname}' => $result['firstname'], '{id_order}' => (int) $this->id_order, '{order_name}' => $order->getUniqReference(), '{followup}' => str_replace('@', $order->getWsShippingNumber(), $carrierUrl), '{shipping_number}' => $order->getWsShippingNumber(), ]; if ($result['module_name']) { $module = Module::getInstanceByName($result['module_name']); if (Validate::isLoadedObject($module) && isset($module->extra_mail_vars) && is_array($module->extra_mail_vars)) { $data = array_merge($data, $module->extra_mail_vars); } } if (is_array($template_vars)) { $data = array_merge($data, $template_vars); } $context = Context::getContext(); $data['{total_paid}'] = Tools::getContextLocale($context)->formatPrice((float) $order->total_paid, Currency::getIsoCodeById((int) $order->id_currency)); if (Validate::isLoadedObject($order)) { // Attach invoice and / or delivery-slip if they exists and status is set to attach them if (($result['pdf_invoice'] || $result['pdf_delivery'])) { $currentLanguage = $context->language; $orderLanguage = new Language((int) $order->id_lang); $context->language = $orderLanguage; $context->getTranslator()->setLocale($orderLanguage->locale); $invoice = $order->getInvoicesCollection(); $file_attachement = []; if ($result['pdf_invoice'] && (int) Configuration::get('PS_INVOICE') && $order->invoice_number) { Hook::exec('actionPDFInvoiceRender', ['order_invoice_list' => $invoice]); $pdf = new PDF($invoice, PDF::TEMPLATE_INVOICE, $context->smarty); $file_attachement['invoice']['content'] = $pdf->render(false); $file_attachement['invoice']['name'] = Configuration::get('PS_INVOICE_PREFIX', (int) $order->id_lang, null, $order->id_shop) . sprintf('%06d', $order->invoice_number) . '.pdf'; $file_attachement['invoice']['mime'] = 'application/pdf'; } if ($result['pdf_delivery'] && $order->delivery_number) { $pdf = new PDF($invoice, PDF::TEMPLATE_DELIVERY_SLIP, $context->smarty); $file_attachement['delivery']['content'] = $pdf->render(false); $file_attachement['delivery']['name'] = Configuration::get('PS_DELIVERY_PREFIX', (int) $order->id_lang, null, $order->id_shop) . sprintf('%06d', $order->delivery_number) . '.pdf'; $file_attachement['delivery']['mime'] = 'application/pdf'; } $context->language = $currentLanguage; $context->getTranslator()->setLocale($currentLanguage->locale); } else { $file_attachement = null; } if (!Mail::Send( (int) $order->id_lang, $result['template'], $topic, $data, $result['email'], $result['firstname'] . ' ' . $result['lastname'], null, null, $file_attachement, null, _PS_MAIL_DIR_, false, (int) $order->id_shop )) { return false; } } ShopUrl::resetMainDomainCache(); } return true; } Probably best place is in "else" where is $file_attachement = null; But i dont know how to determinate when order has credit slip and when not. If there is anyone who is able to do it for 1.7.8.1 - I will buy him more than one coffee I need attach credit slip to "credit_slip" e-mail template and change order status to custom status with ID 17. Link to comment Share on other sites More sharing options...
Mikael Mortensen Posted January 26, 2022 Author Share Posted January 26, 2022 Hi Spouter, Did you find a solution for Prestashop 1.7.8? Best regards, Mikael Link to comment Share on other sites More sharing options...
jivemoj473 Posted July 13, 2022 Share Posted July 13, 2022 On 1/26/2022 at 1:20 PM, Mikael Mortensen said: Hi Spouter, Did you find a solution for Prestashop 1.7.8? Best regards, Mikael Hi Mikhael and Spouter! Did you finally find a solution for PS 1.7.8? Thanks Link to comment Share on other sites More sharing options...
Spouter Posted July 13, 2022 Share Posted July 13, 2022 No. But i have custom made module. 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