using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {
        public static void Exec(MercatorUi.MovableControls. MovableButton clickedButton)
        {
            MercatorUi.Forms.Booking. BookingForm bookingForm = (MercatorUi.Forms.Booking. BookingForm )clickedButton.FindForm();
            MercatorUi.Engine.Cpta. BookingEngine bookingEngine = (MercatorUi.Engine.Cpta. BookingEngine )bookingForm.BookingEngine;
            if (bookingEngine.LIGNES_C.Rows.Count == 0)
                return ;
            int n_dec = Convert .ToInt32(bookingEngine.PIEDS_C[ "n_dec" ]);

            // percentages vragen
            double [] proportion = Dialogs .AskDoubles( "Professioneel percentage ? \n\r    Dividend                              Verdeler" , 6, 7, bookingEngine.DisplayFormat, bookingEngine.DisplayFormat);
            if (proportion == null ) // u koos voor Annuleren
                return ;
            if ( Math .Round(proportion[1], 5) == 0) // verdeler nul
                return ;

            // het nieuwe bedrag van de lijn (totaal en btw) berekenen en de bestaande lijn wijzigen
            double totdv = Math .Round(( Convert .ToDouble(bookingEngine.LIGNES_C.Rows[0][ "tot_dv" ]) * proportion[0] / proportion[1]), n_dec);
            double tauxtva = MercatorController.xFunctions.xLookupLocalDouble(bookingEngine.TVACODES, string .Format( "id='{0}'" , Api.UnquoteSql(bookingEngine.LIGNES_C.Rows[0][ "id_tva" ].ToString())), "TAUX" );
            double tvadv = Math .Round((totdv * tauxtva / 100), n_dec);
            bookingEngine.LIGNES_C.Rows[0][ "tot_dv" ] = totdv;
            bookingEngine.LIGNES_C.Rows[0][ "tva_dv" ] = tvadv;

            // een tweede lijn toevoegen
            MercatorUi.Sig. Sig sig_gen = MercatorUi.Sig. _SigsStatic .SigByModule(MercatorUi.Sig. _SigEnum .GEN); // zal nodig zijn om aan te geven dat we een algemene rekening zullen invoeren

            int n = bookingEngine.AppendLine(); // initialiseert een nieuwe lijn en verwijst naar het aangemaakte lijnnummer
            if (!bookingEngine.InsertAccount(sig_gen, "483000" , bookingEngine.LIGNES_C.Rows[n]))
            {
                 Dialogs .Stop( "InsertAccount 1 : " + bookingEngine.LastError);
                 return ;
            }
            bookingEngine.LIGNES_C.Rows[n][ "tot_dv" ] = Math .Round( Convert .ToDouble(bookingEngine.PIEDS_C[ "tot_ttc_dv" ]) - totdv - tvadv, n_dec);
        }
    }
}