public RespostaModeloDeFormulario GravarRespostaModeloFormulario(RespostaModeloFormularioDTO respostaModeloDTO, string UsuarioID) { using (var repo = factory.Get().GetRepository <Resposta>()) using (var repoRespostaModelo = factory.Get().GetRepository <RespostaModeloDeFormulario>()) using (var repoPergunta = factory.Get().GetRepository <Pergunta>()) { var respostaModeloFormulario = BuscarRespostaModeloDeFormulario().SingleOrDefault(c => c.RespostaModeloFormularioID == respostaModeloDTO.RespostaModeloFormularioID); if (respostaModeloFormulario == null) { respostaModeloFormulario = repoRespostaModelo.Insert(new RespostaModeloDeFormulario()); } respostaModeloFormulario.ModeloDeFormularioID = respostaModeloDTO.ModeloFormulario.ModeloFormularioID; respostaModeloFormulario.ControleAtualizacao = ControleUsuario.Criar(UsuarioID); foreach (var respostaDTO in respostaModeloDTO.Respostas.OrderBy(c => c.PerguntaID).ToList()) { //RespostaTexto var pergunta = respostaModeloDTO.ModeloFormulario.Perguntas.Single(c => c.PerguntaID == respostaDTO.PerguntaID); Resposta resposta = BuscarResposta().SingleOrDefault(c => c.RespostaID == respostaDTO.RespostaID); if (resposta == null) { resposta = repo.Insert(CriarResposta(respostaDTO, pergunta.TipoPergunta)); } else { resposta.AtribuirResposta(respostaDTO); } resposta.Pergunta = repoPergunta.GetQuery().Single(d => d.PerguntaID == resposta.PerguntaID); resposta.RespostaModeloDeFormulario = respostaModeloFormulario; resposta.ControleAtualizacao = ControleUsuario.Criar(UsuarioID); respostaModeloFormulario.Respostas.Add(resposta); } foreach (var resposta in respostaModeloFormulario.Respostas) { bool validarResposta = true; if (resposta.Pergunta.PerguntaCondicionalID.HasValue) { var respostaOrigem = respostaModeloFormulario.Respostas.Single(d => d.PerguntaID == resposta.Pergunta.PerguntaCondicional.PerguntaID); validarResposta = resposta.Pergunta.PerguntaCondicional.ValidarCondicional(respostaOrigem); } if (validarResposta && resposta.Validar() == false) { throw new ApplicationException($"Verifique a resposta da pergunta {resposta.Pergunta.PerguntaID} {resposta.Pergunta.Titulo}"); } } return(respostaModeloFormulario); } }
protected Resposta CriarResposta(RespostaDTO respostaDTO, eTipoPergunta tipoPergunta) { Resposta resposta = null; switch (tipoPergunta) { case eTipoPergunta.Texto: resposta = CreateInstance <RespostaTexto>(); break; case eTipoPergunta.Anexo: resposta = CreateInstance <RespostaAnexo>(); break; case eTipoPergunta.EscolhaUnica: resposta = CreateInstance <RespostaUnica>(); break; case eTipoPergunta.Numero: resposta = CreateInstance <RespostaNumero>(); break; case eTipoPergunta.Data: resposta = CreateInstance <RespostaData>(); break; case eTipoPergunta.Grade: resposta = CreateInstance <RespostaGrade>(); break; case eTipoPergunta.MultiplaEscolha: resposta = CreateInstance <RespostaMultipla>(); break; default: throw new NotImplementedException(); } try { resposta.AtribuirResposta(respostaDTO); } catch (Exception) { throw; } return(resposta); }