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 async Task <int> SalvarProvaAsync(ProvaQueryResult prova, string login)
        {
            var aluno = await _alunoRepository.ObterPorLogin(login);

            if (aluno == null)
            {
                throw new Exception("O aluno não foi localizado!");
            }

            var publicacao = await _publicacaoRepository.ObterComRelacoesAsync(prova.PublicacaoId);

            if (publicacao == null)
            {
                throw new Exception("A publicacao não foi localizada!");
            }

            if (publicacao.DataInicio >= DateTime.Now || publicacao.DataFim <= DateTime.Now)
            {
                throw new Exception("Prova fora da data de realização!");
            }

            if (!publicacao.Turma.Alunos.Select(a => a.Id).ToList().Contains(aluno.Id))
            {
                throw new Exception("Publicação não disponível para esse aluno!");
            }

            var Novaprova = new Prova()
            {
                IdAluno      = aluno.Id,
                IdPublicacao = publicacao.Id,
                IdAvaliacao  = publicacao.IdAvaliacao,
                CriadoEm     = DateTime.Now,
                AtualizadoEm = DateTime.Now,
                Questoes     = prova.Questoes.Select(q => new ProvaQuestao
                {
                    IdAvaliacaoQuestao = q.QuestaoId,
                    IdProva            = 0,
                    Nota         = 0,
                    AtualizadoEm = DateTime.Now,
                    CriadoEm     = DateTime.Now,
                }).ToList()
            };

            Avaliacao av = publicacao.Avaliacao;

            for (int i = 0; i < av.Questoes.Count; i++)
            {
                Novaprova.Questoes[i].Opcoes = new List <ProvaOpcao>();
                if (av.Questoes[i].Tipo == 1)
                {
                    for (int j = 0; j < av.Questoes[i].Opcoes.Count; j++)
                    {
                        AvaliacaoOpcao        op         = av.Questoes[i].Opcoes[j];
                        OpcaoProvaQueryResult opResposta = prova.Questoes[i].Opcoes[j];

                        Novaprova.Questoes[i].Opcoes.Add(new ProvaOpcao {
                            IdAvaliacaoOpcao = opResposta.OpcaoAvaliacaoId,
                            Resposta         = opResposta.Resposta
                        });
                        if (op.Resposta == opResposta.Resposta)
                        {
                            Novaprova.Questoes[i].Nota = 1;
                        }
                    }
                }
                else
                {
                    double valorOpcao = 1.0 / av.Questoes[i].Opcoes.Count();
                    for (int j = 0; j < av.Questoes[i].Opcoes.Count; j++)
                    {
                        AvaliacaoOpcao        op         = av.Questoes[i].Opcoes[j];
                        OpcaoProvaQueryResult opResposta = prova.Questoes[i].Opcoes[j];

                        Novaprova.Questoes[i].Opcoes.Add(new ProvaOpcao
                        {
                            IdAvaliacaoOpcao = opResposta.OpcaoAvaliacaoId,
                            Resposta         = opResposta.Resposta
                        });
                        if (op.Resposta == opResposta.Resposta)
                        {
                            Novaprova.Questoes[i].Nota += valorOpcao;
                        }
                    }
                }
            }

            _provaRepository.Adicionar(Novaprova);
            await _provaRepository.SaveChangesAsync();

            return(Novaprova.Id);
        }