Exemple #1
0
        /// <summary>
        /// Metodo testa todas as variaveis filho e busca seus criterios
        /// </summary>
        /// <param name="entidade"></param>
        /// <returns></returns>
        public Criterio RetornaCriterio(Variavel entidadeVariavel, Entidade entidade)
        {
            EntidadeBLL oEntidade = new EntidadeBLL();
            VariavelCalculoVariavelBLL oCalculoVariavel = new VariavelCalculoVariavelBLL();
            VariavelBLL oVariavel          = new VariavelBLL();
            Criterio    dadosCriterio      = new Criterio();
            Variavel    dadosVariavelLista = new Variavel();

            //Retorna lista de filhos das variáveis
            //dadosVariavelLista = oVariavel.ListarRelacao(entidadeVariavel);

            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 Calculado
                else
                {
                    //Recursivamente Procura Filhos e seus criterios ou valores
                    dadosVariavelLista.VariavelFilho[i].Criterio = RetornaCriterio(dadosVariavelLista.VariavelFilho[i], entidade);
                }
            }
            //Variavel com Tipo de dado Calculo
            if (entidadeVariavel.TipoDadoVariavel.IDTipoDadoVariavel == 3)
            {
                //retorna o critério Utilizando o Calculo das variaveis filhas
                dadosCriterio = CalculaVariavel(dadosVariavelLista.VariavelFilho, entidadeVariavel);
            }
            //Variavel com Tipo de dado Deduzido
            else
            {
                //Retorna o criterio Utilizando a RegraLogica com base nos critérios das variaveis filhas
                dadosCriterio = TestaRegraLogica(dadosVariavelLista.VariavelFilho, entidadeVariavel);
            }

            return(dadosCriterio);
        }
        /// <summary>
        /// Metodo gera codigo de Variavel, quando este possui "Pai", chamar este metodo no momento da escolha da Variavel Pai
        /// </summary>
        /// <param name="entidade"></param>
        /// <param name="idPai"></param>
        /// <returns></returns>
        public Variavel GeraCodigo(List <Variavel> entidade, string idPai)
        {
            //variavel usada para retornar o Codigo
            string codigo = string.Empty;

            List <Variavel> dadosVariavelLista = new List <Variavel>();
            VariavelBLL     oVariavel          = new VariavelBLL();
            Variavel        dadosVariavel      = new Variavel();
            //variaval geradora de Codigo novo
            int codigoNovo = 0;

            for (int i = 0; i < entidade.Count; i++)
            {
                if (entidade[i].IDVariavel.ToString() == idPai)
                {
                    dadosVariavelLista = oVariavel.ListarRelacao(entidade[i]);

                    dadosVariavel.IdPai  = Convert.ToInt32(idPai);
                    codigoNovo           = Convert.ToInt32(entidade[i].VariavelFilho.Count) + 1 + dadosVariavelLista.Count;
                    dadosVariavel.Codigo = entidade[i].Codigo + "." + codigoNovo.ToString();
                }
            }
            return(dadosVariavel);
        }
Exemple #3
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;
                    }
                }
            }
        }
Exemple #4
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);
            }
        }