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