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