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)
            {
                 Globals .Main.BaseFormCreating += new MercatorUi. Main . BaseFormCreatingEventHandler (Main_BaseFormCreating);
            }
             else if (Action == MercatorUi.ICustomizers. ExecAction .DossierClose)
            {
                 Globals .Main.BaseFormCreating -= new MercatorUi. Main . BaseFormCreatingEventHandler (Main_BaseFormCreating);
            }
        }

         void Main_BaseFormCreating( object sender, MercatorUi. Main . BaseFormCreatingEventArgs e)
        {
             if (e.Form is MercatorUi.Forms.Booking. BookingMatchingForm ) // est-on dans la fenêtre des lettrages ?
            {
                MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )e.Form;
                bookingMatchingForm.FormClosed += new System.Windows.Forms. FormClosedEventHandler (bookingMatchingForm_FormClosed);
                bookingMatchingForm.Shown += new EventHandler (bookingMatchingForm_Shown);
                bookingMatchingForm.ReqSqlCreated += new MercatorUi.Forms.Booking. BookingMatchingForm . ReqSqlCreatedHandler (bookingMatchingForm_ReqSqlCreated);
            }
        }

         void bookingMatchingForm_FormClosed( object sender, System.Windows.Forms. FormClosedEventArgs e) // cet évènement sert seulement à désinscrire tous les évènements quand on ferme la fenêtre
        {
            MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )sender;
            bookingMatchingForm.FormClosed -= new System.Windows.Forms. FormClosedEventHandler (bookingMatchingForm_FormClosed);
            bookingMatchingForm.Shown -= new EventHandler (bookingMatchingForm_Shown);
            bookingMatchingForm.ReqSqlCreated -= new MercatorUi.Forms.Booking. BookingMatchingForm . ReqSqlCreatedHandler (bookingMatchingForm_ReqSqlCreated);
        }

         void bookingMatchingForm_Shown( object sender, EventArgs e) // on va ici ajouter la colonne supplémentaire (cet évènement n'est exécuté qu'une seule fois)
        {
            MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )sender;
            bookingMatchingForm.Grid.Columns.Add( "red_gen_pc" , "% Gescom" );
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].Width = 60;
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].DataPropertyName = "red_gen_pc" ;
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].DefaultCellStyle.Alignment = System.Windows.Forms. DataGridViewContentAlignment .MiddleRight;
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].DefaultCellStyle.Format = "##0.00" ;
        }

         void bookingMatchingForm_ReqSqlCreated( object sender, MercatorUi.Forms.Booking. BookingMatchingForm . ReqSqlCreatedEventArgs e)
        {
            MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )sender;
             if (bookingMatchingForm.Sig.Module == MercatorUi.Sig. _SigEnum .CLI) // on modifie la requête uniquement si on lettre des clients
            {
                e.ReqSql.Replace( ",cast(0 as bit) as auto_sel" , ",cast(0 as bit) as auto_sel,pieds_v.red_gen_pc" ); // ajouter le champ souhaité dans la table pieds_v
                e.ReqSql.Replace( "inner join pieds_c" , "left join pieds_v on (lignes_c.id_gescom=pieds_v.journal+str(pieds_v.piece,10))    inner join pieds_c" ); // ajouter la jointure sur la table pieds_v
                bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].Visible = true ;
            }
             else
            {
                e.ReqSql.Replace( ",cast(0 as bit) as auto_sel" , ",cast(0 as bit) as auto_sel,0 as red_gen_pc" ); // ajouter quand même le champ puisque la grille l'attend
                bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].Visible = false ;
            }
        }
    }
}