private static void PreencherResposta(ItemQuestionarioParticipacao itemQuestionario, DTORelatorioQuestionarioResposta resposta, List <ItemQuestionarioParticipacaoOpcoes> todasRespostasSelecionadas, Usuario professor = null) { RespostaParticipacaoProfessor rpp; try { rpp = professor != null ? new ManterRespostaParticipacaoProfessor().ObterTodosIQueryable() .FirstOrDefault( x => x.ItemQuestionarioParticipacao.ID == itemQuestionario.ID && x.Professor.ID == professor.ID) : null; } catch (Exception) { rpp = null; } // Caso seja uma questão discursiva, inserir a resposta informada. if (itemQuestionario.TipoItemQuestionario.ID == (int)enumTipoItemQuestionario.Discursiva) { resposta.NotaTexto = rpp != null ? rpp.Resposta : itemQuestionario.Resposta; } else { var respostaSelecionada = todasRespostasSelecionadas.FirstOrDefault( x => x.ItemQuestionarioParticipacao.ID == itemQuestionario.ID); string nota; if (rpp != null) { var notaProfessor = new ManterRespostaParticipacaoProfessorOpcoes().ObterTodosIQueryable() .FirstOrDefault(x => x.RespostaParticipacaoProfessor.ID == rpp.ID && x.RespostaSelecionada == true); nota = notaProfessor?.ItemQuestionarioParticipacaoOpcoes.Nome; resposta.NotaTexto = notaProfessor?.ItemQuestionarioParticipacaoOpcoes.Nome; resposta.IdProfessor = rpp.Professor.ID; } else { nota = respostaSelecionada?.Nome; resposta.NotaTexto = respostaSelecionada?.Nome; } if (nota != null) { // Solução alternativa para obter as notas nos casos dos valores 10 e 0, que são concatenados com strings. // Não existe um campo que salve o valor numérico da resposta. nota = nota.ToLower().Replace("10 - satisfatório", "10") .Replace("0 - insatisfatório", "0"); int n; if (int.TryParse(nota, out n)) { resposta.Nota = n; } else { resposta.Nota = null; } } else { // Se caiu aqui é porque o questionário resposta está mal formatado. resposta.Nota = null; resposta.NotaTexto = null; } } }
private static DTORelatorioQuestionarioParticipacao PreencherRespostas(IReadOnlyList <DTORelatorioQuestionarioQuestao> listaQuestoes, List <ItemQuestionarioParticipacao> itensQuestionarioParticipacao, List <ItemQuestionarioParticipacaoOpcoes> todasRespostasSelecionadas, QuestionarioParticipacao questionarioParticipacao, List <Usuario> professores) { // Objeto DTO contendo vários dados do clone do questionário. var participacaoDto = ObterObjetoParticipacaoDto(questionarioParticipacao); // Obter nota a partir da opção selecionada, ou texto caso seja questão discursiva. foreach (var itemQuestionario in itensQuestionarioParticipacao) { if (itemQuestionario.InAvaliaProfessor && professores.Any()) { var questoes = listaQuestoes.Where( x => x.Nome.ToLower().Trim() == itemQuestionario.Questao.ToLower().Trim()); foreach (var questao in questoes) { var resposta = new DTORelatorioQuestionarioResposta { Questao = questao }; Usuario professor = null; if (questao.IdProfessor != null) { professor = new Usuario { ID = questao.IdProfessor.Value, Nome = questao.NomeProfessor }; } PreencherResposta(itemQuestionario, resposta, todasRespostasSelecionadas, professor); // Adicionar resposta vinculada à pergunta. participacaoDto.Respostas.Add(resposta); } } else { var resposta = new DTORelatorioQuestionarioResposta { // Relaciona a resposta com a questão através do texto da questão. // Absurdo, mas não tem outra opção de relacionar uma questão clone // com a questão original. Chora, deita e rola... Muito. Questao = listaQuestoes.FirstOrDefault( x => x.Nome.ToLower().Trim() == itemQuestionario.Questao.ToLower().Trim()) }; // Só adiciona a resposta para uma pergunta que exista na lista informada. if (resposta.Questao == null) { continue; } PreencherResposta(itemQuestionario, resposta, todasRespostasSelecionadas); // Adicionar resposta vinculada à pergunta. participacaoDto.Respostas.Add(resposta); } } return(participacaoDto); }