예제 #1
0
        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);
                    }
        }
예제 #2
0
        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);
        }