Exemple #1
0
        public List<FormularioComponente> getFormComponentes(int idFormVersao, int idProjeto)
        {
            List<FormularioComponente> listaComponentes = new List<FormularioComponente>();
            FormularioComponente formComponentes;
            using (SqlConnection cn = new SqlConnection(helper.ConnectionString))
            {
                string sql = "select * from PC_Formulario_Componentes_FCP where FCP_FRV_ID = @FCP_FRV_ID";
                SqlParameter[] param = {
                                       new SqlParameter("@FCP_FRV_ID", idFormVersao)
                                   };
                cn.Open();
                try
                {
                    SqlDataReader reader = helper.ExecuteReader(CommandType.Text, sql, param);
                    while (reader.Read())
                    {
                        formComponentes = new FormularioComponente();
                        formComponentes.Id = Convert.ToInt32(reader["FCP_ID"]);
                        formComponentes.IdFormularioVersao = Convert.ToInt32(reader["FCP_FRV_ID"]);
                        formComponentes.IdComponente = Convert.ToInt32(reader["FCP_CMP_ID"]);
                        formComponentes.Ordem = Convert.ToInt32(reader["FCP_ORDEM"]);
                        formComponentes.IsPost = Convert.ToBoolean(reader["FCP_IS_POST"]);
                        formComponentes.IsExpansivel = Convert.ToBoolean(reader["FCP_IS_EXPANSIVEL"]);
                        listaComponentes.Add(formComponentes);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    cn.Close();
                }
            }

            PreencheComponentesExpansiveis(idFormVersao,listaComponentes, idProjeto);

            return listaComponentes;
        }
        public FormularioVersao BuscaForm(Data.DB _db, int? idFormulario, int idProjeto, bool IsPost, FormularioVersao _formPost)
        {
            Projeto _projeto = _db.getProjeto(idProjeto);

            //BUSCANDO OS FORMS DO FLUXO
            List<Formulario> _listaForms = listaForms(idProjeto).OrderBy(f => f.Ordem).ToList();

            //BUSCANDO AS VERSOES DOS FORMULARIOS
            List<FormularioVersao> _listaFormsVersao = new List<FormularioVersao>();
            foreach (var item in _listaForms)
            {
                _listaFormsVersao.Add(listaFormsVersao(item.Id, item.Ordem, _projeto.DtCriacao));
            }

            ViewBag.Forms = _listaFormsVersao;
            ViewBag.IdProjeto = idProjeto;

            FormularioVersao formRenderizado = _listaFormsVersao.FirstOrDefault(f => idFormulario == null || f.IdFormulario == idFormulario.Value);
            ViewBag.Message = formRenderizado.Nome;

            formRenderizado.Componentes = _db.getFormComponentes(formRenderizado.Id, idProjeto).OrderBy(e => e.Ordem).ToList();
            int idFluxo = Convert.ToInt32(Session["FluxoId"]);//Session?


            List<Resposta> ListaRespostasOld = new List<Resposta>();

            if (!IsPost)
                ListaRespostasOld = _db.getRespostas(formRenderizado.Id, idFluxo, idProjeto);

            Resposta respostaOld = null;
            FormularioComponente _comp;
            FormularioElemento _elem;
            foreach (var componente in formRenderizado.Componentes)
            {
                componente.Elementos = _db.getComponenteElementos(componente.IdComponente).OrderBy(e => e.Linha).ThenBy(e => e.Ordem).ToList();

                foreach (var elemento in componente.Elementos)
                {
                    if (IsPost)
                    {
                        //se a chave mudar para permitir ter varios componentes iguais, mudar aqui a busca para chave primaria!
                        _comp = _formPost.Componentes.FirstOrDefault(c => c.IdComponente == elemento.IdComponente);

                        //complemento no formulario postado deve existir, nem todos os componentes são mandados no Post                        
                        if (_formPost.Componentes.FirstOrDefault(c => c.IdComponente == elemento.IdComponente) != null)
                        {
                            _elem = _comp.Elementos.FirstOrDefault(e => e.Id == elemento.Id);
                            if (_elem != null)//nem todos os elementos vem no Post, por isso verificar se algum deve salvar
                                respostaOld = _elem.Respostas;
                        }
                    }
                    else
                        respostaOld = ListaRespostasOld.FirstOrDefault(r => r.IdComponenteElemento == elemento.Id && r.IdComponenteExpansao == 0); //soh o original do modelo do form tera expansao nula

                    if (respostaOld != null)
                        elemento.Respostas = respostaOld;

                    if (elemento.IdTipoElemento == 5 || elemento.IdTipoElemento == 7) //combo || radio
                        elemento.Valores = _db.getFormElementoValores(elemento.Id);
                }

                ComponenteExpansao compExp;
                respostaOld = null;
                //agora os expandidos, pegar os elementos e respostas
                if (componente.IsExpansivel)
                {
                    _comp = new FormularioComponente();
                    if (IsPost)
                    {
                        _comp = _formPost.Componentes.FirstOrDefault(c => c.Id == componente.Id); //pegando o componente que foi postado
                        componente.ListaComponenteExpansao = _comp.ListaComponenteExpansao; //pegar o que cliente modificou, no caso soh posta as expansoes modificadas
                    }

                    foreach (var item in componente.ListaComponenteExpansao)
                    {
                        item.Elementos = _db.getComponenteElementos(componente.IdComponente).OrderBy(e => e.Linha).ThenBy(e => e.Ordem).ToList();

                        foreach (var elemento in item.Elementos)
                        {
                            if (IsPost)
                            {
                                compExp = _comp.ListaComponenteExpansao.FirstOrDefault(ce => ce.Id == item.Id);
                                if (compExp != null)
                                {
                                    //buscar elementos da expansao
                                    _elem = compExp.Elementos.FirstOrDefault(e => e.Id == elemento.Id);
                                    if (_elem != null)//nem todos os elementos vem no Post, por isso verificar se algum deve salvar
                                        respostaOld = _elem.Respostas;
                                }
                            }
                            else
                                respostaOld = ListaRespostasOld.FirstOrDefault(r => r.IdComponenteElemento == elemento.Id && r.IdComponenteExpansao == item.Id); //todas expansoes tem id

                            if (respostaOld != null)
                                elemento.Respostas = respostaOld;

                            if (elemento.IdTipoElemento == 5 || elemento.IdTipoElemento == 7) //combo || radio
                                elemento.Valores = _db.getFormElementoValores(elemento.Id);
                        }
                    }
                }
            }

            return formRenderizado;
        }