示例#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;
                    }
                }
            }
        }
示例#3
0
        public void GerarCodigoSegmento(Modelo entidadeModelo)
        {
            string          codigo;
            Modelo          dadosModelo      = new Modelo();
            TipoSegmentoBLL oTipoSegmento    = new TipoSegmentoBLL();
            Variavel        dadosVariavel    = new Variavel();
            VariavelBLL     oVariavel        = new VariavelBLL();
            Criterio        dadosCriterio    = new Criterio();
            CriterioBLL     oCriterio        = new CriterioBLL();
            RegraLogica     dadosRegraLogica = new RegraLogica();
            RegraLogicaBLL  oRegraLogica     = new RegraLogicaBLL();
            Segmento        dadosSegmento    = new Segmento();

            //Invoca Método para retornar OutputGlobal
            dadosVariavel.Modelo = new Modelo()
            {
                IDModelo = entidadeModelo.IDModelo
            };
            dadosVariavel.TipoSaida = new TipoSaida()
            {
                IDTipoSaida = 3
            };
            dadosVariavel.ClasseVariavel = new ClasseVariavel()
            {
                IDClasseVariavel = null
            };
            dadosVariavel = oVariavel.ListarOutputGlobal(dadosVariavel);
            if (dadosVariavel.IDVariavel == 0)
            {
                throw new Exceptions.RegraLogicaInvalida("NÃO EXISTE NENHUM OUTPUT GLOBAL VINCULADO A ESSE MODELO. IMPOSSÍVEL GERAR SEGMENTOS.");
            }

            //Invoca Método para retornar RegraLógica
            dadosRegraLogica.Variavel = new Variavel()
            {
                IDVariavel = dadosVariavel.IDVariavel
            };
            dadosRegraLogica = oRegraLogica.Listar(dadosRegraLogica);
            if (dadosRegraLogica.RegraLogicaLista.Count == 0)
            {
                throw new Exceptions.RegraLogicaInvalida("NÃO EXISTE NENHUMA REGRA LÓGICA VINCULADA AO OUTPUT GLOBAL DO MODELO. IMPOSSÍVEL GERAR SEGMENTOS.");
            }

            //Pegar o IdRegraLogica de cada indice da lista RegraLogica
            foreach (RegraLogica listRegraLogica in dadosRegraLogica.RegraLogicaLista)
            {
                if (listRegraLogica.IdRegraLogica == null)
                {
                    throw new Exceptions.RegraLogicaInvalida("REGRA LÓGICA NÃO CADASTRADA");
                }

                //Invoca Método para retornar o Nome Modelo.
                dadosModelo = oTipoSegmento.Listar(entidadeModelo);
                //Atribui a primeira letra do Nome Modelo no Código.
                codigo = dadosModelo.Nome[0].ToString();
                //Concatena abre colchetes no Código.
                codigo += "[";

                //Invoca Método para retornar Nome Critério.
                dadosCriterio.IDCriterio   = listRegraLogica.Criterio.IDCriterio;
                dadosCriterio.LinhaNegocio = new LinhaNegocio()
                {
                    IDLinhaNegocio = null
                };
                dadosCriterio = oCriterio.Listar(dadosCriterio);

                //Concatena as 3 primeiras Letras do Nome Critério no Código.
                codigo += dadosCriterio.Nome[0];
                codigo += dadosCriterio.Nome[1];
                codigo += dadosCriterio.Nome[2];
                //Concatena abre parenteses no Código.
                codigo += "(";

                //Invoca Método para retornar uma lista de VariavelRegraLogica.
                dadosVariavel.TipoSaida = new TipoSaida()
                {
                    IDTipoSaida = 3
                };
                dadosVariavel.Modelo = new Modelo()
                {
                    IDModelo = entidadeModelo.IDModelo
                };
                dadosVariavel.RegraLogica = new RegraLogica()
                {
                    IdRegraLogica = listRegraLogica.IdRegraLogica
                };
                dadosVariavel.ClasseVariavel = new ClasseVariavel()
                {
                    IDClasseVariavel = null
                };
                dadosVariavel = oVariavel.ListarRegraLogicaProcessoSegmento(dadosVariavel);

                //Pegar o IdCriterio de cada indice da lista VariavelRegraLogica
                foreach (VariavelRegraLogica list in dadosVariavel.VariavelRegraLogicaLista)
                {
                    //Invoca Método para retornar Nome Critério.
                    dadosCriterio.IDCriterio   = list.Criterio.IDCriterio;
                    dadosCriterio.LinhaNegocio = new LinhaNegocio()
                    {
                        IDLinhaNegocio = null
                    };
                    dadosCriterio = oCriterio.Listar(dadosCriterio);
                    //Concatena as 2 primeiras Letras do Nome Critério no Código.
                    codigo += dadosCriterio.Nome[0];
                    codigo += dadosCriterio.Nome[1] + ", ";
                }

                //Concatena fecha parenteses no Código.
                codigo += ")";
                //Concatena fecha colchetes no Código.
                codigo += "]";

                //Verifica se existe algum relacionamento com o SegmentoRegraLogica e o exclui
                dadosSegmento.Modelo = new Modelo()
                {
                    IDModelo = entidadeModelo.IDModelo
                };
                dadosSegmento = Listar(dadosSegmento);
                foreach (Segmento listSegmento in dadosSegmento.SegmentoLista)
                {
                    dadosSegmento.IDSegmento = listSegmento.IDSegmento;
                    RemoverRegraLogica(dadosSegmento);
                }
                dadosSegmento.Modelo = new Modelo()
                {
                    IDModelo = entidadeModelo.IDModelo
                };
                dadosSegmento.IDSegmento = null;
                dadosSegmento.Codigo     = null;
                dadosSegmento.Usuario    = new Usuario()
                {
                    IDUsuario = null
                };
                try
                {
                    Remover(dadosSegmento);
                }
                catch (Exception)
                {
                    throw new Exceptions.RegraLogicaInvalida("EXISTEM RELACIONAMENTOS PENDENTES PARA ESTE SEGMENTO. IMPOSSÍVEL GERAR SEGMENTOS.");
                }


                //Invoca Método para inserir o Código Segmento.
                dadosSegmento.TamanhoMercado    = null;
                dadosSegmento.Codigo            = codigo;
                dadosSegmento.FatorAtratividade = null;
                dadosSegmento.Modelo            = new Modelo()
                {
                    IDModelo = entidadeModelo.IDModelo
                };
                dadosSegmento.Usuario = new Usuario()
                {
                    IDUsuario = entidadeModelo.Usuario.IDUsuario
                };
                Novo(dadosSegmento);

                //Invoca Método para inserir a relação Segmento e RegraLógica
                dadosSegmento.RegraLogica = new RegraLogica()
                {
                    IdRegraLogica = listRegraLogica.IdRegraLogica
                };
                NovoRegraLogica(dadosSegmento);
            }
        }