Jump to content

<b> Retours produits : alerte email</b>


Recommended Posts

Bonjour,

 

Quelqu'un saurait comment faire pour déclencher la réception d'un e-mail lors d'une demande de retour produit ? Je sais que la question a déjà été posée pour les versions antérieures de Prestashop mais je n'ai rien trouvé concernant la version 1.6.

 

Merci d'avance.

 

P.S. : Inutile de me parler du module payant, je suis déjà au courant. :)

Link to comment
Share on other sites

Bonjour,

 

J'ai testé un truc qui fonctionne mais je pense qu'on peut encore l'améliorer.

Mais voilà déjà ce que j'ai commencé à faire :

 

Dans un premier temps, il faut aller dans le dossier mails et copier les fichiers order_merchant_comment.html et order_merchant_comment.txt que l'on renomme ensuite par exemple en order_return.html et order_return.txt. Dans ces nouveaux fichiers, on modifie le message comme on le souhaite, par ex. :

"Bonjour,

Vous avez reçu un message de <strong>{firstname} {lastname}</strong> concernant la commande ayant pour référence : <span style="color:#333; font-weight: bold;">{order_name}</span>.<br /><br />
<span style="color:#333"><strong>Message :</strong></span> {message}", etc.

 

On enregistre ces nouveaux fichiers dans le dossier mails.

 

Puis, dans le fichier OrderFollowController.php, on repère la ligne 41 :

 

if (Tools::isSubmit('submitReturnMerchandise'))
        {...

 

à l'intérieur de l'accolade, on met ce bout de code :

 

if (!Configuration::get('PS_MAIL_EMAIL_MESSAGE'))
                        $to = strval(Configuration::get('PS_SHOP_EMAIL'));
                    else
                    {
                        $to = new Contact((int)(Configuration::get('PS_MAIL_EMAIL_MESSAGE')));
                        $to = strval($to->email);
                    }
            $toName = strval(Configuration::get('PS_SHOP_NAME'));
            $customer = $this->context->customer;
            $returnText = Tools::getValue('returnText');
            
            if (Validate::isLoadedObject($customer))
                        Mail::Send($this->context->language->id, 'order_return', Mail::l('Demande de retour'),
                        array(
                            '{lastname}' => $customer->lastname,
                            '{firstname}' => $customer->firstname,
                            '{email}' => $customer->email,
                            '{id_order}' => (int)($order->id),
                            '{order_name}' => $order->getUniqReference(),
                            '{order_qte_input}' => $order_qte_input,
                            '{message}' => Tools::nl2br($returnText)
                        ),
                        $to, $toName, $customer->email, $customer->firstname.' '.$customer->lastname);

 

Voilà, jusque-là, on reçoit bien un mail intitulé "Demande de retour" avec la référence de la commande et le message du client. :) Mais le mieux serait d'avoir en plus des précisions concernant le(s) produit(s) concerné(s) et le nombre d'articles retournés.

A creuser donc...
 

Link to comment
Share on other sites

Je viens de tester, et malheureusement, chez moi ça ne marche pas.

 

Je vous joins une copie du code :

		if (Tools::isSubmit('submitReturnMerchandise'))
		{
			if (!Configuration::get('PS_MAIL_EMAIL_MESSAGE'))
                        $to = strval(Configuration::get('PS_SHOP_EMAIL'));
                    else
                    {
                        $to = new Contact((int)(Configuration::get('PS_MAIL_EMAIL_MESSAGE')));
                        $to = strval($to->email);
                    }
            $toName = strval(Configuration::get('PS_SHOP_NAME'));
            $customer = $this->context->customer;
            $returnText = Tools::getValue('returnText');
            
				if (Validate::isLoadedObject($customer))
                        Mail::Send($this->context->language->id, 'order_return', Mail::l('Demande de retour'),
                        array(
                            '{lastname}' => $customer->lastname,
                            '{firstname}' => $customer->firstname,
                            '{email}' => $customer->email,
                            '{id_order}' => (int)($order->id),
                            '{order_name}' => $order->getUniqReference(),
                            '{order_qte_input}' => $order_qte_input,
                            '{message}' => Tools::nl2br($returnText)
                        ),
                        $to, $toName, $customer->email, $customer->firstname.' '.$customer->lastname);
			$customizationQtyInput = Tools::getValue('customization_qty_input');
			$order_qte_input = Tools::getValue('order_qte_input');
			$customizationIds = Tools::getValue('customization_ids');

			if (!$id_order = (int)(Tools::getValue('id_order')))
				Tools::redirect('index.php?controller=history');
			if (!$order_qte_input && !$customizationQtyInput && !$customizationIds)
				Tools::redirect('index.php?controller=order-follow&errorDetail1');
			if (!$customizationIds && !$ids_order_detail = Tools::getValue('ids_order_detail'))
				Tools::redirect('index.php?controller=order-follow&errorDetail2');

			$order = new Order((int)($id_order));
			if (!$order->isReturnable()) Tools::redirect('index.php?controller=order-follow&errorNotReturnable');
			if ($order->id_customer != $this->context->customer->id)
				die(Tools::displayError());
			$orderReturn = new OrderReturn();
			$orderReturn->id_customer = (int)$this->context->customer->id;
			$orderReturn->id_order = $id_order;
			$orderReturn->question = strval(Tools::getValue('returnText'));
			if (empty($orderReturn->question))
				Tools::redirect('index.php?controller=order-follow&errorMsg&'.
					http_build_query(array(
						'ids_order_detail' => $ids_order_detail,
						'order_qte_input' => $order_qte_input,
						'id_order' => Tools::getValue('id_order'),
					)));

			if (!$orderReturn->checkEnoughProduct($ids_order_detail, $order_qte_input, $customizationIds, $customizationQtyInput))
				Tools::redirect('index.php?controller=order-follow&errorQuantity');

			$orderReturn->state = 1;
			$orderReturn->add();
			$orderReturn->addReturnDetail($ids_order_detail, $order_qte_input, $customizationIds, $customizationQtyInput);
			Hook::exec('actionOrderReturn', array('orderReturn' => $orderReturn));
			Tools::redirect('index.php?controller=order-follow');
		}

