Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }