Notification ORDER_SUPPLIER_APPROVE vers créateur commande client

Bonjour,
J’ai paramétré le module notifications pour que l’action ORDER_SUPPLIER_VALIDATE envoie un email à un approbateur fixe. Ça fonctionne très bien.
Une fois l’approbation donnée, j’aurais voulu qu’un email soit envoyé en retour au demandeur, c’est à dire l’utilisateur qui a créé la commande fournisseur. Mais toujours dans ce même module, pour l’action ORDER_SUPPLIER_APPROVE, on ne peut utiliser que le mot clé SUPERVISOREMAIL, et sauf erreur rien pour spécifier le créateur de l’objet.
Par curiosité, j’ai décortiqué le code de la classe Notify, et il ne semble effectivement rien gérer de plus comme mot clé.

Comme le cas d’usage me parait spontanément assez naturel, peut-être n’utilisais-je pas la bonne méthode pour le paramétrer ?

Merci par avance de vos retours

En l’absence de réponse, j’ai fini par me créer un petit trigger pour faire le boulot. J’espère ne pas avoir dupliqué une fonctionnalité standard.

Bonjour,
Pourriez vous partager votre solution svp ?
Merci :slight_smile:

@droubaud

Ou la pousser sur GitHub en tant que Pull request !

1 « J'aime »

Bonjour,

On va mettre le code en direct sur le forum. Sur Git, c’est un peu le bazar pour la retrouver après :wink:

<?php
/* Copyright (C) 2019 SuperAdmin
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * \file    core/triggers/interface_99_modQSE_QSETriggers.class.php
 * \ingroup qse
 * \brief   Example trigger.
 *
 * Put detailed description here.
 *
 * \remarks You can create other triggers by copying this one.
 * - File name should be either:
 *      - interface_99_modQSE_MyTrigger.class.php
 *      - interface_99_all_MyTrigger.class.php
 * - The file must stay in core/triggers
 * - The class name must be InterfaceMytrigger
 * - The constructor method must be named InterfaceMytrigger
 * - The name property name must be MyTrigger
 */

require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
require_once DOL_DOCUMENT_ROOT . "/core/class/commonobject.class.php";
require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
require_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php';

/**
 *  Class InterfaceSupplierOrderApprove : appelée sur triggers
 *   - approbation d'une commande fournisseur ORDER_SUPPLIER_APPROVE
 *   - refus d'approbation d'une commande fournisseur ORDER_SUPPLIER_REFUSE
 *  Envoie un email à l'auteur de la commande pour lui signifier l'approbation ou le refus de la commande fournisseur
 *
 */
class InterfaceSupplierOrderApprove extends DolibarrTriggers
{
	/**
	 * @var DoliDB Database handler
	 */
	protected $db;

	/**
	 * Constructor
	 *
	 * @param DoliDB $db Database handler
	 */
	public function __construct($db)
	{
		$this->db = $db;

		$this->name = preg_replace('/^Interface/i', '', get_class($this));
		$this->family = "Production";
		$this->description = "Workflow approbation ou refus d'une commande fournisseur";
		// 'development', 'experimental', 'dolibarr' or version
		$this->version = 'development';
		$this->picto = 'qse@qse';
	}

	/**
	 * Trigger name
	 *
	 * @return string Name of trigger file
	 */
	public function getName()
	{
		return $this->name;
	}

	/**
	 * Trigger description
	 *
	 * @return string Description of trigger file
	 */
	public function getDesc()
	{
		return $this->description;
	}


	/**
	 * Function called when a Dolibarrr business event is done.
	 * All functions "runTrigger" are triggered if file
	 * is inside directory core/triggers
	 *
	 * @param string 		$action 	Event action code
	 * @param CommonObject 	$object 	Object
	 * @param User 			$user 		Object user
	 * @param Translate 	$langs 		Object langs
	 * @param Conf 			$conf 		Object conf
	 * @return int              		<0 if KO, 0 if no triggered ran, >0 if OK
	 */
	public function runTrigger($action, $object, User $user, Translate $langs, Conf $conf)
	{
		//$object contient la commande fournisseur qui vient d'être approuvée ou refusée
    switch ($action) {
	    case 'ORDER_SUPPLIER_APPROVE':
				$donneurOrdre = new User($this->db);
				$OKDonneurOrdre = $donneurOrdre->fetch($object->user_author_id); //Récupérer le donneur d'ordre = auteur de la commande
				if ($OKDonneurOrdre > 0) {
					$fournisseur = new Societe($this->db);
					$OKFournisseur = $fournisseur->fetch($object->socid); //Récupérer le fournisseur
					if ($OKFournisseur > 0) {
						$expediteur = "[email protected]";
						$destinataire = $this->db->escape(trim($donneurOrdre->email));
						$subject = "Commande ".$object->ref." pour le fournisseur ".$fournisseur->name." approuvée";
						$message = 'La commande fournisseur <a href="'.DOL_MAIN_URL_ROOT.'/fourn/commande/card.php?id='.$object->id.'">'.$object->ref."</a> pour le fournisseur ".$fournisseur->name. " a été approuvée.<br>Vous pouvez maintenant passer cette commande dans Dolibarr.";
						$mailfile = new CMailFile($subject, '<'.$destinataire.'>', '<'.$expediteur.'>', $message, array(), array(), array(),'','',0,1);
						if ($mailfile->error) {
								dol_syslog($mailfile->error, LOG_ERR);
						}
						$result = $mailfile->sendfile();
					}
				}
				break;
	    case 'ORDER_SUPPLIER_REFUSE':
				$donneurOrdre = new User($this->db);
				$OKDonneurOrdre = $donneurOrdre->fetch($object->user_author_id); //Récupérer le donneur d'ordre = auteur de la commande
				if ($OKDonneurOrdre > 0) {
					$fournisseur = new Societe($this->db);
					$OKFournisseur = $fournisseur->fetch($object->socid); //Récupérer le fournisseur
					if ($OKFournisseur > 0) {
						$expediteur = "[email protected]";
						$destinataire = $this->db->escape(trim($donneurOrdre->email));
						$subject = "Commande ".$object->ref." pour le fournisseur ".$fournisseur->name." refusée";
						$message = 'La commande fournisseur <a href="'.DOL_MAIN_URL_ROOT.'/fourn/commande/card.php?id='.$object->id.'">'.$object->ref."</a> pour le fournisseur ".$fournisseur->name. " a été refusée.";
						$mailfile = new CMailFile($subject, '<'.$destinataire.'>', '<'.$expediteur.'>', $message, array(), array(), array(),'','',0,1);
						if ($mailfile->error) {
								dol_syslog($mailfile->error, LOG_ERR);
						}
						$result = $mailfile->sendfile();
					}
				}
				break;
			default:
        dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
        break;
	    }
		return 0;
	}
}

A adapter à votre cas de figure. Trigger déposé dans htdocs/core/triggers

Bon amusement !

2 « J'aime »

Merci pour le partage