Cet exemple exploite l'évènement AfterCodaRecognition afin de séparer en 2 lignes distinctes les lignes correspondant à des mouvements créditeurs en suite à des paiements reçus avec une carte de crédit. La difficulté est que le montant net est repris par défaut dans l'extrait de compte. Le montant brut et la commission à déduire sont repris en simple commentaire, donc a priori difficilement exploitables. Nous avons créé ce customizer à titre d'exemple sur base d'extraits montrant des paiements avec carte de crédit gérés par Europabank. Cette programmation devrait pouvoir être facilement adaptée à d'autres prestataires de traitement de paiements par carte de crédit. Etant donné que cette programmation repose sur un "parsing" d'un simple commentaire sous forme de texte, elle est bien entendu sujette à toute modification future dans cette communication.
Dans notre exemple, il a été noté que les enregistrements concernés pouvaient être facilement reconnus par ce test : nom='EUROPABANK N.V.'
Par ailleurs, pour ces lignes, le champ commentair2 est de la forme :
BRUT: 371,10 - COMM 4,10 REF.OP.03935.
Les lignes de commissions seront automatiquement associées au compte général 650001.
Sur base de ces observations et hypothèses, le customizer peut être écrit comme suit :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace Main
{
public class Customizer : MercatorUi.ICustomizers.IExec
{
public void Main(MercatorUi.ICustomizers.ExecAction Action)
{
if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognition += new MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognitionEventHandler(AccountingBankCodaForm_AfterCodaRecognition);
else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognition -= new MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognitionEventHandler(AccountingBankCodaForm_AfterCodaRecognition);
}
void AccountingBankCodaForm_AfterCodaRecognition(MercatorUi.Forms.Accounting.AccountingBankCodaForm.AfterCodaRecognitionEventArgs e)
{
//MercatorUi._Divers.ViewData(e.DtMouvements.Copy(), true);
foreach (DataRow dr in e.DtMouvements.Select("nom='EUROPABANK N.V.'"))
{
string sbrut = Api.StrExtract(dr["communic2"].ToString(), "BRUT: ", " -").Replace(".", "").Replace(",", ".");
string scomm = Api.StrExtract(dr["communic2"].ToString(), "COMM ", " REF").Replace(".", "").Replace("," ,".");
double brut;
double comm;
if ((sbrut != "") && (scomm != "") && double.TryParse(sbrut, out brut) && double.TryParse(scomm, out comm))
{
DataRow dr_new = e.DtMouvements.NewRow();
Api.DataRowMerge(dr_new, dr); // copier le contenu de dr dans dr_new
e.DtMouvements.Rows.InsertAt(dr_new, Api.DataRowIndexInDataTable(dr));
dr["montant"] = -comm;
MercatorUi.Forms.Accounting.AccountingBankCodaForm.CodaInsertAccount(MercatorUi.Sig._SigEnum.GEN, "650001", dr); // 650001 = compte de commissions carte de crédit - à adapter selon plan comptable
dr_new["montant"] = brut;
}
}
}
}
}
Mots clés : Visa; Bancontact.