using System;
using System.Collections.Generic;
using System.Text;
using MercatorApi;
using System.Windows.Forms;
using System.Drawing;

namespace HistCli
{
    public class Customizer : MercatorUi.ICustomizers. IStringUpdater ,
                              MercatorUi.ICustomizers. IFormGridCustomizer ,
                              MercatorUi.ICustomizers. IFormLoadCustomizer ,
                              MercatorUi.ICustomizers. IFormClosedCustomizer
    {
         /*
          * Deze eerste methode is de implementatie van de interface IStringUpdater.
          * Hiermee kunt u rechtstreeks de SQL-opdracht wijzigen die Mercator standaard voorstelt.
          * Aangezien deze opdracht van het volgende type is: select pieds_v.id,journal,piece,reference,type,date,heure,tot_bas_dv,tot_bas_fb,tot_ttc_dv,tot_ttc_fb,n_dec,id_dev,imprime,cubic as flag_appl,niveau_bo,c_nom,devises.nom as dev_nom from pieds_v (NOLOCK),cli (NOLOCK),devises (NOLOCK) where (pieds_v.id_cli=cli.c_id) and (pieds_v.id_dev=devises.id) and (journal='VEN  ')  and (piece>=20060000) and (piece<=20069999) and (date>=cast('01/10/2006' as datetime)) and (date<=cast('31/10/2006' as datetime)) order by piece desc
          * voegt men gewoon toe: vervaldag na datum
          * Het is uiteraard ook mogelijk om complexere wijzigingen aan te brengen, die bijvoorbeeld tabellen toevoegen aan de clausule "from"
          */

        public string StringUpdate(string stringToModify)
        {
             return stringToModify.Replace( "date," , "date,echeance,");
        }

         /*
          * Deze tweede methode is de implementatie van de interface IFormGridCustomizer
          * Ze voegt de kolom "Vervaldag" toe aan de datagridview
          */

        public void FormGridCustomize(Form form)
        {
            MercatorUi.Forms.Hist.HistForm histForm = (MercatorUi.Forms.Hist.HistForm)form;
            histForm.dataGridView.Columns.Add("echeance", "Vervaldatum");
            histForm.dataGridView.Columns["echeance"].Width = 68;
            histForm.dataGridView.Columns["echeance"].DataPropertyName = "echeance" ;
            histForm.dataGridView.Columns["echeance"].DefaultCellStyle.Format = Api.Iif(MercatorUi.Globals.DateMDY, "MM/dd/yyyy", "dd/MM/yyyy");    
        }

         /*
          * Deze derde methode is de implementatie van de interface IFormLoadCustomizer.
          * Aangezien deze methode een Form als parameter krijgt (basisvenster, want we kunnen deze interface gebruiken voor diverse schermen),
          * moet er eerst een cast Form -> HistForm worden gerealiseerd.
          * Vervolgens schrijft men een code die zal worden uitgevoerd aan het eind van het event Load van HistForm.
          * Deze code voegt een CellFormatting-event toe aan de dataGridView, waarin men alle vervaldata voorafgaand aan de actuele datum vet weergeeft.
          */

        public void FormLoadCustomize(Form form)
        {
            MercatorUi.Forms.Hist.HistForm histForm = (MercatorUi.Forms.Hist.HistForm)form;
            histForm.dataGridView.CellFormatting += dataGridView_CellFormatting;
        }

        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Hist.HistForm histForm = (MercatorUi.Forms.Hist.HistForm)form;
            histForm.dataGridView.CellFormatting -= dataGridView_CellFormatting;
        }

        void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
             DataGridView dataGridView = (DataGridView)sender;
             if ((dataGridView.Columns[e.ColumnIndex].Name == "echeance" ) && (dataGridView.Rows[e.RowIndex].Cells["echeance"].Value != DBNull Value))
            {
                 if (System.Convert.ToDateTime(e.Value) < DateTime.Now)
                    e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Bold);
            }
        }
    }
}