Exemple #1
0
        public async Task <int> AdicionarProvaAsync(ProvaInputData provaInputData, string login)
        {
            var aluno     = _alunoRepository.ObterPorLogin(login);
            var avaliacao = await _avaliacaoRepository.ObterComQuestoresAsync(provaInputData.AvaliacaoId);

            Prova prova = new Prova();

            prova.AlunoId     = aluno.Id;
            prova.AvaliacaoId = provaInputData.AvaliacaoId;
            prova.DataProva   = DateTime.Now;
            prova.Aluno       = aluno;
            prova.Avaliacao   = avaliacao;

            foreach (var questao in provaInputData.Questoes)
            {
                //prova.QuestoesProva = new List<QuestaoProva>();
                var questaoProva = new QuestaoProva()
                {
                    QuestaoId = questao.QuestaoId
                };
                prova.QuestoesProva = new List <QuestaoProva>();
                prova.QuestoesProva.Add(questaoProva);

                foreach (var opcao in questao.Opcoes)
                {
                    //questaoProva.OpcoesProva = new List<OpcaoProva>();
                    var opcaoProva = new OpcaoProva()
                    {
                        OpcaoAvaliacaoId = opcao.OpcaoAvaliacaoId, Resposta = opcao.Resposta
                    };
                    questaoProva.OpcoesProva = new List <OpcaoProva>();
                    questaoProva.OpcoesProva.Add(opcaoProva);
                }
            }

            //var avaliacao = await _avaliacaoRepository.ObterComQuestoresAsync(provaInputData.AvaliacaoId);

            foreach (var questao in prova.QuestoesProva)
            {
                var questaoAvaliacao = avaliacao.Questoes.Find(y => y.Id == questao.QuestaoId);
                if (questaoAvaliacao.Tipo == 1)
                {
                    var idVerdadeira = questaoAvaliacao.Opcoes.Find(x => x.Verdadeira).Id;
                    questao.Nota = questao.OpcoesProva.Find(y => y.OpcaoAvaliacaoId == idVerdadeira && y.Resposta) == null ? 0 : 1;
                }
                if (questaoAvaliacao.Tipo == 2)
                {
                    var respostas = 0;
                    foreach (var opcoes in questao.OpcoesProva)
                    {
                        if (opcoes.Resposta == questaoAvaliacao.Opcoes.Find(x => x.Id == opcoes.OpcaoAvaliacaoId).Verdadeira)
                        {
                            respostas++;
                        }
                    }

                    if (respostas != 0)
                    {
                        questao.Nota = (decimal)respostas / (decimal)questaoAvaliacao.Opcoes.Count;
                    }
                    else
                    {
                        questao.Nota = respostas;
                    }
                }
            }

            avaliacao.Provas = new List <Prova>();
            _provaRepository.Adicionar(prova);

            await _provaRepository.SaveChangesAsync();

            return(prova.Id);
        }
Exemple #2
0
        public void SalvarProva(ProvaInputData provaInputData, string login)
        {
            //Registro aluno - 1
            var aluno     = _alunoRepository.ObterPorLogin(login);
            var avaliacao = _avaliacaoRepository.ObterAvalicao(provaInputData.AvaliacaoId);
            //var questoeProva = _questaoRepository.Consultar(x => x.ProvaId == provaInputData.AvaliacaoId).ToList();
            //Objeto prova - 2
            Prova prova = new Prova();

            prova.DataProva   = DateTime.Now;
            prova.AvaliacaoId = provaInputData.AvaliacaoId;
            prova.AlunoId     = aluno.Id;
            prova.Aluno       = aluno;
            prova.Avaliacao   = avaliacao;

            foreach (var x in provaInputData.Questoes)
            {
                var questaoProva = new QuestaoProva()
                {
                    QuestaoId = x.QuestaoId
                };
                prova.QuestoesProva.Add(questaoProva);
                foreach (var y in x.Opcoes)
                {
                    var opcaoProva = new OpcaoProva()
                    {
                        OpcaoAvaliacaoId = y.OpcaoAvaliacaoId, Resposta = y.Resposta
                    };
                    questaoProva.OpcoesProva.Add(opcaoProva);
                }
            }
            //Calcula nota
            var avaliacaoTeste = _avaliacaoRepository.ObterComQuestoresAsync(provaInputData.AvaliacaoId);

            foreach (var x in prova.QuestoesProva)
            {
                var acertos          = new List <OpcaoProva>();
                var questaoAvaliacao = avaliacaoTeste.Result.Questoes.Find(y => y.Id == x.QuestaoId);

                if (questaoAvaliacao.Tipo == 1)
                {
                    var idVerdadeira = questaoAvaliacao.Opcoes.Find(z => z.Verdadeira).Id;
                    x.Nota = x.OpcoesProva.Find(y => y.OpcaoAvaliacaoId == idVerdadeira && y.Resposta) == null ? 0 : 1;
                }
                if (questaoAvaliacao.Tipo == 2)
                {
                    var respostas = 0;
                    foreach (var y in x.OpcoesProva)
                    {
                        if (y.Resposta == questaoAvaliacao.Opcoes.Find(s => s.Id == y.OpcaoAvaliacaoId).Verdadeira)
                        {
                            respostas++;
                        }
                    }
                    if (respostas != 0)
                    {
                        x.Nota = (decimal)respostas / (decimal)questaoAvaliacao.Opcoes.Count;
                    }
                    else
                    {
                        x.Nota = respostas;
                    }
                }
            }
            _provaRepository.Adicionar(prova);
            _provaRepository.SaveChanges();
        }