public void Exec(Model.Local.Customer Customer, out List <String> log_out)
        {
            //logs.Add("Client ps " + Customer.Pre_Id.ToString() + " / sage " + Customer.Sag_Id.ToString());
            try
            {
                //if (Core.Global.GetConfig().ModuleAECCustomerOutstandingActif && Core.Global.ExistAECCustomerOutstandingModule())
                {
                    //logs.Add("module encours actif");
                    Model.Sage.F_COMPTETRepository        F_COMPTETRepository  = new Model.Sage.F_COMPTETRepository();
                    Model.Prestashop.PsCustomerRepository PsCustomerRepository = new Model.Prestashop.PsCustomerRepository();

                    if (!F_COMPTETRepository.ExistId(Customer.Sag_Id))
                    {
                        logs.Add("BO10- Client Sage introuvable à partir du l'identifiant " + Customer.Sag_Id.ToString() + " !");
                    }
                    else if (!PsCustomerRepository.ExistCustomer((uint)Customer.Pre_Id))
                    {
                        logs.Add("BO11- Client PrestaShop introuvable à partir de l'identifiant " + Customer.Pre_Id.ToString() + " !");
                    }
                    else
                    {
                        //logs.Add("données client récupérées");
                        List <string> log = new List <string>();
                        try
                        {
                            DateTime DebutExo = new DateTime(1900, 01, 01);
                            DateTime FinExo   = new DateTime(1900, 01, 01);
                            if (current_exercice(out DebutExo, out FinExo))
                            {
                                //logs.Add("Exercice " + DebutExo.ToShortDateString() + " / " + FinExo.Date.ToShortDateString());
                                if (ParametrePortefeuille == Core.Parametres.P_BaseEncours.NonDefini)
                                {
                                    read_param_portefeuille();
                                }

                                //logs.Add("Paramètre portefeuille " + ParametrePortefeuille.ToString());

                                Model.Sage.F_COMPTET F_COMPTET = F_COMPTETRepository.Read(Customer.Sag_Id);

                                Decimal EncoursAutorise = (F_COMPTET.CT_Encours != null) ? F_COMPTET.CT_Encours.Value : 0;
                                Decimal SoldeComptable, Portefeuille;
                                LoadControleEncours(F_COMPTET, DebutExo, FinExo, out SoldeComptable, out Portefeuille);


                                //logs.Add("client : " + F_COMPTET.CT_Num
                                //+ " / type encours : " + F_COMPTET.EtatControleEncours.ToString()
                                //+ " / autorisé : " + EncoursAutorise
                                //+ " / solde comptable : " + SoldeComptable
                                //+ " / portefeuille : " + Portefeuille);


                                #region Saisie PrestaShop

                                Model.Prestashop.PsCustomer PsCustomer = PsCustomerRepository.ReadCustomer((uint)Customer.Pre_Id);
                                PsCustomer.OutstandingAllowAmount = EncoursAutorise;
                                PsCustomerRepository.Save();

                                Model.Prestashop.PsAECBalanceOutstandingRepository PsAECBalanceOutstandingRepository = new Model.Prestashop.PsAECBalanceOutstandingRepository();
                                Model.Prestashop.PsAEcBalanceOutstanding           encours_client;
                                if (PsAECBalanceOutstandingRepository.ExistCustomer(PsCustomer.IDCustomer))
                                {
                                    encours_client = PsAECBalanceOutstandingRepository.ReadCustomer(PsCustomer.IDCustomer);
                                    encours_client.SageOutstanding        = SoldeComptable;
                                    encours_client.SageWallet             = Portefeuille;
                                    encours_client.OutstandingAllowAmount = EncoursAutorise;

                                    switch (F_COMPTET.EtatControleEncours)
                                    {
                                    case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Livraison:
                                        encours_client.Oversee       = 0;
                                        encours_client.AccountLocked = 0;
                                        break;

                                    case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Surveillance:
                                        encours_client.Oversee       = 1;
                                        encours_client.AccountLocked = 0;
                                        break;

                                    case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Blocage:
                                        encours_client.Oversee       = 0;
                                        encours_client.AccountLocked = 1;
                                        break;
                                    }
                                    PsAECBalanceOutstandingRepository.Save();
                                }
                                else
                                {
                                    encours_client = new Model.Prestashop.PsAEcBalanceOutstanding()
                                    {
                                        IDCustomer             = PsCustomer.IDCustomer,
                                        SageOutstanding        = SoldeComptable,
                                        SageWallet             = Portefeuille,
                                        OutstandingAllowAmount = EncoursAutorise,
                                    };

                                    switch (F_COMPTET.EtatControleEncours)
                                    {
                                    case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Livraison:
                                        encours_client.Oversee       = 0;
                                        encours_client.AccountLocked = 0;
                                        break;

                                    case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Surveillance:
                                        encours_client.Oversee       = 1;
                                        encours_client.AccountLocked = 0;
                                        break;

                                    case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Blocage:
                                        encours_client.Oversee       = 0;
                                        encours_client.AccountLocked = 1;
                                        break;
                                    }
                                    PsAECBalanceOutstandingRepository.Add(encours_client);
                                }

                                #endregion
                            }
                        }
                        catch (Exception ex)
                        {
                            log.Add("BO02- Erreur calcul suivi comptable : " + ex.ToString());
                        }
                        if (log.Count > 0)
                        {
                            logs.AddRange(log);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Core.Error.SendMailError("BO01- Une erreur est survenue : " + ex.ToString());
            }
            finally
            {
                log_out = logs;
            }
        }
        public void Exec(Model.Local.Customer Customer, out List <String> log_out)
        {
            logs = new List <string>();
            //logs.Add("Client ps " + Customer.Pre_Id.ToString() + " / sage " + Customer.Sag_Id.ToString());
            try
            {
                if (Core.Global.GetConfig().ModuleAECCustomerOutstandingActif&& Core.Global.ExistAECCustomerOutstandingModule())
                {
                    //logs.Add("module encours actif");
                    Model.Sage.F_COMPTETRepository        F_COMPTETRepository  = new Model.Sage.F_COMPTETRepository();
                    Model.Prestashop.PsCustomerRepository PsCustomerRepository = new Model.Prestashop.PsCustomerRepository();

                    if (!F_COMPTETRepository.ExistId(Customer.Sag_Id))
                    {
                        logs.Add("TEC10- Client Sage introuvable à partir du l'identifiant " + Customer.Sag_Id.ToString() + " !");
                    }
                    else if (!PsCustomerRepository.ExistCustomer((uint)Customer.Pre_Id))
                    {
                        logs.Add("TEC11- Client PrestaShop introuvable à partir de l'identifiant " + Customer.Pre_Id.ToString() + " !");
                    }
                    else
                    {
                        //logs.Add("données client récupérées");
                        List <string> log = new List <string>();
                        if (current_exercice(out DebutExo, out FinExo))
                        {
                            //logs.Add("Exercice " + DebutExo.ToShortDateString() + " / " + FinExo.Date.ToShortDateString());
                            if (ParametrePortefeuille == Core.Parametres.P_BaseEncours.NonDefini)
                            {
                                read_param_portefeuille();
                            }

                            //logs.Add("Paramètre portefeuille " + ParametrePortefeuille.ToString());

                            Model.Sage.F_COMPTET F_COMPTET = F_COMPTETRepository.Read(Customer.Sag_Id);

                            Decimal EncoursAutorise = 0;
                            Decimal EncoursUtilise;
                            LoadControleEncours(F_COMPTET, out EncoursUtilise);


                            //logs.Add("client : " + F_COMPTET.CT_Num
                            //+ " / type encours " + F_COMPTET.EtatControleEncours.ToString()
                            //+ " / autorisé " + EncoursAutorise
                            //+ " / utilisé " + EncoursUtilise);

                            switch (F_COMPTET.EtatControleEncours)
                            {
                            case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Livraison:
                                EncoursAutorise = (F_COMPTET.CT_Encours != null) ? F_COMPTET.CT_Encours.Value : 0;
                                break;

                            case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Surveillance:
                            case PRESTACONNECT.Model.Sage.P_CRISQUE._Enum_R_Type.Blocage:
                                if (F_COMPTET.CT_ControlEnc == (short)ABSTRACTION_SAGE.F_COMPTET.Obj._Enum_CT_ControlEnc.Compte_Bloque)
                                {
                                    EncoursAutorise = 0;
                                }
                                else
                                {
                                    EncoursAutorise = (F_COMPTET.CT_Encours != null) ? F_COMPTET.CT_Encours.Value : 0;
                                }
                                break;
                            }

                            #region Saisie PrestaShop

                            Model.Prestashop.PsCustomer PsCustomer = PsCustomerRepository.ReadCustomer((uint)Customer.Pre_Id);
                            PsCustomer.OutstandingAllowAmount = EncoursAutorise;
                            PsCustomerRepository.Save();

                            Model.Prestashop.PsAECCustomerOutstandingRepository PsAECCustomerOutstandingRepository = new Model.Prestashop.PsAECCustomerOutstandingRepository();
                            Model.Prestashop.PsAEcCustomerOutstanding           encours_client;
                            if (PsAECCustomerOutstandingRepository.ExistCustomer(PsCustomer.IDCustomer))
                            {
                                encours_client = PsAECCustomerOutstandingRepository.ReadCustomer(PsCustomer.IDCustomer);
                                encours_client.EncoursActuelSage = EncoursUtilise;
                                PsAECCustomerOutstandingRepository.Save();
                            }
                            else
                            {
                                PsAECCustomerOutstandingRepository.Add(new Model.Prestashop.PsAEcCustomerOutstanding()
                                {
                                    IDCustomer        = PsCustomer.IDCustomer,
                                    EncoursActuelSage = EncoursUtilise,
                                });
                                if (log != null && log.Count > 0)
                                {
                                    logs.AddRange(log);
                                }
                            }

                            #endregion
                        }
                        if (log.Count > 0)
                        {
                            logs.AddRange(log);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Core.Error.SendMailError("TEC01- Une erreur est survenue : " + ex.ToString());
            }
            finally
            {
                log_out = logs;
            }
        }