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" ]);

             // demander les proportions
             double [] proportion = Dialogs .AskDoubles( "Proportion professionnelle ? \n\r    Dividende                              Diviseur" , 6, 7, bookingEngine.DisplayFormat, bookingEngine.DisplayFormat);
             if (proportion == null ) // on a choisi Annuler
                 return ;
             if ( Math .Round(proportion[1], 5) == 0) // diviseur nul
                 return ;

             // calculer le nouveau montant de la ligne (total et tva) et modifier la ligne existante
             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;

             // ajouter une deuxième ligne
            MercatorUi.Sig. Sig sig_gen = MercatorUi.Sig. _SigsStatic .SigByModule(MercatorUi.Sig. _SigEnum .GEN); // sera nécessaire pour indiquer qu'on va insérer un compte général

             int n = bookingEngine.AppendLine(); // initialise une nouvelle ligne et renvoie le n° de la ligne créée
             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);
        }
    }
}