public void Salvar(Data.DB _db, int idFluxo, FormularioVersao _form, int idProjeto) { Edicao edicao = _db.getEdicao(_form.Id, idFluxo); List<Resposta> ListaRespostaOld = _db.getRespostas(_form.Id, idFluxo, idProjeto); List<Resposta> ListaRespostasNew = new List<Resposta>(); //essa var, serve para quando o usuario quiser apenas salvar sem validar, implementar isso bool IsValidado = true; Resposta respostaOld; foreach (var componente in _form.Componentes) { foreach (var elemento in componente.Elementos) { respostaOld = ListaRespostaOld.FirstOrDefault(r => r.IdComponenteElemento == elemento.Id && r.IdComponenteExpansao == 0); //sem expansao if (respostaOld == null) ListaRespostasNew.Add(elemento.Respostas); else if (elemento.IdTipoElemento == 5 || elemento.IdTipoElemento == 7) //comparar valor { if (respostaOld.DsValor != elemento.Respostas.DsValor) { ListaRespostasNew.Add(elemento.Respostas); } } else //comparar texto(resposta) { if (respostaOld.DsResposta != elemento.Respostas.DsResposta) { ListaRespostasNew.Add(elemento.Respostas); } } } //componentes foreach (var componenteExpansao in componente.ListaComponenteExpansao) { if (componenteExpansao.Id == 0) //inserir expansao { componenteExpansao.IdFormularioComponente = componente.Id; componenteExpansao.IdProjeto = idProjeto; int idComponenteExpansao = _db.gravarComponenteExpansao(componenteExpansao); componenteExpansao.Id = idComponenteExpansao; } foreach (var elemento in componenteExpansao.Elementos) { elemento.Respostas.IdComponenteExpansao = componenteExpansao.Id; //colcando a expansao no objeto respostaOld = ListaRespostaOld.FirstOrDefault(r => r.IdComponenteElemento == elemento.Id && r.IdComponenteExpansao == componenteExpansao.Id); if (respostaOld == null) ListaRespostasNew.Add(elemento.Respostas); else if (elemento.IdTipoElemento == 5 || elemento.IdTipoElemento == 7) //comparar valor { if (respostaOld.DsValor != elemento.Respostas.DsValor) { ListaRespostasNew.Add(elemento.Respostas); } } else //comparar texto(resposta) { if (respostaOld.DsResposta != elemento.Respostas.DsResposta) { ListaRespostasNew.Add(elemento.Respostas); } } } } } if (ListaRespostasNew.Count > 0) { int idEdicao = _db.gravarEdicao(_form.Id, idFluxo, edicao.Versao + 1, IsValidado, idProjeto); foreach (var _resposta in ListaRespostasNew) { _db.gravarResposta(_resposta, idEdicao); } } //inativar expansoes if (Session["ExpansoesParaInativar"] != null) { List<int> listaCompInativar = (List<int>)Session["ExpansoesParaInativar"]; foreach (var idCompExpInativar in listaCompInativar) { _db.inativarComponenteExpansao(idCompExpInativar); } } }
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; }