public List<CustomerProspectOptionValue> GetSelectedOptionsFromPostData(RegulatoryDocumentModel _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.TargetCustomerProspect.idCustomer;
                        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;
        }
        private RegulatoryDocumentModel AddParentOptionToOptionValue(int idOption, int idOptionParent, RegulatoryDocumentModel regulatoryDocumentModel)
        {
            List<CustomerProspectOptionValue> lstRMValues = regulatoryDocumentModel.OptionValue;

            //exist optionvalue from RM ?
            CustomerProspectOptionValue rmOptValue = lstRMValues.Where(ov => ov.idOption == idOption).FirstOrDefault();
            if (rmOptValue != null)
            {
                //Add optionParent if not exist
                CustomerProspectOptionValue rmOptParentValue = lstRMValues.Where(ov => ov.idOption == idOptionParent).FirstOrDefault();
                if (rmOptParentValue == null)
                {
                    rmOptParentValue = new CustomerProspectOptionValue()
                    {
                        idCustomerProspectOptionValue = 0, //??
                        idOption = idOptionParent,
                        idCustomerProspect = regulatoryDocumentModel.TargetCustomerProspect.idCustomer,
                        Value = string.Empty
                    };
                    lstRMValues.Add(rmOptParentValue);
                }
            }

            return regulatoryDocumentModel;
        }
        public List<CustomerProspectOptionValue> GetSelectedOptions(RegulatoryDocumentModel _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.TargetCustomerProspect.idCustomer;
                        newVal.idOption = parent.idOption;
                        newVal.Option = parent;
                        retVal.Add(newVal);
                        retVal.AddRange(selectedChild);
                    }
                }
            }

            return retVal;
        }
        private RegulatoryDocumentModel GetOptionAttributeValueFromLMtoRM(int idOptionLM, int idOptionAttributeLM, int idOptionRM, int idOptionAttributeRM, RegulatoryDocumentModel regulatoryDocumentModel)
        {
            List<CustomerProspectOptionValue> lstRMValues = regulatoryDocumentModel.OptionValue;
            List<CustomerProspectOptionValue> lstLMValues = regulatoryDocumentModel.LM_RemunerationOptionValues;

            //Get from RM
            string RM_AttributeValue = CustomerProspectOptionBL.GetAttributeValue(idOptionRM, idOptionAttributeRM, lstRMValues);

            if (!string.IsNullOrEmpty(RM_AttributeValue))
            {
                //Remove old option and attribute values
                CustomerProspectOptionValue rmOptValue = lstRMValues.Where(ov => ov.idOption == idOptionRM).FirstOrDefault();

                IList<CustomerProspectOptionAttributeValue> lstOptionAttributeValues = new List<CustomerProspectOptionAttributeValue>(rmOptValue.CustomerProspectOptionAttributeValue);
                foreach (var item in lstOptionAttributeValues)
                {
                    var optionAttrValueToBeDel = rmOptValue.CustomerProspectOptionAttributeValue.Where(oa => oa.idCustomerProspectOptionAttributeValue == item.idCustomerProspectOptionAttributeValue).FirstOrDefault();
                    rmOptValue.CustomerProspectOptionAttributeValue.Remove(optionAttrValueToBeDel);
                }

                lstRMValues.Remove(rmOptValue);
            }

            //Get from LM
            string LM_AttributeValue = CustomerProspectOptionBL.GetAttributeValue(idOptionLM, idOptionAttributeLM, lstLMValues);

            if (!string.IsNullOrEmpty(LM_AttributeValue))
            {
                //exist optionvalue from RM ?
                CustomerProspectOptionValue rmOptValue = lstRMValues.Where(ov => ov.idOption == idOptionRM).FirstOrDefault();
                if (rmOptValue == null)
                {
                    rmOptValue = new CustomerProspectOptionValue()
                    {
                        idCustomerProspectOptionValue = 0, //??
                        idOption = idOptionRM,
                        idCustomerProspect = regulatoryDocumentModel.TargetCustomerProspect.idCustomer,
                        Value = string.Empty
                    };
                    lstRMValues.Add(rmOptValue);
                }

                CustomerProspectOptionAttributeValue newOptAttributeValue = new CustomerProspectOptionAttributeValue()
                {
                    idCustomerProspectOptionAttributeValue = 0, //??
                    idOptionAttribute = idOptionAttributeRM,
                    idCustomerProspect = regulatoryDocumentModel.TargetCustomerProspect.idCustomer,
                    Value = LM_AttributeValue,
                };

                //Add optionattribute to optionvalue
                rmOptValue.CustomerProspectOptionAttributeValue.Add(newOptAttributeValue);

            }

            return regulatoryDocumentModel;
        }