private static Resposta GetResposta(Fato fato, Perguntas perguntas) { Resposta resposta; if (fato.Tipo == TipoResposta.Numerico) { resposta = new Resposta(Manager.instance.LastIdResposta(), perguntas.Return); } else { resposta = Manager.instance.GetRespostaByIdFatoAndIdResposta(fato.Id, perguntas.Return); } return(resposta); }
private void button3_Click(object sender, EventArgs e) { var regras = ObterRegrasComObjetivosAlvo().ToList(); if (regras.Count() == 0) { var noContent = new CustomMsgBox("Falha na inicialização", "É necessário selecionar pelomenos um objetivo antes de inicializar.", MessageBoxType.E_OK); noContent.ShowDialog(); return; } var fatos = GetDistinctFatos(regras); if (fatos.Count == 0) { return; } var respostasUsuario = new RespostasUsuario(); var regrasPossiveis = new List <Regra>(); bool boolPrimeiroLoop = true; foreach (var fato in fatos) { using (var perguntas = new Perguntas(fato)) { perguntas.ShowDialog(); var resposta = GetResposta(fato, perguntas); if (boolPrimeiroLoop) { boolPrimeiroLoop = false; foreach (var regra in regras) { if (!regra.Condicao.Any(c => c.Fato.Nome == fato.Nome)) //na regra, nao importa o fato atual, somente outro { regrasPossiveis.Add(regra); } else { foreach (var condicao in regra.Condicao) { if (fato.Nome == condicao.Fato.Nome) { if (VerificaRespostaBaseadoNoTipo(fato.Tipo, condicao.Operador, condicao.Resposta, resposta)) { regrasPossiveis.Add(regra); if (regra.Condicao.Count == 1 && regrasPossiveis.Count == 1 && regras.Count == 1) { RetornaRespostaParaUsuario(respostasUsuario, regrasPossiveis); return; } } } } } } if (regrasPossiveis.Count == 0) { RetornaRespostaParaUsuario(respostasUsuario, regrasPossiveis); return; } } else { var copy = new List <Regra>(); copy.AddRange(regrasPossiveis); foreach (var regra in copy) { var possuiConectorOu = regra.Condicao.Any(c => c.Conectivo == Conectivo.OU); if (regra.Condicao.Any(c => c.Fato.Nome == fato.Nome)) { foreach (var condicao in regra.Condicao) { if (fato.Nome == condicao.Fato.Nome) { if (!VerificaRespostaBaseadoNoTipo(fato.Tipo, condicao.Operador, condicao.Resposta, resposta)) { regrasPossiveis.Remove(regra); } } } } } } respostasUsuario.AdicionaResposta(fato, resposta); } } RetornaRespostaParaUsuario(respostasUsuario, regrasPossiveis); }