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; }