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;
            // on vérifie si au moins une ligne contient le compte 499000 et un montant non nul
            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; // ce flag indique à Mercator qu'on refuse la sauvegarde de l'écriture
            }
        }
    }
}