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