Bij het genereren van financiƫle stukken vanuit CODA, dient u rekening te houden met de standaardanalytics

0000002206     -      17-11-2020

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:

Zoom
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"]);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}