Met deze programmering is het mogelijk om bij het genereren van financiële stukken aan de hand van het recupereren van gecodeerde berichtgevingen (CODA), rekening te houden met de analytische rekening die standaard werd bepaald voor de algemene rekeningen.
Dit maakt met name gebruik van het event BeforeSave en implementeert de volgende interfaces:
De code wordt als volgt samengesteld:
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)) // enkel indien financieel stuk vanuit CODA gegenereerd
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--; // de laatste komma verwijderen
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"]);
}
}
}
}
}
}
}
}
}