/// <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); }
/// <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; } } } }
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); } }