alexnoa Posted February 2, 2013 Share Posted February 2, 2013 Hola a todos, llevo poco manejando prestashop y estoy intentado todavía cogerle el punto. Necesito añadir nuevas variables en los correos que se generan al confirmar un pedido. También necesito cambiar el número de correos generados. Vamos en general, necesito controlar el proceso. He localizado los html de los correos en la carpeta mail divididos por idiomas pero no consigo localizar ni el archivo php que los manda, ni siquiera siguiendo el proceso de pago. ¿Cual o cuales son los archivos que controlan el envio? ¿Con que clase se realiza el envío? Link to comment Share on other sites More sharing options...
Inntimo Posted April 8, 2013 Share Posted April 8, 2013 Hola! No se si todavia te servira la respuesta. Por lo general las variables de los mails se genera en /classes/PaymentModule.php Ahi se le pueden agregar las variables que necesites y despues pasarlos a las plantillas de los emails (en mails/idioma...) Un ejemplo: Le agrego el IVA para que lo envie al mail.... Alrededor de la linea 447 del archivo PaymentModule.php (ubicado en la carpeta classes) encontraremos algo como esto: // Send an e-mail to customer if ($id_order_state != Configuration::get('PS_OS_ERROR') AND $id_order_state != Configuration::get('PS_OS_CANCELED') AND $customer->id) { $invoice = new Address((int)($order->id_address_invoice)); $delivery = new Address((int)($order->id_address_delivery)); $carrier = new Carrier((int)($order->id_carrier), $order->id_lang); $delivery_state = $delivery->id_state ? new State((int)($delivery->id_state)) : false; $invoice_state = $invoice->id_state ? new State((int)($invoice->id_state)) : false; $total_paid_notax = $order->total_products + $order->total_shipping + $order->total_wrapping - $order->total_discounts; $iva = $total_paid_notax * 0.21 ; //En caso de que el iva sea del 21% $total_productos = $total_paid_notax - $order->total_shipping; Fijate que las dos ultimas lineas las agregue yo. Puedes hacer los calculos que necesites, y utilizar, si es necesario, las variables que estan más arriba de ese mismo archivo en la linea 102 //Copy data from cart Una vez que haces los calculos correspondientes, necesitas pasar esas variables para que las envie a los mails. Así que bajas un poco mas en ese mismo archivo y alrededor de la linea 461 se encuentran todas las variables que se envian a los mails... ahi mismo, debajo, deberias agregar las que creaste. En el ejemplo las agregué justo casi al final: $data = array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{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="color:#DB3484; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')), '{invoice_block_html}' => $this->_getFormatedAddress($invoice, "<br />", array( 'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:#DB3484; 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 : $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}' => sprintf("#%06d", (int)($order->id)), '{date}' => Tools::displayDate(date('Y-m-d H:i:s'), (int)($order->id_lang), 1), '{carrier}' => $carrier->name, '{payment}' => Tools::substr($order->payment, 0, 32), '{products}' => $productsList, '{discounts}' => $discountsList, '{total_paid}' => Tools::displayPrice($order->total_paid, $currency, false), '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $currency, false), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $currency, false), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $currency, false), '{total_tax}' => Tools::displayPrice($total_tax, $currency, false, false), '{total_paid_notax}' => $total_paid_notax, '{iva}' => $iva, '{total_productos}' => $total_productos, '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency, false)); Estas ultimas son las que van al mail. Asi que una vez hecho esto solo queda agregar esas variables en los mails. Para eso vas a la carpeta mails, buscas el idioma correspondiente y ubicas el archivo order_conf.html (y el txt si lo utilizas tambien) y le agregas las variables que necesites.... Algo como: Total productos sin iva {total_productos} IVA 21% {iva} NOTA: Esto funciona perfecto con el sistema de pago por transferencia bancaria, pero hay algunos modulos de pago que tienen declaradas sus propias variables y las envia desde el mismo modulo, sin hacerle caso a lo que cambies o agregues en el PaymentModule.php. Asi que siempre es recomendable revisar los otros sistemas de pago para ver si tiene sus propias variables o no. Me paso con el modulo de pago contra reembolso de Maofree. Con los otros sistemas de pago me funcionaba bien, menos con el de contra reembolso. Revisando el modulo encontre que las variables las tiene en el archivo php del modulo (en este caso estaba en maofree_cashondeliveryfee.php) Asi que hice lo mismo que en el archivo PaymentModule.php.... tienen la misma estructura.... Espero le sirva a alguien mas.... cualquier correccion es bienvenida, no soy un experto y siemrpe estamos para aprender.... Link to comment Share on other sites More sharing options...
carlosco Posted May 15, 2013 Share Posted May 15, 2013 PERFECTO!!!! Justo lo que iba buscando. Me has resulelto un gran marrón. Muchas gracias!!! Link to comment Share on other sites More sharing options...
Recommended Posts