L'objet de ce customizer est de modifier le sujet et d'ajouter des pièces jointes dans un mail envoyé depuis un document de la gestion commerciale. Il exploite l'évènement BeforeSendMail du BillingEngine. Cet évènement passe un BeforeSendMailEventArgs qui permet d'agir sur :
- string Subject : le sujet du courriel
- string Name : le nom du destinataire
- string MailTo : l'adresse mail du destinataire
- string Content : le contenu du message (source HTML si le contenu doit être formaté en HTML)
- List<string> Attachments : liste des fichiers à attacher au mail
Si on veut bloquer l'envoi du mail, il suffit de mettre la propriété Cancel à true.
Cet évènement est levé que le mail soit envoyé via Outook ou via le CRM de Mercator.
Le code de ce customizer est le suivant :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSendMail += BillingEngine_BeforeSendMail;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSendMail -= BillingEngine_BeforeSendMail;
}
void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
{
e.Subject = "Nouveau sujet";
e.Attachments.Add(@"C:\Test\test.html");
}
}
}
Si on souhaite joindre les fichiers SQL des documents liés (par exemple de la commande et/ou de la livraison précédant une facture), ce code peut être utilisé :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSendMail += BillingEngine_BeforeSendMail;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSendMail -= BillingEngine_BeforeSendMail;
}
void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
{
MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
if (!string.IsNullOrEmpty(billingEngine.PiedsVRecord.PIECE_LIEE))
{
string reqSql = @"
select '<Files\'+rtrim(t.journal)+'\'+t.id+'\'+files.filename as filefullname
from pieds_v
cross apply dbo.DOC_LIES2(pieds_v.doc_lies) t
inner join FILES on files.filepath='<Files\'+t.journal+'\'+t.id+'\'
where (pieds_v.id=@id) and (pieds_v.journal=@journal) and (pieds_v.piece=@piece) and (files.filename is not null) ".UnIndent(5);
List<string> l = Api.Zselect<string>(MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@id", billingEngine.PiedsVRecord.ID, SqlDbType.Char), new MercatorSqlParam("@journal", billingEngine.PiedsVRecord.JOURNAL, SqlDbType.Char), new MercatorSqlParam("@piece", billingEngine.PiedsVRecord.PIECE));
if (l != null)
e.Attachments.AddRange(l);
}
}
}
}
Si on souhaite joindre les duplicatas PDF des documents liés (par exemple de la commande et/ou de la livraison précédant une facture), ce code peut être utilisé :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;
// <CompileWithRoslyn />
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSendMail += BillingEngine_BeforeSendMail;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSendMail -= BillingEngine_BeforeSendMail;
}
void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
{
MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
if (!string.IsNullOrEmpty(billingEngine.PiedsVRecord.PIECE_LIEE))
{
string reqSql = @"
select t.type,t.id,t.journal,t.piece
from pieds_v
cross apply dbo.DOC_LIES2(pieds_v.doc_lies) t
where (pieds_v.id=@id) and (pieds_v.journal=@journal) and (pieds_v.piece=@piece".UnIndent(5);
List<(int type, string id, string journal, Int64 piece)> l = Api.Zselect< (int type, string id, string journal, Int64 piece)> (MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@id", billingEngine.PiedsVRecord.ID, SqlDbType.Char), new MercatorSqlParam("@journal", billingEngine.PiedsVRecord.JOURNAL, SqlDbType.Char), new MercatorSqlParam("@piece", billingEngine.PiedsVRecord.PIECE));
if (l != null)
{
foreach ((Int16 type, string id, string journal, Int64 piece) tuple in l)
{
MercatorUi.Engine.Gescom.Tools.BillingDocDescriptor billingDocDescriptor = new MercatorUi.Engine.Gescom.Tools.BillingDocDescriptor(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, tuple.type, tuple.id, tuple.journal, tuple.piece);
string lastPdfDuplicateFileName = billingDocDescriptor.LastPdfDuplicateFileName(out string error);
if (error != null)
MercatorUi.Dialogs.Stop(string.Format("Duplicata PDF {0} {1} : {2}", tuple.journal, tuple.piece, error));
else if (lastPdfDuplicateFileName != null)
e.Attachments.Add(lastPdfDuplicateFileName);
}
}
}
}
}
}