public void ValidaForm(Data.DB _db, ModelStateDictionary _modelState, FormularioVersao _formPost)
        {
            foreach (var comp in _formPost.Componentes)
            {
                foreach (var elemento in comp.Elementos)
                {
                    ValidacaoElementos(_db, elemento, _modelState);
                }

                foreach (var compExp in comp.ListaComponenteExpansao)
                {
                    foreach (var elemExp in compExp.Elementos)
                    {
                        ValidacaoElementos(_db, elemExp, _modelState);
                    }
                }
            }
        }
Exemple #2
0
        public FormularioVersao getFormularioVersaoFluxo(int idFormulario, DateTime dtProjeto)
        {
            FormularioVersao item = new FormularioVersao();
            using (SqlConnection cn = new SqlConnection(helper.ConnectionString))
            {
                string sql = "select * from PC_Formulario_FRM INNER JOIN PC_Formulario_Versao_FRV ON FRM_ID = FRV_FRM_ID WHERE FRM_ID = @FRM_ID AND @DT_PROJETO BETWEEN FRV_DT_INICIO AND ISNULL(FRV_DT_FIM,'99991231')";
                SqlParameter[] param = {
                                       new SqlParameter("@FRM_ID", idFormulario),
                                       new SqlParameter("@DT_PROJETO", dtProjeto),
                                   };
                cn.Open();
                try
                {
                    SqlDataReader reader = helper.ExecuteReader(CommandType.Text, sql, param);
                    if (reader.Read())
                    {
                        item.Id = Convert.ToInt32(reader["FRV_ID"]);
                        item.IdFormulario = Convert.ToInt32(reader["FRV_FRM_ID"]);
                        item.Nome = reader["FRV_NOME"].ToString();
                        item.Versao = Convert.ToInt32(reader["FRV_NUM_VERSAO"]);
                        item.DataInicio = Convert.ToDateTime(reader["FRV_DT_INICIO"]);
                        if (reader["FRV_DT_FIM"] != DBNull.Value)
                            item.DataFim = Convert.ToDateTime(reader["FRV_DT_FIM"]);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    cn.Close();
                }
            }

            return item;
        }
        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 ActionResult Form(FormularioVersao _form, int idProjeto)
        {
            Data.DB _db = new Data.DB();

            ValidaForm(_db, ModelState, _form);

            if (!ModelState.IsValid)
            {
                FormularioVersao _formRetorno = BuscaForm(_db, _form.Id, idProjeto, true, _form);
                return View(_formRetorno);
            }

            int idFluxo = Convert.ToInt32(Session["FluxoId"]);//Session?
            Salvar(_db, idFluxo, _form, idProjeto);

            return RedirectToAction("Index");
        }
        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;
        }