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

namespace Booking
{
    public class Customizer : MercatorUi.ICustomizers.IBookingEngineCreated, MercatorUi.ICustomizers.IBookingEngineClosed
    {

        public void BookingEngineCreated(MercatorUi.Engine.Cpta.BookingEngine BookingEngine)
        {
            BookingEngine.BeforeSave += BookingEngine_BeforeSave;
        }

        public void BookingEngineClosed(MercatorUi.Engine.Cpta.BookingEngine BookingEngine)
        {
            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;
            // We controleren of minstens één lijn de rekening 499000 en een bedrag verschillend van nul omvat.
            if (bookingEngine.LignesCRecords.Where(l => (l.COMPTE == "499000") && (l.TOT_DV.CompareTo(0d, bookingEngine.PiedsCRecord.N_DEC) != 0)).Count() == 0)
            {
                Dialogs.Stop("Cette écriture ne contient aucune imputation sur le compte 499000 !");
                e.CancelSave = true; // Deze flag laat Mercator weten dat men de opslag van het document weigert.
            }
        }
    }
}