Cette programmation permet, lors de la génération des financiers à partir de la récupération des extraits de compte codifiés (CODA), de tenir compte de l'analytique définie par défaut au niveau des comptes généraux.
Elle exploite notamment l’évènement BeforeSave et implémente les interfaces suivantes :
Le code s'établit comme suit :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace Booking
{
public class Customizer : MercatorUi.ICustomizers.IBookingEngineCreated, MercatorUi.ICustomizers.IBookingEngineClosed
{
public void BookingEngineCreated(MercatorUi.Engine.Cpta.BookingEngine BookingEngine)
{
if (Globals.MercatorOptions.Contains("ANA") && (BookingEngine.Context == MercatorUi.Engine.Cpta.BookingEngine.ContextEnum.BankFin)) // uniquement si financier généré à partir des CODA
BookingEngine.BeforeSave += BookingEngine_BeforeSave;
}
public void BookingEngineClosed(MercatorUi.Engine.Cpta.BookingEngine BookingEngine)
{
if (Globals.MercatorOptions.Contains("ANA") && (BookingEngine.Context == MercatorUi.Engine.Cpta.BookingEngine.ContextEnum.BankFin))
BookingEngine.BeforeSave -= BookingEngine_BeforeSave;
}
void BookingEngine_BeforeSave(object sender, MercatorUi.Engine.Cpta.BookingEngine.BeforeSaveEventArgs e)
{
MercatorUi.Engine.Cpta.BookingEngine bookingEngine = (MercatorUi.Engine.Cpta.BookingEngine)sender;
foreach (DataRow dr in bookingEngine.LIGNES_C.Rows)
{
StringBuilder fields_list = new StringBuilder();
for (int i_ana = 1; i_ana <= 9; i_ana++)
{
string s_ana = i_ana.ToString();
if ((Globals.Params["ANA_PLAN" + s_ana] != "") && bookingEngine.LIGNES_C.Columns.Contains("is_ana" + s_ana) && Convert.ToBoolean(dr["is_ana" + s_ana]))
fields_list.AppendFormat("g_id_ana{0},", i_ana);
}
if (fields_list.Length > 0)
{
fields_list.Length--; // retirer la dernière virgule
DataSet ds = Api.Zselect(Globals.RepData, string.Format("select {0} from GEN (NOLOCK) where g_id=@g_id", fields_list), new MercatorSqlParam("@g_id", dr["compte"], SqlDbType.Char));
if ((ds != null) && (ds.Tables[0].Rows.Count > 0))
{
for (int i_ana = 1; i_ana <= 9; i_ana++)
{
string s_ana = i_ana.ToString();
if (ds.Tables[0].Columns.Contains("g_id_ana" + s_ana))
{
int n_ana = bookingEngine.AppendLineAna(i_ana, dr["dl_id"].ToString());
if (bookingEngine.InsertAnaFull(ds.Tables[0].Rows[0]["g_id_ana" + s_ana].ToString(), bookingEngine.LIGNES_C_ANA.Rows[n_ana], i_ana))
{
bookingEngine.LignesCanaRecords[n_ana].TOT_DV = Convert.ToDouble(dr["tot_dv"]);
bookingEngine.LignesCanaRecords[n_ana].TOT = Convert.ToDouble(dr["tot"]);
}
}
}
}
}
}
}
}
}