private void replaceValue(RecueilModel model, int idParent, int idOptionAttribute, string value)
        {
            // récuperation des ReportOptionValue par l'idOption du parent
            var optVal = model.OptionValue.Where(opt => opt.idOption == idParent).FirstOrDefault();

            // créer si null
            if (optVal == null)
            {
                optVal = new ReportOptionValue() { idOption = idParent, idReport = model.Report.idReport };
                model.OptionValue.Add(optVal);
            }

            // replacer les OptionAttributes
            FindAndReplaceValue(optVal, new List<int>() { idOptionAttribute }, new List<String>() { value });
        }
        public List<ReportOptionValue> GetSelectedOptionsFromPostData(RecueilModel _dataModel, int idParent)
        {
            List<ReportOptionValue> retVal = new List<ReportOptionValue>();

            Option ParentOption = _dataModel.Option.Where(o => o.idOption.Equals(idParent)).FirstOrDefault();

            if (ParentOption != null)
            {
                if (ParentOption.idOption == 285)
                { }
                var ChildOptions = _dataModel.Option.Where(o => o.idParent.HasValue && o.idParent.Value.Equals(ParentOption.idOption));
                foreach (var childOp in ChildOptions)
                {
                    bool isSelected = !ParentOption.SingleOption.HasValue;
                    string idPrefix = string.Empty;
                    if (ParentOption.SingleOption.HasValue)
                    {
                        if (ParentOption.SingleOption.Value) idPrefix = "hdn_rb_{0}_{1}";
                        else idPrefix = "hdn_chk_{0}_{1}";

                        string postDataName = string.Format(idPrefix, childOp.idParent.Value, childOp.idOption);
                        if (!string.IsNullOrEmpty(Request.Params[postDataName]) && Request.Params[postDataName].ToLower().Equals("c"))
                        {
                            isSelected = true;
                        }
                    }

                    if (isSelected)
                    {
                        ReportOptionValue newVal = new ReportOptionValue();
                        newVal.idReport = _dataModel.Report.idReport;
                        newVal.idOption = childOp.idOption;
                        newVal.Option = childOp;
                        retVal.Add(newVal);

                        if (_dataModel.Option.Count(o => o.idParent.HasValue && o.idParent.Value.Equals(childOp.idOption)) > 0)
                        {
                            retVal.AddRange(GetSelectedOptionsFromPostData(_dataModel, childOp.idOption));
                        }
                    }
                }
            }

            return retVal;
        }
        public List<ReportOptionAttributeValue> GetAttributValueFromPostData(RecueilModel _dataModel, int idOption)
        {
            List<ReportOptionAttributeValue> retVal = new List<ReportOptionAttributeValue>();

            Option targetOption = _dataModel.Option.Where(o => o.idOption.Equals(idOption)).FirstOrDefault();

            if (targetOption.OptionAttribute != null)
            {
                foreach (var optAttr in targetOption.OptionAttribute)
                {
                    string idPrefix = string.Empty;
                    string dataType = optAttr.Datatype.ToLower();
                    bool isBasicDataType = true;

                    if (dataType.Equals("string") || dataType.Equals("multiline") || dataType.Equals("mobilephone")) idPrefix = "txt_{0}_{1}";
                    else if (dataType.Equals("int") || dataType.Equals("float") || dataType.Equals("percent")) idPrefix = "txt_{0}_{1}";
                    else if (dataType.Equals("datetime")) idPrefix = "dt_{0}_{1}";
                    else if (dataType.Equals("profession")) idPrefix = "enum_{0}_{1}";
                    else if (dataType.Equals("country") || dataType.Equals("industry") || dataType.Equals("profession"))
                        idPrefix = "enum_{0}_{1}";
                    else isBasicDataType = false;

                    if (isBasicDataType)
                    {
                        string ParamName = string.Format(idPrefix, optAttr.idOption, optAttr.idOptionAttribute);

                        if (!string.IsNullOrEmpty(Request.Params[ParamName]))
                        {
                            string strVal = Request.Params[ParamName];
                            //strVal = strVal.Replace("'", "''");
                            ReportOptionAttributeValue newVal = new ReportOptionAttributeValue();
                            newVal.idOptionAttribute = optAttr.idOptionAttribute;
                            newVal.idReport = _dataModel.Report.idReport;
                            newVal.Value = strVal;
                            retVal.Add(newVal);
                        }
                    }
                    else
                    {
                        retVal.AddRange(RetrieveCustomDataTypeValues(optAttr, _dataModel.Report.idReport));
                    }
                }
            }

            return retVal;
        }
        public List<ReportOptionValue> GetSelectedOptions(RecueilModel _dataModel)
        {
            List<ReportOptionValue> retVal = new List<ReportOptionValue>();

            var ParentOptions = _dataModel.Option.Where(o => !o.idParent.HasValue);
            if (ParentOptions != null)
            {
                foreach (var parent in ParentOptions)
                {
                    ReportOptionValue _parent = new ReportOptionValue();
                    _parent.idReport = _dataModel.Report.idReport;
                    _parent.idOption = parent.idOption;
                    _parent.Option = parent;
                    retVal.Add(_parent);

                    var selectedChild = GetSelectedOptionsFromPostData(_dataModel, parent.idOption);
                    if (selectedChild.Count > 0)
                    {
                        ReportOptionValue newVal = new ReportOptionValue();
                        newVal.idReport = _dataModel.Report.idReport;
                        newVal.idOption = parent.idOption;
                        newVal.Option = parent;
                        retVal.Add(newVal);
                        retVal.AddRange(selectedChild);
                    }
                }
            }

            return retVal;
        }
        private List<RecueilOptionModel> MapOptionToModel(RecueilModel _data, List<CriteriaClause> criteriaClauses = null, List<Option> optionList = null)
        {
            List<RecueilOptionModel> retVal = new List<RecueilOptionModel>();
            foreach (var option in _data.Option)
            {
                RecueilOptionModel optionData = new RecueilOptionModel(option);
                optionData.IsSelected = _data.OptionValue.Count(ov => ov.idOption.Equals(option.idOption)) > 0;
                optionData.IsReadOnly = _data.IsReadOnly;
                if (option.idParent.HasValue)
                {
                    var parentOption = _data.Option.Where(o => o.idOption.Equals(option.idParent.Value)).SingleOrDefault();
                    if (parentOption != null)
                    {
                        //TODO
                        optionData.IsSingleOption = parentOption.SingleOption;
                    }
                }

                optionData.Report = _data.Report;
                if (criteriaClauses != null)
                    optionData.CriteriaClauses = criteriaClauses;
                if (optionList != null)
                    optionData.OptionList = optionList;
                retVal.Add(optionData);
            }
            return retVal;
        }
        //private void SaveRecueilModel(Guid _idCustomer, List<int> _rootIds, string _pageName)
        //{
        //    //1- Initialize
        //    RecueilModel recueilModel = new RecueilModel();
        //    recueilModel.RootID = _rootIds;
        //    recueilModel.TargetIdCustomer = _idCustomer;
        //    recueilModel.TargetCustomer = CustomerProspectBL.GetCustomerProspectById(_idCustomer);

        //    //2- Get Latest report
        //    recueilModel.Report = ReportBL.GetLatestReportByIdCustomerProspect(_idCustomer);

        //    //3- Retrieve Options and Option Attributes
        //    recueilModel.Option = OptionBL.GetOptionsByRootIds(_rootIds);

        //    //3'- Save Functionality
        //    if (Request.RequestType.ToLower() != "get")
        //    {
        //        UpdateData(recueilModel);

        //        //Save update indicator
        //        SaveIndicator(recueilModel.Report, _pageName);
        //    }          

        //}

        private RecueilModel CreateRecueilModel(Guid _idCustomer, List<int> _rootIds, string _pageName)
        {
            //1- Initialize
            RecueilModel recueilModel = new RecueilModel();
            recueilModel.RootID = _rootIds;
            recueilModel.TargetIdCustomer = _idCustomer;
            recueilModel.TargetCustomer = CustomerProspectBL.GetCustomerProspectById(_idCustomer);

            //2- Get Latest report
            Report _report = ReportBL.GetLatestReportByIdCustomerProspect(_idCustomer);

            if (_report == null)
            {
                _report = CreateEmptyReport(_idCustomer);
                //mise à jour current status du customer
                recueilModel.TargetCustomer.CurrentReportStatus = ReportBL.Status.InProgress.ToString();
                CustomerProspectBL.Update(recueilModel.TargetCustomer);
            }


            recueilModel.Report = _report;
            ViewBag.idReport = _report.idReport;

            //3- Retrieve Options and Option Attributes
            recueilModel.Option = OptionBL.GetOptionsByRootIds(_rootIds);

            //3'- Save Functionality
            //if (Request.RequestType.ToLower() != "get")
            //{
            //    UpdateData(recueilModel);
            //    //Save update indicator
            //    SaveIndicator(_report, _pageName);
            //    //recueilModel.IsFormSaved = true;
            //}

            //this replaces the override
            if (_pageName == _Page_TitulairePP || _pageName == _Page_TitulairePM)
            {
                ReportOptionBL.SaveCustomerProspectDataToReportOptionValues(_report.idReport, recueilModel.TargetCustomer);
            }

            //4- Retrieve OptionValue and OptionAttributesValue
            recueilModel.OptionValue = ReportOptionBL.GetOptionValuesByIdReportAndOptionRootIds(_report, _rootIds);

            User currentUser = SessionManager.GetUserSession();
            recueilModel.IsEndUser = currentUser.IsEndUser();
            //Case NOT Enduser : Duplicate latest report values if status "CANCELED" : start new report ?
            //for status "COMPLETED", we duplicate the latest report when user clicks on "Demarrer la mise à jour d'un recueil" in "SideBar"
            if (!currentUser.IsEndUser())
            {
                if (_report.Status.ToLower().Equals(ReportBL.Status.Canceled.ToString().ToLower())
                    || _report.Status.ToLower().Equals(ReportBL.Status.Completed.ToString().ToLower()))
                {
                    _report = this.CopyLatestReport(_report);
                    recueilModel.Report = _report;

                    //update customer
                    recueilModel.TargetCustomer.CurrentReportStatus = ReportBL.Status.InProgress.ToString();
                    CustomerProspectBL.Update(recueilModel.TargetCustomer);
                }
            }

            //5- Signature log
            recueilModel.SignatureInformation = this.BuildSignatureLog(_report);

            //6- Retrieve CustomEnum
            int idCurrentLanguage = SessionManager.GetCurrentLanguage().idLanguageType;

            IDictionary<int, List<DropDownEnumModel>> dicoDropDownEnumModel = CustomEnumBL.GetCustomEnums(idCurrentLanguage);

            recueilModel.EnumCountryValue = CustomEnumBL.GetCountries(idCurrentLanguage);
            recueilModel.EnumProfessionValue = dicoDropDownEnumModel[CustomEnumBL.Profession];
            recueilModel.EnumIndustryValue = dicoDropDownEnumModel[CustomEnumBL.Industry];
            recueilModel.EnumIndustryValue.Insert(0, new DropDownEnumModel());
            recueilModel.EnumRecievedPaidValue = dicoDropDownEnumModel[CustomEnumBL.ReceivePaid];
            recueilModel.EnumOwnerShipValue = dicoDropDownEnumModel[CustomEnumBL.Ownership];
            recueilModel.EnumFrequencyValue = dicoDropDownEnumModel[CustomEnumBL.Frequency];
            recueilModel.EnumPriorityValue = dicoDropDownEnumModel[CustomEnumBL.PriorityOrder];
            recueilModel.EnumYearImmediateValue = dicoDropDownEnumModel[CustomEnumBL.YearImmediate];
            recueilModel.EnumFrequency2Value = dicoDropDownEnumModel[CustomEnumBL.Frequency2];
            recueilModel.EnumContractTypeValue = dicoDropDownEnumModel[CustomEnumBL.ContractType];
            recueilModel.EnumGuaranteeTypeValue = dicoDropDownEnumModel[CustomEnumBL.GuaranteeType];

            //7- Alerts
            recueilModel.Option = AlertBL.GetOptionWithAlerts(recueilModel.Option);
            recueilModel.Option = AlertBL.GetOptionAttributesWithAlerts(recueilModel.Option);

            if (Request.RawUrl.ToLower().Contains("pm"))
            {
                recueilModel.AlertsForTitulairePM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.TitulairePMRootIds);
                recueilModel.AlertsForPersonnePM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.PersonnePMRootIds);
                recueilModel.AlertsForEntretienPM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.EntretienPMRootIds);
                recueilModel.AlertsForRevenusPM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.RevenusPMRootIds);
                recueilModel.AlertsForOrientationsPM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.OrientationsPMRootIds);
                recueilModel.AlertsForProfilPM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.ProfilPMRootIds);
                recueilModel.AlertsForCategorisationPM = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.CategorisationPMRootIds);
            }
            else if (Request.RawUrl.ToLower().Contains("pp"))
            {
                recueilModel.AlertsForTitulairePP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.TitulairePPRootIds);
                recueilModel.AlertsForPersonnePP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.PersonnePPRootIds);
                recueilModel.AlertsForEntretienPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.EntretienPPRootIds);
                recueilModel.AlertsForRevenusPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.RevenusPPRootIds);
                recueilModel.AlertsForCreditsPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.CreditsPPRootIds);
                recueilModel.AlertsForChargesPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.ChargesPPRootIds);
                recueilModel.AlertsForOrientationsPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.OrientationsPPRootIds);
                recueilModel.AlertsForProfilPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.ProfilPPRootIds);
                recueilModel.AlertsForCategorisationPP = AlertBL.GetAlertsRelatedToOptionRootIds(RecueilController.CategorisationPPRootIds);
            }

            //8- Criteria clauses
            recueilModel.CriteriaClauses = CriteriaClauseBL.GetAllCriteriaclausesRelatedToOptionList(recueilModel.Option);

            //9- Map data to RecueilModel
            recueilModel.OptionData = MapOptionToModel(recueilModel, recueilModel.CriteriaClauses, recueilModel.Option);

            //10- Signature controller
            recueilModel.SignatureController = SignatureDocumentBL.GetSignatureControllerName(recueilModel.Report.Status, recueilModel.Report.idDTPUserAccess);

            return recueilModel;
        }
        private void SetCreditsMessage(RecueilModel model)
        {
            CustomerProspect customer = null;

            var currentUser = SessionManager.GetUserSession();

            if (currentUser.IsEndUser())
            {
                customer = SessionManager.GetCustomerProspectSession();
            }
            else
            {
                Guid? customerId = GetCPID();

                if (customerId.HasValue)
                {
                    customer = CustomerProspectBL.GetById(customerId.Value);
                }
            }
            if (customer != null)
            {
                if (model.Report.SignedByAdviser || model.Report.SignedByCustomer) //if signed : check "archivage credit"
                {
                    if (!CreditOperationBL.HasFirmInstitutionSufficientCredit(customer.FirmInstitution.idFirmInstitution, CreditOperationBL.OperationType.MISE_AU_COFFRE_RECUEIL.ToString()))
                        ViewBag.SignError = LanguageData.GetContent("sign_credit_error");
                }
                else
                {
                    if (!CreditOperationBL.HasFirmInstitutionSufficientCredit(customer.FirmInstitution.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_RECUEIL.ToString()))
                        ViewBag.SignError = LanguageData.GetContent("sign_credit_error");
                }

                if (!CreditOperationBL.HasFirmInstitutionSufficientCredit(customer.FirmInstitution.idFirmInstitution, CreditOperationBL.OperationType.MISE_AU_COFFRE_RECUEIL.ToString()))
                    ViewBag.CanSendToFce = LanguageData.GetContent("manual_sendtoCF_credit_error");
            }

        }
        //private ActionResult OverrideTitulairePMValues(ActionResult actionResult)
        //{
        //    if (actionResult is ViewResult)
        //    {
        //        var viewResult = actionResult as ViewResult;
        //        var objModel = viewResult.Model;
        //        var model = objModel as RecueilModel;

        //        #region Identite
        //        var optVal = model.OptionValue.Where(opt => opt.idOption == 537).FirstOrDefault();

        //        if (optVal == null)
        //        {
        //            optVal = new ReportOptionValue() { idOption = 537, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal);
        //        }

        //        FindAndReplaceValue(
        //            optVal,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.SIGLE)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.NUMRCS)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.CITYREGISTRATION)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.NUMSIREN)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.DATEREGISTRATION)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.COMPANYNAME)
        //            },
        //            new List<String>() { 
        //                  model.TargetCustomer.Sigle
        //                , model.TargetCustomer.NumRCS
        //                , model.TargetCustomer.CityRegistration
        //                , model.TargetCustomer.NumSIREN
        //                , model.TargetCustomer.DateRegistration.HasValue ? model.TargetCustomer.DateRegistration.Value.ToString("dd/MM/yyyy") : string.Empty
        //                , model.TargetCustomer.CompanyName
        //               }
        //            );
        //        #endregion

        //        #region Champs Identité (Valeur OptionAttribute)
        //        var optVal576 = model.OptionValue.Where(opt => opt.idOption == 576).FirstOrDefault();

        //        if (optVal576 == null)
        //        {
        //            optVal576 = new ReportOptionValue() { idOption = 576, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal576);
        //        }

        //        FindAndReplaceValue(
        //            optVal576,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.USERNAME_MANAGER)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.USERFIRSTNAME_MANAGER)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.USERMOBILE_MANAGER)
        //            },
        //            new List<String>() {                         
        //                  model.TargetCustomer.User.UserName
        //                , model.TargetCustomer.User.UserFirstName
        //                , model.TargetCustomer.User.UserMobilePhone
        //               }
        //            );
        //        #endregion

        //        #region LegalForm PM
        //        #region LegalForm Champ Autre
        //        var optData552 = model.OptionValue.Where(opt => opt.idOption == 552).FirstOrDefault();

        //        if (optData552 == null)
        //        {
        //            optData552 = new ReportOptionValue() { idOption = 552, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optData552);
        //        }

        //        FindAndReplaceValue(
        //            optData552,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.FORME_JURIDIQUE_AUTRE)
        //            },
        //            new List<String>() {                         
        //                  model.TargetCustomer.LegalForm_Autre
        //               }
        //            );
        //        #endregion

        //        #region LegalForm Champ Appartenance au Groupe
        //        var optData555 = model.OptionValue.Where(opt => opt.idOption == 555).FirstOrDefault();

        //        if (optData555 == null)
        //        {
        //            optData555 = new ReportOptionValue() { idOption = 555, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optData555);
        //        }

        //        FindAndReplaceValue(
        //            optData555,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.FORME_JURIDIQUE_APPARTENANCE)
        //            },
        //            new List<String>() {                         
        //                  model.TargetCustomer.LegalForm_Appartenance_Groupe
        //               }
        //            );
        //        #endregion
        //        #endregion

        //        #region Affichage de la date dans "Origine de la relation" PM
        //        // récuperation des ReportOptionValue par l'idOption du parent
        //        var optVal601 = model.OptionValue.Where(opt => opt.idOption == 601).FirstOrDefault();

        //        // créer si null
        //        if (optVal601 == null)
        //        {
        //            optVal601 = new ReportOptionValue() { idOption = 601, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal601);
        //        }

        //        // replacer les OptionAttributes
        //        FindAndReplaceValue(
        //                optVal601,
        //                new List<int>() { Convert.ToInt16(NUMOPTIONATTRIBUTE_ORIGINE_DE_LA_RELATION_PM.CLIENT_DEPUIS_LE)
        //            },
        //                new List<String>() { 
        //                  (model.TargetCustomer.RelationshipBeginingDate.HasValue) ? model.TargetCustomer.RelationshipBeginingDate.Value.ToString("dd/MM/yyyy") : null
        //                }
        //                );
        //        #endregion

        //        #region Forme Juridique
        //        if (model.TargetCustomer.IsCorporation.HasValue && model.TargetCustomer.IsCorporation.Value)
        //        {
        //            model = ClearRadioSelectionByIdParent(model, 539);

        //            if (model.TargetCustomer.LegalForm == "SA")
        //            {
        //                var optVal542 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.SA).FirstOrDefault();
        //                if (optVal542 != null) optVal542.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "SARL")
        //            {
        //                var optVal544 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.SARL).FirstOrDefault();
        //                if (optVal544 != null) optVal544.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "SAS")
        //            {
        //                var optVal543 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.SAS).FirstOrDefault();
        //                if (optVal543 != null) optVal543.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "SC_IS" || model.TargetCustomer.LegalForm == "SC_IR")
        //            {
        //                var optVal546 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.SC).FirstOrDefault();
        //                if (optVal546 != null) optVal546.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "EURL")
        //            {
        //                var optVal545 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.EURL).FirstOrDefault();
        //                if (optVal545 != null) optVal545.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "Association_IS" || model.TargetCustomer.LegalForm == "Association_IR")
        //            {
        //                var optVal549 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.ASSOCIATION).FirstOrDefault();
        //                if (optVal549 != null) optVal549.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm != null && model.TargetCustomer.LegalForm.IndexOf("Appartenance", 0) == 0)
        //            {
        //                var optVal555 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.APPARTENANCE).FirstOrDefault();
        //                if (optVal555 != null) optVal555.IsSelected = true;
        //            }
        //            else // Sinon on coche AUTRE
        //            {
        //                var optVal552 = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.AUTRE).FirstOrDefault();
        //                if (optVal552 != null) optVal552.IsSelected = true;
        //            }

        //            #region Société Civile (S.C.) => IS ou IR
        //            model = ClearRadioSelectionByIdParent(model, 546);
        //            if (model.TargetCustomer.LegalForm == "SC_IS")
        //            {
        //                var optValue = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.SC_IS).FirstOrDefault();
        //                if (optValue != null) optValue.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "SC_IR")
        //            {
        //                var optValue = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.SC_IR).FirstOrDefault();
        //                if (optValue != null) optValue.IsSelected = true;
        //            }
        //            #endregion

        //            #region Association => IS ou IR
        //            model = ClearRadioSelectionByIdParent(model, 549);
        //            if (model.TargetCustomer.LegalForm == "Association_IS")
        //            {
        //                var optValue = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.Association_IS).FirstOrDefault();
        //                if (optValue != null) optValue.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "Association_IR")
        //            {
        //                var optValue = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.Association_IR).FirstOrDefault();
        //                if (optValue != null) optValue.IsSelected = true;
        //            }
        //            #endregion

        //            #region Autre => IS ou IR
        //            model = ClearRadioSelectionByIdParent(model, 552);
        //            if (model.TargetCustomer.LegalForm == "Autre_IS")
        //            {
        //                var optValue = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.Autre_IS).FirstOrDefault();
        //                if (optValue != null) optValue.IsSelected = true;
        //            }
        //            else if (model.TargetCustomer.LegalForm == "Autre_IR")
        //            {
        //                var optValue = model.OptionData.Where(o => o.Option.idOption == (int)NUMOPTION_FORME_JURIDIQUE_PM.Autre_IR).FirstOrDefault();
        //                if (optValue != null) optValue.IsSelected = true;
        //            }
        //            #endregion
        //        }
        //        #endregion

        //        #region "Champs (ListedCompany, Market, Industry, OtherIndustry, HasIndustryRestriction, IndustryRestriction, RestrictionPreventInvest)"
        //        #region ListedCompany
        //        model = ClearRadioSelectionByIdParent(model, 564);
        //        if (model.TargetCustomer.ListedCompany != null)
        //        {
        //            if (model.TargetCustomer.ListedCompany.Value)
        //            {
        //                var optValOui = model.OptionData.Where(o => o.Option.NameKey == "ClientPM_Titulaire_039").FirstOrDefault();
        //                if (optValOui != null) optValOui.IsSelected = true;
        //            }
        //            else
        //            {
        //                var optValNon = model.OptionData.Where(o => o.Option.NameKey == "ClientPM_Titulaire_040").FirstOrDefault();
        //                if (optValNon != null) optValNon.IsSelected = true;
        //            }
        //        }
        //        #endregion

        //        #region "Societe cotee"
        //        //-----
        //        var optVal564 = model.OptionValue.Where(opt => opt.idOption == 564).FirstOrDefault();

        //        if (optVal564 == null)
        //        {
        //            optVal564 = new ReportOptionValue() { idOption = 564, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal564);
        //        }

        //        FindAndReplaceValue(
        //            optVal564,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_SOCIETECOTEE_PM.SUR_QUEL_MARCHE)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_SOCIETECOTEE_PM.ADRESSE_SIEGE)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_SOCIETECOTEE_PM.CODE_POSTAL)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_SOCIETECOTEE_PM.VILLE)
        //            },
        //            new List<String>() {                         
        //                  model.TargetCustomer.Market
        //                , model.TargetCustomer.Adress
        //                , model.TargetCustomer.ZipCode
        //                , model.TargetCustomer.City
        //               }
        //            );
        //        //-----
        //        #endregion

        //        #region "Secteur d'activité"
        //        var optVal568 = model.OptionValue.Where(opt => opt.idOption == 568).FirstOrDefault();

        //        if (optVal568 == null)
        //        {
        //            optVal568 = new ReportOptionValue() { idOption = 568, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal568);
        //        }

        //        FindAndReplaceValue(
        //            optVal568,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_SECTEUR_ACTIVITE_PM.INDUSTRY)
        //                , Convert.ToInt16(NUMOPTIONATTRIBUTE_SECTEUR_ACTIVITE_PM.OTHER_INDUSTRY)
        //            },
        //            new List<String>() {                         
        //                  model.TargetCustomer.Industry
        //                , model.TargetCustomer.OtherIndustry
        //               }
        //            );

        //        var optVal569 = model.OptionValue.Where(opt => opt.idOption == 569).FirstOrDefault();

        //        if (optVal569 == null)
        //        {
        //            optVal569 = new ReportOptionValue() { idOption = 569, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal569);
        //        }

        //        FindAndReplaceValue(
        //            optVal569,
        //            new List<int>() { 
        //                 Convert.ToInt16(NUMOPTIONATTRIBUTE_SECTEUR_ACTIVITE_PM.INDUSTRY_RESTRICTION)
        //            },
        //            new List<String>() {                         
        //                 model.TargetCustomer.IndustryRestriction
        //               }
        //            );

        //        #endregion
        //        #endregion

        //        #region "Secteur d’activité (Industry, OtherIndustry, HasIndustryRestriction, IndustryRestriction, RestrictionPreventInvest)"
        //        #region HasIndustryRestriction
        //        model = ClearRadioSelectionByIdParent(model, 569);
        //        if (model.TargetCustomer.HasIndustryRestriction != null)
        //        {
        //            if (model.TargetCustomer.HasIndustryRestriction.Value)
        //            {
        //                var optValOui = model.OptionData.Where(o => o.Option.NameKey == "ClientPM_Titulaire_049").FirstOrDefault();
        //                if (optValOui != null) optValOui.IsSelected = true;
        //            }
        //            else
        //            {
        //                var optValNon = model.OptionData.Where(o => o.Option.NameKey == "ClientPM_Titulaire_050").FirstOrDefault();
        //                if (optValNon != null) optValNon.IsSelected = true;
        //            }
        //        }
        //        #endregion

        //        #region RestrictionPreventInvest
        //        model = ClearRadioSelectionByIdParent(model, 572);
        //        if (model.TargetCustomer.RestrictionPreventInvest != null)
        //        {
        //            if (model.TargetCustomer.RestrictionPreventInvest.Value)
        //            {
        //                var optValOui = model.OptionData.Where(o => o.Option.NameKey == "ClientPM_Titulaire_053").FirstOrDefault();
        //                if (optValOui != null) optValOui.IsSelected = true;
        //            }
        //            else
        //            {
        //                var optValNon = model.OptionData.Where(o => o.Option.NameKey == "ClientPM_Titulaire_054").FirstOrDefault();
        //                if (optValNon != null) optValNon.IsSelected = true;
        //            }
        //        }
        //        #endregion
        //        #endregion

        //        #region IsResident  ou Pays de domiciliation pour PM
        //        model = ClearRadioSelectionByIdParent(model, 540);
        //        if (model.TargetCustomer.IsResident != null)
        //        {
        //            if (model.TargetCustomer.IsResident.Value)
        //            {
        //                var optValResident = model.OptionData.Where(o => o.Option.idOption == 556).FirstOrDefault();
        //                if (optValResident != null) optValResident.IsSelected = true;
        //            }
        //            else
        //            {
        //                var optValNonResident = model.OptionData.Where(o => o.Option.idOption == 557).FirstOrDefault();
        //                if (optValNonResident != null) optValNonResident.IsSelected = true;
        //            }
        //        }
        //        #endregion

        //        #region Pays de domiciliation
        //        var optVal541 = model.OptionValue.Where(opt => opt.idOption == 541).FirstOrDefault();

        //        if (optVal541 == null)
        //        {
        //            optVal541 = new ReportOptionValue() { idOption = 541, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal541);
        //        }

        //        FindAndReplaceValue(
        //            optVal541,
        //            new List<int>() { 
        //                  Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.COUNTRY_PM)

        //            },
        //            new List<String>() { 
        //                  model.TargetCustomer.Country
        //               }
        //            );
        //        #endregion

        //        #region GAFI(OptionAttribute)
        //        model = ClearRadioSelectionByIdParent(model, 558);
        //        if (model.TargetCustomer.Gafi != null)
        //        {
        //            if (model.TargetCustomer.Gafi.Value)
        //            {
        //                var optValOui = model.OptionData.Where(o => o.Option.idOption == 559).FirstOrDefault();
        //                if (optValOui != null) optValOui.IsSelected = true;
        //            }
        //            else
        //            {
        //                var optValNon = model.OptionData.Where(o => o.Option.idOption == 560).FirstOrDefault();
        //                if (optValNon != null) optValNon.IsSelected = true;
        //            }
        //        }
        //        #endregion

        //        #region OFFSHORE(OptionAttribute)
        //        model = ClearRadioSelectionByIdParent(model, 561);
        //        if (model.TargetCustomer.OffShore != null)
        //        {
        //            if (model.TargetCustomer.OffShore.Value)
        //            {
        //                var optValOui = model.OptionData.Where(o => o.Option.idOption == 562).FirstOrDefault();
        //                if (optValOui != null) optValOui.IsSelected = true;
        //            }
        //            else
        //            {
        //                var optValNon = model.OptionData.Where(o => o.Option.idOption == 563).FirstOrDefault();
        //                if (optValNon != null) optValNon.IsSelected = true;
        //            }
        //        }
        //        #endregion

        //        #region FiscalAdress PrivatePhone Email
        //        var optVal538 = model.OptionValue.Where(opt => opt.idOption == 538).FirstOrDefault();

        //        if (optVal538 == null)
        //        {
        //            optVal538 = new ReportOptionValue() { idOption = 538, idReport = model.Report.idReport };
        //            model.OptionValue.Add(optVal538);
        //        }

        //        FindAndReplaceValue(
        //            optVal538,
        //            new List<int>() { 
        //                 Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.FISCALADDRRESS_PM)
        //                ,Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.EMAIL_PM)
        //                ,Convert.ToInt16(NUMOPTIONATTRIBUTE_IDENTITE.MOBILE_PM)
        //                ,Convert.ToInt16(NUMOPTION_FORME_JURIDIQUE_PM.FISCALZIPCODE)
        //                ,Convert.ToInt16(NUMOPTION_FORME_JURIDIQUE_PM.FISCALCITY)
        //            },
        //            new List<String>() {                         
        //                 model.TargetCustomer.FiscalAddrress
        //                ,model.TargetCustomer.Email
        //                ,model.TargetCustomer.PrivatePhone
        //                ,model.TargetCustomer.FiscalZipCode
        //                ,model.TargetCustomer.FiscalCity
        //               }
        //            );
        //        #endregion

        //    }

        //    return actionResult;
        //}
        #endregion

        private RecueilModel ClearRadioSelectionByIdParent(RecueilModel model, int idParent)
        {
            // Effacer les valeurs par defaut des options
            var lstOptionLegalForm = model.OptionData.Where(o => o.Option.idParent == idParent).ToList();
            if (lstOptionLegalForm != null)
            {
                foreach (var opt in lstOptionLegalForm)
                {
                    opt.IsSelected = false;
                }
            }

            return model;
        }