using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SigStock
{
     public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer
                            , MercatorUi.ICustomizers.IFormClosedCustomizer
                            , MercatorUi.ICustomizers.IStringUpdater
                            , MercatorUi.ICustomizers.IFormValidateCustomizer
    {

         public string StringUpdate( string StringToModify) //Wijziging van de opdracht van het beschikbaarheidsrooster om rekening te houden met een nieuwe kolom.
        {
             if (Api.StrExtract(StringToModify, "<ID>" , "</ID>" ) == "STOCKDISPO" ) // Dit laat toe enkel de opdracht van het beschikbaarheidsrooster te wijzigen, en niet de opdrachten van de andere roosters van het informatiebestand "Artikels" 
            {
                StringToModify = StringToModify.Replace( "dispo.stockmax," , "dispo.stockmax,dispo.loc,dispo.loc as loc_old," );
                StringToModify = StringToModify.Replace( "sum(stockmax)," , "sum(stockmax),'',''," );
            }
             return StringToModify;
        }
        
         public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
             List <Control> l = sigForm.FindMovableControlsByType( typeof (MercatorUi.Forms.Sig.SigGrids.StockDispo));
             if (l.Count == 0)
                 return ;
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)l[0];
            stockDispo.AfterColumnsCreated += new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(stockDispo_AfterColumnsCreated); //Pour ajouter la nouvelle colonne
            stockDispo.AfterWrite += new MercatorUi.MovableControls.MovableGrid.AfterWriteHandler(stockDispo_AfterWrite); //Pour aller écrire dans la DB les modifications
        }

         public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
             List <Control> l = sigForm.FindMovableControlsByType( typeof (MercatorUi.Forms.Sig.SigGrids.StockDispo));
             if (l.Count == 0)
                 return ;
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)l[0];
            stockDispo.AfterColumnsCreated -= new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(stockDispo_AfterColumnsCreated);
            stockDispo.AfterWrite -= new MercatorUi.MovableControls.MovableGrid.AfterWriteHandler(stockDispo_AfterWrite);
        }

         private void stockDispo_AfterColumnsCreated( Object sender, EventArgs e) // De kolom "Lokalisatie" toevoegen
        {
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;
            stockDispo.Grid.Columns.Add( "loc" , _Divers.Iif_langue(Globals.Langue, "Localisation" , "Localisation" , "Localisation" ));
            stockDispo.Grid.Columns[ "loc" ].Width = 85;
            stockDispo.Grid.Columns[ "loc" ].ReadOnly = false ;
            stockDispo.Grid.Columns[ "loc" ].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            stockDispo.Grid.Columns[ "loc" ].DataPropertyName = "loc" ;
            stockDispo.Grid.Columns.Add( "loc_old" , "" );
            stockDispo.Grid.Columns[ "loc_old" ].Width = 0;
            stockDispo.Grid.Columns[ "loc_old" ].ReadOnly = true ;
            stockDispo.Grid.Columns[ "loc_old" ].DataPropertyName = "loc_old" ;
            stockDispo.Grid.Columns[ "loc_old" ].Visible = false ;
        }

         private void stockDispo_AfterWrite( object sender, EventArgs e) // Om de wijzigingen aan de nieuwe kolom in de DB in te voeren
        {
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;

            MercatorUi.Forms.Sig.SigForm formStock = (MercatorUi.Forms.Sig.SigForm)stockDispo.Form;
             if (stockDispo.LastIdFilled == formStock.DataSourceRow[ "s_id" ].ToString())
            {
                 foreach (DataGridViewRow row in stockDispo.Grid.Rows)
                {
                     if (row.Cells[ "loc" ].Value.ToString().Trim() != row.Cells[ "loc_old" ].Value.ToString().Trim())
                    {
                        SqlCommand oCommand = new SqlCommand( "update dispo set loc = @loc where id_stock = @id_stock and id_magasin = @id_magasin" );
                        oCommand.Parameters.Add( new SqlParameter( "@id_stock" , SqlDbType.Char)).Value = formStock.DataSourceRow[ "s_id" ].ToString();
                        oCommand.Parameters.Add( new SqlParameter( "@id_magasin" , SqlDbType.Char)).Value = row.Cells[ "id" ].Value;
                        oCommand.Parameters.Add( new SqlParameter( "@loc" , SqlDbType.Char)).Value = row.Cells[ "loc" ].Value;
                        Api.SqlExec(Globals.RepData, oCommand);
                    }
                }
            }
        }
    }
}