Désolé du pavet. J'ai essayé pas mal de façon, déplacé à la fin, décaller. La plupart du temps j'ai une page blanche quand je valide le retour.

Link to comment
Share on other sites

Essayez de remplacer toute la "public function postProcess()" par ça :

 

public function postProcess()
    {
        if (Tools::isSubmit('submitReturnMerchandise'))
        {
            
            $customizationQtyInput = Tools::getValue('customization_qty_input');
            $order_qte_input = Tools::getValue('order_qte_input');
            $customizationIds = Tools::getValue('customization_ids');

            if (!$id_order = (int)(Tools::getValue('id_order')))
                Tools::redirect('index.php?controller=history');
            if (!$order_qte_input && !$customizationQtyInput && !$customizationIds)
                Tools::redirect('index.php?controller=order-follow&errorDetail1');
            if (!$customizationIds && !$ids_order_detail = Tools::getValue('ids_order_detail'))
                Tools::redirect('index.php?controller=order-follow&errorDetail2');

            $order = new Order((int)($id_order));
            if (!$order->isReturnable()) Tools::redirect('index.php?controller=order-follow&errorNotReturnable');
            if ($order->id_customer != $this->context->customer->id)
                die(Tools::displayError());
            $orderReturn = new OrderReturn();
            $orderReturn->id_customer = (int)$this->context->customer->id;
            $orderReturn->id_order = $id_order;
            $orderReturn->question = strval(Tools::getValue('returnText'));
            if (empty($orderReturn->question))
                Tools::redirect('index.php?controller=order-follow&errorMsg&'.
                    http_build_query(array(
                        'ids_order_detail' => $ids_order_detail,
                        'order_qte_input' => $order_qte_input,
                        'id_order' => Tools::getValue('id_order'),
                    )));

            if (!$orderReturn->checkEnoughProduct($ids_order_detail, $order_qte_input, $customizationIds, $customizationQtyInput))
                Tools::redirect('index.php?controller=order-follow&errorQuantity');
            
            if (!Configuration::get('PS_MAIL_EMAIL_MESSAGE'))
                        $to = strval(Configuration::get('PS_SHOP_EMAIL'));
                    else
                    {
                        $to = new Contact((int)(Configuration::get('PS_MAIL_EMAIL_MESSAGE')));
                        $to = strval($to->email);
                    }
            $toName = strval(Configuration::get('PS_SHOP_NAME'));
            $customer = $this->context->customer;
            $returnText = Tools::getValue('returnText');
            
            if (Validate::isLoadedObject($customer))
                        Mail::Send($this->context->language->id, 'order_return', Mail::l('Return request'),
                        array(
                            '{lastname}' => $customer->lastname,
                            '{firstname}' => $customer->firstname,
                            '{email}' => $customer->email,
                            '{id_order}' => (int)($order->id),
                            '{order_name}' => $order->getUniqReference(),
                            '{order_qte_input}' => $order_qte_input,
                            '{message}' => Tools::nl2br($returnText)
                        ),
                        $to, $toName, $customer->email, $customer->firstname.' '.$customer->lastname);

            $orderReturn->state = 1;
            $orderReturn->add();
            $orderReturn->addReturnDetail($ids_order_detail, $order_qte_input, $customizationIds, $customizationQtyInput);
            Hook::exec('actionOrderReturn', array('orderReturn' => $orderReturn));
            Tools::redirect('index.php?controller=order-follow');
        }
    }

 

Et si ça ne fonctionne toujours pas, allez dans le dossier "config", éditez le fichier "defines.inc" et mettez la première ligne à "true", c'est-à-dire, remplacez "define('_PS_MODE_DEV_', false);" par : "define('_PS_MODE_DEV_', true);"

Comme ça, au lieu d'avoir une page blanche, vous aurez les erreurs affichées, ça vous permettra de savoir où se situe à peu près le problème. Mais quand votre boutique sera ouverte au public, n'oubliez pas de remettre le fichier comme il était avant, c'est-à-dire à "false".

Link to comment
Share on other sites

Ah, est-ce qu'il s'agit d'une première demande de retour pour la commande en question ? Parce qu'il faut savoir qu'il y a un bug avec les retours produits dans le BO. Concrètement, si on fait une demande de retour pour une commande, elle est bien listée dans le BO mais si on fait une deuxième demande de retour pour la même commande, elle ne s'affichera pas dans le BO. C'est un problème auquel je n'ai malheureusement pas la solution. D'ailleurs, vous pouvez retrouver le sujet ici : http://www.prestashop.com/forums/topic/331570-bug-au-niveau-des-retours-produit/

N'hésitez pas à y laisser un commentaire. Plus on sera nombreux, plus on aura des chances d'avoir des réponses. :)

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...