using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace MyNameSpace
{
    public class Class1 : MercatorUi.Interfaces.IExec
    {

        public void Main()
        {
            using (MercatorUi.Engine.Cpta.BookingEngine bookingEngine = MercatorUi.Engine.Cpta.BookingEngine.InitNew(1, "VENc")) // 1 = verkoop, tweede parameter = journaal
            {
                if (!string.IsNullOrEmpty(bookingEngine.LastError))
                {
                    Dialogs.Stop("Init BookingEngine : " + bookingEngine.LastError);
                    return;
                }
                if (!bookingEngine.ApplyCustomerSupplier("MERCATOR"))
                {
                    Dialogs.Stop("ApplyCustomerSupplier : " + bookingEngine.LastError);
                    return;
                }

                // Gegevens van PIEDS_C
                bookingEngine.PiedsCRecord.REGIME = MercatorDatabase.RegimesEnum.Normal; // Facultatieve lijn, want het stelsel wordt geïnitialiseerd door ApplyCustomerSupplier
                bookingEngine.PiedsCRecord.DATE = new DateTime(2012, 1, 15);
                bookingEngine.PeriodFromDate(bookingEngine.PiedsCRecord.DATE); // Aanpassing van de periode in functie van de datum
                bookingEngine.PiedsCRecord.ECHEANCE = Api.AddDate(bookingEngine.PiedsCRecord.DATE, bookingEngine.CliRecord.C_PAIEM); // Berekening van de vervaldatum in functie van de betalingstermijn vermeld in de klantenfiche
                bookingEngine.PiedsCRecord.REFERENCE = "Ecriture générée par code";
                bookingEngine.PiedsCRecord.HEADERTOTAL = 1210;

                // Toevoeging van de lijnen
                MercatorUi.Sig.Sig sig_gen = MercatorUi.Sig._SigsStatic.SigByModule(MercatorUi.Sig._SigEnum.GEN); // Zal nodig zijn om aan te geven dat men een algemene rekening gaat invoegen.
                string id_tva = MercatorController.xFunctions.xLookUpString("TVACODES", "CODE_N", "21", "ID"); // Men moet enkel btw-code-ID's bewerken.

                int n = bookingEngine.AppendLine(); // Initialiseert een nieuwe lijn en vermeldt het nummer van de gecreëerde lijn.
                if (!bookingEngine.InsertAccount(sig_gen, "700000", bookingEngine.LIGNES_C.Rows[n]))
                {
                    Dialogs.Stop("InsertAccount 1 : " + bookingEngine.LastError);
                    return;
                }
                bookingEngine.LignesCRecords[n].TOT_DV = 1100;
                bookingEngine.LignesCRecords[n].SIGNE = "C"; // Facultatieve lijn, want het teken wordt geïnitialiseerd door AppendLine
                bookingEngine.LignesCRecords[n].ID_TVA = id_tva;
                bookingEngine.LignesCRecords[n].TVA_DV = 231;

                n = bookingEngine.AppendLine(); // Initialiseert een nieuwe lijn en vermeldt het nummer van de gecreëerde lijn.
                if (!bookingEngine.InsertAccount(sig_gen, "700010", bookingEngine.LIGNES_C.Rows[n]))
                {
                    Dialogs.Stop("InsertAccount 2 : " + bookingEngine.LastError);
                    return;
                }
                bookingEngine.LignesCRecords[n].TOT_DV = 100;
                bookingEngine.LignesCRecords[n].SIGNE = "D";
                bookingEngine.LignesCRecords[n].ID_TVA = id_tva;
                bookingEngine.LignesCRecords[n].TVA_DV = 21;


                // sauvegarde
                if (!bookingEngine.Save())
                {
                    Dialogs.Stop("Save : " + bookingEngine.LastError);
                    return;
                }
                Dialogs.Stop(string.Format("Het document wordt opgeslagen met als nummer {0}.", bookingEngine.SavedNumber));
            }
        }
    }
}