Jump to content

Emplacement De L'appel De La Fonction Envoyant Mails Avec Titre = Statut De Commande


Recommended Posts

Bonjour à tous,

 

voilà ça fait quelques heures que je cherche autant dans les fichiers presta que sur le forum, le fichier contenant (edit:) L'appel de la fonction qui envoi un mail a l'admin de la boutique lors d'une commande avec comme titre le statut de la commande (ex: En attente de réapprovisionnement/En cours de préparation).

Ce que je voudrais faire ce serait changer le titre du sujet du mail envoyé afin d'y rajouter le n°de commande.

Si quelqu'un connaît le nom de ce fameux fichier, qu'il n'hésite pas a me le dire :)

Edited by Alexenn (see edit history)
Link to comment
Share on other sites

Merci pour votre réponse.

 

Autant pour moi j'ai marqué que je recherchais la fonction, mais je recherche en fait l'appel de cette même fonction pour envoyer un mail a l'administrateur afin de l'informer du statut d'une commande.

Link to comment
Share on other sites

Ha ! je te remercie c'est exactement ça ;)

 

C'est pour moi la première fois que je touche a un override, j'ai bien suivi les instructions que j'ai trouvé sur le manuel de prestashop, c'est-à-dire créer le fichier OrderHistory.php dans override/classes/order, y créer la classe OrderHistory qui hérite de OrderHistoryCore, je met la fonction qui m'intéresse, sendEmail avec la modification que je veux, et supprimer cache/class_index.php mais malgré tout cela ma surchage ne semble pas prise en compte,

Ai-je oublié quelque chose ? J'ai lu qu'il fallait réinstaller les modules dans le cas d'une surchage, mais étant donné que ce n'est pas un module je ne suis pas sûr de la démarche.

 

Tout ce que je veux faire c'est changer le sujet du mail envoyé afin de recevoir un seul mail lors d'une commande avec un produit en rupture de stock, ce mail sera de la même forme que le mail que l'on reçoit lors d'une nouvelle commande (sujet du mail et corps du message), mais j'y rajouterais juste une abréviation dans le sujet afin de savoir qu'un produit est en rupture, c'est juste pour éviter d'avoir trop de mails.

Je ne sais pas si l'emploie d'un module aurait été mieux ? Dans le sens où je peux juste effectuer une action une fois que la commande a été passé et non pas modifier certains mécanismes durant cette commande, si ?

Edited by Alexenn (see edit history)
Link to comment
Share on other sites

<?
class OrderHistory extends OrderHistoryCore
{
	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'];
            $data = array(
                '{lastname}' => $result['lastname'],
                '{firstname}' => $result['firstname'],
                '{id_order}' => (int)$this->id_order,
                '{order_name}' => $order->getUniqReference()
            );

            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 ($template_vars) {
                $data = array_merge($data, $template_vars);
            }

            $data['{total_paid}'] = Tools::displayPrice((float)$order->total_paid, new Currency((int)$order->id_currency), false);

            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'])) {
                    $context = Context::getContext();
                    $invoice = $order->getInvoicesCollection();
                    $file_attachement = array();

                    if ($result['pdf_invoice'] && (int)Configuration::get('PS_INVOICE') && $order->invoice_number) {
                        Hook::exec('actionPDFInvoiceRender', array('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', Context::getContext()->language->id, null, $order->id_shop).sprintf('%06d', $order->delivery_number).'.pdf';
                        $file_attachement['delivery']['mime'] = 'application/pdf';
                    }
                } else {
                    $file_attachement = null;
                }
				
				if(strpos($topic, "Commandé") !== false){
					 if (!Mail::Send((int)$order->id_lang, $result['template'], sprintf(Mail::l('Nouvelle commande : #%d - %s | RUPTURE DE STOCK', $mail_id_lang), $order->id, $order->reference), 
							$data, $result['email'], $result['firstname'].' '.$result['lastname'], null, null, $file_attachement, null, _PS_MAIL_DIR_, false, (int)$order->id_shop)) {
								return false;
					}
				}
				else{
					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;
    }
}
?>

Le voici ;)

 

J'ai la version 1.6.1.4 de Prestashop.

 

Effectivement j'avais pensé utiliser mail alert mais je croyais qu'il envoyait un mail aux acheteurs aussi. En fait je viens de me rendre compte que je me trompais dans mon approche, et l'utilisation de mail alert pourrait bien être plus intéressante, mais il me faudrait toujours savoir ce qui ne va pas dans mon override pour la méthode sendMail, afin d'éviter l'envoi d'un mail lors d'une rupture de stock.

Link to comment
Share on other sites

Non je ne veux pas envoyer de mails au clients effectivement c'est pour ça que je me suis trompé, étant donné que mon adresse mail d'envoi et de réception était la même je me suis un peu perdu.

 

Merci du conseil c'est ce que j'ai fais du coup ;) , je vais utiliser mail alert pour la rupture de stock et je bloque l'envoi de mails dans la méthode addWithemail si $order->current_state vaux la valeur des états pour lesquels je ne veux pas envoyer de mails.

Et a première vu l'override fonctionne correctement.

 

Je te remercie de m'avoir aidé et conseillé ;)

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...