コード例 #1
0
        /// <summary>
        /// Metodo testa a regra lógica a fim de enquadrar a atual variavel em um critério
        /// </summary>
        /// <param name="entidadeFilha"></param>
        /// <param name="entidade"></param>
        /// <returns></returns>
        public Criterio TestaRegraLogica(List <Variavel> entidadeFilha, Variavel entidade)
        {
            RegraLogicaBLL                   oRegraLogica          = new RegraLogicaBLL();
            List <RegraLogica>               dadosRegraLogicaLista = new List <RegraLogica>();
            RegraLogica                      dadosRegraLogica      = new RegraLogica();
            Criterio                         dadosCriterio         = new Criterio();
            MapeamentoCriterioRegraLogica    dadosMapeamento       = new MapeamentoCriterioRegraLogica();
            MapeamentoCriterioRegraLogicaBLL oMapeamento           = new MapeamentoCriterioRegraLogicaBLL();

            dadosRegraLogica.Variavel = entidade;
            //carrega todas as regras logicas da variavel pai
            dadosRegraLogicaLista = oRegraLogica.ListarPorVariavel(dadosRegraLogica);

            //percorre a lista de regra logica até encontrar a regra válida
            for (int i = 0; i < dadosRegraLogicaLista.Count; i++)
            {
                for (int j = 0; j < entidadeFilha.Count; j++)
                {
                    entidadeFilha[j].RegraLogica.IdRegraLogica = dadosRegraLogicaLista[i].IdRegraLogica;
                    //testa Variaveis para encontrar a regra lógica válida
                    entidadeFilha[j].RegraLogica = oRegraLogica.ValidarVariavel(entidadeFilha[j]);
                    //Regra Lógica falsa interrompe o laço
                    if (entidadeFilha[j].RegraLogica.Valido == false)
                    {
                        break;
                    }
                    //Regra lógica válida prepara o critério para retorno
                    else if (j + 1 == entidadeFilha.Count)
                    {
                        if (dadosRegraLogicaLista[i].VariavelHerdado.IDVariavel == 0)
                        {
                            dadosCriterio.IDCriterio = dadosRegraLogicaLista[i].Criterio.IDCriterio;
                        }
                        else
                        {
                            //Consome o Critério Original
                            dadosMapeamento.IdCriterioOriginal = Convert.ToInt32(dadosRegraLogicaLista[i].Criterio.IDCriterio);
                            //carrega o Critério Transformado
                            dadosMapeamento          = oMapeamento.Listar(dadosMapeamento);
                            dadosCriterio.IDCriterio = dadosMapeamento.IdCriterioTrasnformado;
                        }
                        return(dadosCriterio);
                    }
                }
            }
            return(dadosCriterio);
        }
コード例 #2
0
        /// <summary>
        /// metodo localiza a variavel Output Global e seus filhos diretos
        /// </summary>
        /// <param name="entidade"></param>
        /// <returns></returns>
        public void SegmentarEntidade(Entidade entidade)
        {
            VariavelBLL        oVariavel             = new VariavelBLL();
            EntidadeBLL        oEntidade             = new EntidadeBLL();
            RegraLogicaBLL     oRegraLogica          = new RegraLogicaBLL();
            Variavel           dadosVariavelLista    = new Variavel();
            Segmento           dadosSeguimento       = new Segmento();
            RegraLogica        dadosRegraLogica      = new RegraLogica();
            List <RegraLogica> dadosRegraLogicaLista = new List <RegraLogica>();

            //retorna a variavel OutputGlobal
            dadosVariavelLista = oVariavel.ListarOutputGlobal(entidade.Variavel);
            //retorna lista de filhos do OutputGlobal
            //dadosVariavelLista = oVariavel.ListarRelacao(dadosVariavelLista);

            //retorna Critérios das variaveis recursivamente
            for (int i = 0; i < dadosVariavelLista.VariavelFilho.Count; i++)
            {
                //Variavel com Tipo de dado Importado
                if (dadosVariavelLista.VariavelFilho[i].TipoDadoVariavel.IDTipoDadoVariavel == 1)
                {
                    entidade.Variavel.IDVariavel = dadosVariavelLista.VariavelFilho[i].IDVariavel;
                    entidade = oEntidade.ListarVariavel(entidade);
                    if (entidade.Variavel.Criterio.IDCriterio != 0)
                    {
                        dadosVariavelLista.VariavelFilho[i].Criterio.IDCriterio = entidade.Variavel.Criterio.IDCriterio;
                    }
                    else
                    {
                        dadosVariavelLista.VariavelFilho[i].Criterio.Valor = entidade.Variavel.Criterio.Valor;
                    }
                }
                //Variavel com Tipo de dado Deduzido ou Calculo
                else
                {
                    //Recursivamente Procura Filhos e seus criterios
                    dadosVariavelLista.VariavelFilho[i].Criterio = RetornaCriterio(dadosVariavelLista.VariavelFilho[i], entidade);
                }
            }

            dadosRegraLogica.Variavel = entidade.Variavel;
            //carrega todas as regras logicas do OutputGlobal
            dadosRegraLogicaLista = oRegraLogica.ListarPorVariavel(dadosRegraLogica);

            //percorre a lista de regra logica até encontrar a regra válida
            for (int i = 0; i < dadosRegraLogicaLista.Count; i++)
            {
                for (int j = 0; j < dadosVariavelLista.VariavelFilho.Count; j++)
                {
                    dadosVariavelLista.VariavelFilho[j].RegraLogica.IdRegraLogica = dadosRegraLogicaLista[i].IdRegraLogica;
                    //testa Variaveis para encontrar a regra lógica válida
                    dadosVariavelLista.VariavelFilho[j].RegraLogica = oRegraLogica.ValidarVariavel(dadosVariavelLista.VariavelFilho[j]);
                    //Regra Lógica falsa interrompe o laço
                    if (dadosVariavelLista.VariavelFilho[j].RegraLogica.Valido == false)
                    {
                        break;
                    }

                    //Regra lógica válida prepara o critério para retorno
                    else if (j + 1 == dadosVariavelLista.VariavelFilho.Count)
                    {
                        //Consome a Regra Logica
                        entidade.Segmento.RegraLogica.IdRegraLogica = dadosRegraLogicaLista[i].IdRegraLogica;
                        //Retorna Segmento basiado na Regra Logica
                        entidade.Segmento = ListarRegraLogica(entidade.Segmento);
                        //Cadastra a Entidade em um Segmento
                        NovaEntidade(entidade.Segmento);
                        //Incrementa o tamanho do mercado de um segmento
                        ControleTamanhoMercado(entidade.Segmento);
                        return;
                    }
                }
            }
        }