Exemple #1
0
        public async Task <int> ConcluirProvaAsync(int provaId)
        {
            var prova = await _provaRepository.ObterAsync(provaId);

            if (prova == null)
            {
                throw new DomainException("A prova informada não foi encontrada!");
            }
            //if (prova.QuestoesProva.Where(x => x.OpcoesProva == ).Where(x => x.OpcoesProva.Count > 1).Any())
            //  throw new DomainException("Existem questões inconsistentes na prova!");
            if (prova.DataProva != null)
            {
                throw new DomainException("A prova já foi concluída em " + prova.DataProva + "!");
            }
            prova.DataProva = System.DateTime.Today;
            _provaRepository.SaveChanges();
            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();
        }