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(); }