public List<CustomerProspectOptionValue> GetSelectedOptionsFromPostData(TarificationModel _dataModel, int idParent)
        {
            List<CustomerProspectOptionValue> retVal = new List<CustomerProspectOptionValue>();

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

            if (ParentOption != null)
            {
                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 = "rb_{0}_{1}";
                        else idPrefix = "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)
                    {
                        CustomerProspectOptionValue newVal = new CustomerProspectOptionValue();
                        newVal.idCustomerProspect = _dataModel.idCustomerProspect;
                        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<CustomerProspectOptionAttributeValue> GetAttributValueFromPostData(TarificationModel _dataModel, int idOption)
        {
            List<CustomerProspectOptionAttributeValue> retVal = new List<CustomerProspectOptionAttributeValue>();

            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();

                    if (dataType.Equals("string") || dataType.Equals("multiline")) idPrefix = "txt_{0}_{1}";
                    else if (dataType.Equals("int") || dataType.Equals("float")) idPrefix = "txt_{0}_{1}";
                    else if (dataType.Equals("datetime")) idPrefix = "dt_{0}_{1}";

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

                    if (!string.IsNullOrEmpty(Request.Params[ParamName]))
                    {
                        string strVal = Request.Params[ParamName];

                        CustomerProspectOptionAttributeValue newVal = new CustomerProspectOptionAttributeValue();
                        newVal.idOptionAttribute = optAttr.idOptionAttribute;
                        newVal.idCustomerProspect = _dataModel.idCustomerProspect;
                        newVal.Value = strVal;
                        retVal.Add(newVal);
                    }
                }
            }

            return retVal;
        }
        public List<CustomerProspectOptionValue> GetSelectedOptions(TarificationModel _dataModel)
        {
            List<CustomerProspectOptionValue> retVal = new List<CustomerProspectOptionValue>();

            var ParentOptions = _dataModel.Option.Where(o => !o.idParent.HasValue);
            if (ParentOptions != null)
            {
                foreach (var parent in ParentOptions)
                {
                    var selectedChild = GetSelectedOptionsFromPostData(_dataModel, parent.idOption);
                    if (selectedChild.Count > 0)
                    {
                        CustomerProspectOptionValue newVal = new CustomerProspectOptionValue();
                        newVal.idCustomerProspect = _dataModel.idCustomerProspect;
                        newVal.idOption = parent.idOption;
                        newVal.Option = parent;
                        retVal.Add(newVal);
                        retVal.AddRange(selectedChild);
                    }
                }
            }

            return retVal;
        }
 public void UpdateData(TarificationModel _dataModel)
 {
     //Retrieve selected Options
     List<CustomerProspectOptionValue> SelectedOptions = GetSelectedOptions(_dataModel);
     //Retrieve Set Attribute Values
     foreach (var optionVal in SelectedOptions)
     {
         foreach (var data in GetAttributValueFromPostData(_dataModel, optionVal.idOption))
         {
             optionVal.CustomerProspectOptionAttributeValue.Add(data);
         }
     }
     //Send Data
     CustomerProspectOptionBL.UpdateCustomerProspectOptions(_dataModel.idCustomerProspect, SelectedOptions);
 }
        public List<TarificationOption> DeriveDataForView(TarificationModel inputData, List<FirmInstitutionOptionValue> lstFirmInstitutionOptionValues)
        {
            List<TarificationOption> retVal = new List<TarificationOption>();

            foreach (Option opt in inputData.Option)
            {
                //Set default values : values from FirmInstitution Tarification
                TarificationOption optModel = new TarificationOption(opt);                
                int idOptionFirmEquivalent = inputData.GetDefaultId(opt.idOption);                                
                var optFirmValue = lstFirmInstitutionOptionValues.Where(ov => ov.idOption.Equals(idOptionFirmEquivalent));                

                if (optFirmValue != null)
                {
                    optModel.IsSelected = optFirmValue.Count() > 0;
                }

                retVal.Add(optModel);
            }

            return retVal;
        }
        public List<TarificationOption> DeriveDataForView(TarificationModel inputData)
        {
            List<TarificationOption> retVal = new List<TarificationOption>();

            foreach (Option opt in inputData.Option)
            {
                TarificationOption optModel = new TarificationOption(opt);
                var optValue = inputData.OptionValue.Where(ov => ov.idOption.Equals(optModel.Option.idOption));
                
                if (optValue != null)
                {
                    optModel.IsSelected = optValue.Count() > 0;
                }
                
                retVal.Add(optModel);
            }

            return retVal;
        }
        public TarificationModel GetViewDataModel(Guid idTargetCustomer)
        {
            var SessionInstitution = Business.Utility.SessionManager.GetFirmInstitutionSession();
            TarificationModel retVal = new TarificationModel();
            //retVal.CustomerProspect = TarificationBL
            //    .GetCustomersForTarificationByIdFirmInstitution(SessionInstitution.idFirmInstitution)
            //    .Where(c => c.idCustomer.Equals(idTargetCustomer)).FirstOrDefault();
            retVal.CustomerProspect = CustomerProspectBL.GetCustomerProspectById(idTargetCustomer);
            retVal.idCustomerProspect = idTargetCustomer;

            //Retrieve Options and Attributes data
            var option = OptionBL.GetOptionsByIdParent(_tarificationParentID);
            if (option != null) retVal.Option = option.ToList();

            //Update Data
            if (Request.RequestType.ToLower() != "get")
            {
                UpdateData(retVal);
            }

            //Retrieve Option Value and OptionAttribute Value
            retVal.OptionValue = CustomerProspectOptionBL.GetOptionValueListWithIdCustomerProspectAndIdParentOption(idTargetCustomer, _tarificationParentID);

            //TODO : If no tarification value, get FirmInstitution tarification values as default
            if (retVal.OptionValue.Count == 0)
            {
                List<FirmInstitutionOptionValue> lstFirmInstitutionOptionValues = this.GetFirmInstitutionTarificationValues();

                retVal.OptionAttributeValueDefault = this.GetFirmInstitutionOptionAttributeValues(lstFirmInstitutionOptionValues);
                
                //Map data to View Model
                retVal.OptionData = DeriveDataForView(retVal, lstFirmInstitutionOptionValues);
            }
            else
            {
                retVal.OptionAttributeValueDefault = new List<FirmInstitutionOptionAttributeValue>();
                //Map data to View Model
                retVal.OptionData = DeriveDataForView(retVal);
            }

            return retVal;
        }