コード例 #1
0
        public ModeloDeFormulario GravarModeloFormulario(ModeloFormularioDTO modeloDTO, string UsuarioID)
        {
            ModeloDeFormulario modelo;

            using (IRepository <ModeloDeFormulario> repo = factory.Get().GetRepository <ModeloDeFormulario>())
            {
                if (modeloDTO.ModeloFormularioID > 0)
                {
                    modelo = BuscarModeloDeFormulario().Single(c => c.ModeloFormularioID == modeloDTO.ModeloFormularioID);
                }
                else
                {
                    modelo = repo.Insert(CreateInstance <ModeloDeFormulario>());
                }

                modelo.Descricao = modeloDTO.Descricao;
                modelo.Html      = modeloDTO.Html;

                modelo.ControleAtualizacao = ControleUsuario.Criar(UsuarioID);

                modeloDTO.Perguntas.AtribuirUsuarioID(UsuarioID);

                //Perguntas novas
                foreach (PerguntaDTO perguntaDTO in modeloDTO.Perguntas.Where(c => c.PerguntaID <= 0 || !modelo.Perguntas.Any(d => d.PerguntaID == c.PerguntaID)))
                {
                    Pergunta pergunta = GravarPergunta(perguntaDTO, UsuarioID);
                    pergunta.ModeloDeFormulario = modelo;

                    modelo.Perguntas.Add(pergunta);

                    if (perguntaDTO.PerguntaCondicional != null)
                    {
                        Pergunta            perguntaOrigem = modelo.Perguntas.Single(c => c.PerguntaID == perguntaDTO.PerguntaCondicional.PerguntaID);
                        PerguntaCondicional pCondicional   = GravarPerguntaCondicional(perguntaDTO.PerguntaCondicional, perguntaOrigem, UsuarioID);
                        pergunta.PerguntaCondicional = pCondicional;
                    }

                    foreach (LeiautePerguntaDTO leiautePerguntaDTO in perguntaDTO.LeiautesPergunta.ToList())
                    {
                        LeiautePergunta leiautePergunta = CriarLeiautePergunta(leiautePerguntaDTO);
                        //grava o leiaute vinculado à pergunta
                        GravarLeiautePergunta(leiautePergunta, UsuarioID);
                    }

                    if (perguntaDTO.LeiautesPergunta.Any() == false)
                    {
                        GravarLeiautePergunta(LeiautePergunta.LeiautePadrao(pergunta), UsuarioID);
                    }
                }

                //Perguntas atualizadas
                foreach (Pergunta pergunta in modelo.Perguntas.ToList())
                {
                    pergunta.ModeloDeFormulario = modelo;
                    //tracking changes
                    PerguntaDTO perguntaDTO = modeloDTO.Perguntas.SingleOrDefault(d => d.PerguntaID == pergunta.PerguntaID);
                    if (perguntaDTO.Deleted)
                    {
                        List <Pergunta> perguntasCondicionais = modelo.Perguntas.Where(c => c.PerguntaCondicionalID == perguntaDTO.PerguntaID).ToList();

                        foreach (Pergunta pCondicional in perguntasCondicionais)
                        {
                            //remove o vínculo, operações e valor de ativação
                            pCondicional.RemoverCondicional();
                        }

                        foreach (LeiautePergunta leiautePergunta in pergunta.LeiautePerguntas.ToList())
                        {
                            //remove o leiaute vinculado à pergunta
                            ExcluirLeiautePergunta(leiautePergunta.LeiautePerguntaID);
                        }

                        //Remove a pergunta do modelo (Caso não tenha nenhuma resposta)
                        ExcluirPergunta(perguntaDTO.PerguntaID);
                    }
                    else
                    {
                        //Atualização
                        pergunta.AtribuirPergunta(perguntaDTO);
                        //Pergunta condicinoal removida
                        if (pergunta.PerguntaCondicionalID.HasValue && perguntaDTO.PerguntaCondicionalID.HasValue == false)
                        {
                            pergunta.RemoverCondicional();
                            ExcluirPerguntaCondicional(pergunta.PerguntaCondicionalID.Value);
                        }
                        else if (perguntaDTO.PerguntaCondicionalID.HasValue)
                        {
                            PerguntaCondicional condicional = GravarPerguntaCondicional(perguntaDTO.PerguntaCondicional, pergunta, UsuarioID);
                        }

                        foreach (LeiautePergunta leiautePergunta in pergunta.LeiautePerguntas.ToList())
                        {
                            //grava o leiaute vinculado à pergunta
                            GravarLeiautePergunta(leiautePergunta, UsuarioID);
                        }
                    }
                }
            }
            return(modelo);
        }