public IActionResult ConcluirProva([FromBody] ProvaInputData provaInputData) { //_provaService.AdicionarProvaAsync(provaInputData, LoginUsuario); try { if (provaInputData?.AvaliacaoId > 0) { //TODO - Gravar prova do aluno. //Ao gravar a prova, deve ser atribuída a nota por questão conforme especificação do projeto. //A nota da questão **NÃO É A NOTA DA PROVA** é um valor decimal que varia de zero a 1 (um) //A nota da prova será calculada no momento de recuperar a lista de provas publicadas do aluno (view Index) _provaService.AdicionarProvaAsync(provaInputData, LoginUsuario); return(Json(new { Success = true })); } else { return(Json(new { Success = false, Error = "O objeto recebido está corrompido." })); } } catch (System.Exception ex) { return(Json(new { Success = false, Error = ex.Message })); } }
public IActionResult ConcluirProva([FromBody] ProvaInputData provaInputData) { //try //{ if (provaInputData?.AvaliacaoId > 0) { //TODO - Gravar prova do aluno. //Ao gravar a prova, deve ser atribuída a nota por questão conforme especificação do projeto. //A nota da questão **NÃO É A NOTA DA PROVA** é um valor decimal que varia de zero a 1 (um) //A nota da prova será calculada no momento de recuperar a lista de provas publicadas do aluno (view Index) var opcaoAvaliacao = new List <OpcaoAvaliacao>(); foreach (var item in provaInputData.Questoes) { opcaoAvaliacao.AddRange(item.Opcoes.Select(x => new OpcaoAvaliacao { Verdadeira = x.Resposta, QuestaoId = item.QuestaoId, Id = x.OpcaoAvaliacaoId })); } _provaService.SalvarProva(provaInputData, LoginUsuario); return(Json(new { Success = true })); } else { return(Json(new { Success = false, Error = "O objeto recebido está corrompido." })); } // } // catch (System.Exception ex) // { // return Json(new { Success = false, Error = ex.Message }); // } }
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); }
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(); }