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
@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
<?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 »