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

namespace SigGen
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.BeforeSearch += new MercatorUi.Sig.SigClasses.BeforeSearchEventHandler(Sig_BeforeSearch);
        }

        void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
        {
            Form form = MercatorUi.Globals.Main.WonTopForm();
            if ((form == null) || !(form is MercatorUi.Forms.Booking.BookingForm)) // u bevindt zich niet in een boekingsscherm
                return;
            MercatorUi.Forms.Booking.BookingForm bookingForm = (MercatorUi.Forms.Booking.BookingForm)form;
            if (bookingForm.BookingEngine == null) // u bevindt zich in een boeking maar wel in configuratiemodus
                return;
            if (bookingForm.BookingEngine.Type != 2) // u bevindt zich niet in een aankoopboeking
                return;
            if (e.Key != "0") // de gebruiker heeft geen 0 ingegeven: hij wil dus een gewone zoekopdracht
                return;
            if (bookingForm.BookingEngine.PIEDS_C["supplier"].ToString().TrimEnd() == "") // de leverancier werd niet geselecteerd
                return;
            
            StringBuilder sb = new StringBuilder();
            bool premier_fait = false;
            // er wordt rekening gehouden met het veld f_comptea van de huidige leverancier
            if (bookingForm.BookingEngine.FOU["f_comptea"].ToString() != "")
            {
                sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_comptea"]);
                premier_fait = true;
            }
            // er wordt rekening gehouden met de velden f_id_gen0 tot f_id_gen9 van de huidige leverancier
            for (int i_gen = 0; i_gen <= 9; i_gen++)
            {
                if (bookingForm.BookingEngine.FOU.Table.Columns.Contains("f_id_gen" + i_gen.ToString()) && (bookingForm.BookingEngine.FOU["f_id_gen" + i_gen.ToString()].ToString() != ""))
                {
                    if (premier_fait)
                        sb.Append(" or ");
                    sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_id_gen" + i_gen.ToString()]);
                    premier_fait = true;
                }
            }
            e.DesiredWhereClause = sb.ToString();
        }

        
    }
}