// ******************************************************************************************************************************* // Classe que gerencia parâmetros que atuam no conteúdo // ******************************************************************************************************************************* function clParametros(parametros, pai) { for (var i in parametros) { this[i] = parametros[i]; } if (pai) { this.pai = pai; this.campos = pai.parametros; if (pai.pai) this.elementoBase = pai.pai.elementoBase; // o elementoBase do objeto parametros é o mesmo da lista (pai do item, que é o pai do parametro) pai.objParametros = this; } this.classe = 'clParametros'; }; clParametros.prototype.inicia = function() { this.box = this.monta(); this.basearEvento(); this.coloca(); // se tiver algum opcional que deve iniciar mostrando (jaCarregado), clica for (var i in this.campos) { var campo = this.campos[i]; if (campo.opcional > 0 && campo.jaCarregado > 0) { $(campo.objetoCampo.elementoDiv).find('input').attr('checked', 'checked'); campo.objetoCampo.clicaOpcional.call(campo.objetoCampo, true); } } // se tiver algum campo baseado em outro, analisa se deve ser tomada alguma ação devido aos valores iniciais // usa timeout para poder montar todos os outros campos antes de executar o change dos campos const camposBaseados = []; this.campos.filter(campo => campo.baseadoEm).map(campo => camposBaseados[campo.baseadoEm] = true); Object.entries(camposBaseados).forEach(([key, value]) => { if (this.camposID[key]) { const campoAlterar = $(this.camposID[key].campo); setTimeout(function() { campoAlterar.change() }, 500); } }); return this; }; clParametros.prototype.monta = function() { var esteParametro = this; box = cria('div', { id: 'parametros' }); if (this.pai && this.pai.id) box.className = 'relat_' + this.pai.id; var itemSelecionado = box.appendChild(cria('div', { id: 'itemParametrizado' })); itemSelecionado.appendChild(cria('h6', null, null, this.pai.nomeItem + " " + "selecionado")); itemSelecionado.appendChild(cria('div', { innerHTML: this.pai.li.firstChild.innerHTML })); this.listaParam = box.appendChild(cria('div', { id: 'listaCampos' })); var titulo = this.listaParam.appendChild(cria('h6', null, null, "parâmetros")); titulo.appendChild(cria('a', { href: '#', className: 'botao botocultar', tip: "ocultar os parâmetros", onclick: function(e) { esteParametro.tira.call(esteParametro); if (e && e.preventDefault) e.preventDefault(); else return false; } })); this.dados = {}; this.camposID = {}; if (_relatParamIniciais) this.setaParametrosIniciais(); for (var i in this.campos) { var campo = this.campos[i]; //log(campo); if (campo.opcional > 0) { campo.objetoCampo = new clParamCampo(campo, this); campo.objetoCampo.tempoAviso = 0; } else { var objetoCampo = eval(campo.tipo); // os campos dos parâmetros mantém o aviso de inválido (não somem depois de um tempo) campo.tempoAviso = 0; campo.alterouCampo = this.alterouCampo; campo.objetoCampo = new objetoCampo(campo, this); //if (campo.acao && isNaN(parseInt(campo.acao, 10)) && relat.listas[campo.acao]) campo.objetoCampo.lista = relat.listas[campo.acao]; if (campo.acao && isNaN(parseInt(campo.acao, 10))) { if (relat.listas[campo.acao]) campo.objetoCampo.lista = relat.listas[campo.acao]; else campo.objetoCampo.acao = function() { return "25&qual=" + campo.acao }; } } var divCampo = this.listaParam.appendChild(campo.objetoCampo.cria()); divCampo.appendChild(cria('div', { className: 'limpa' })); this.camposID[campo.id] = campo.objetoCampo; if (campo.aposMontar) relat[campo.aposMontar].call(campo.objetoCampo); } // o método verificaParametros por enquanto só tem no campo multiploCheck (no caso uma lista de campos) // passa pelos parametros depois de criados e verifica se o método "verificaParametros" existe. for (var i = 0, t = this.campos.length; t--; i++) { var campo = this.campos[i]; this.basearInclui(campo); if (campo.objetoCampo.verificaParametros) campo.objetoCampo.verificaParametros.call(campo.objetoCampo); } if (this.pai.semOrdenacao < 1) { this.criaOrdenacao.call(this); if (this.pai.ordenDesc > 0) this.criaOrdenDesc.call(this); this.divOrdem.appendChild(cria('div', { className: 'limpa' })); } return box; }; clParametros.prototype.setaParametrosIniciais = function() { // quando vem uma lista de parametros iniciais no querystring, aplica aos campos antes de montar var iniciais = _relatParamIniciais.split(";"); var campos = this.campos; for (var i = 0; i < iniciais.length; i++) { var val = iniciais[i].split(":"); var idParam = val[0]; var campo; for (var k = 0; k < campos.length; k++) if (campos[k]["id_parametro"] == idParam) { campos[k]["valorInicial"] = val[1]; break; } } }; clParametros.prototype.criaOrdenacao = function() { // parametro de ordenação, usado em todos os relatórios. var campo = { id: "ordem", id_parametro: "ordem", label: "ordenar:", tipo: "CampoSelect", lista: [], cond: 'order', alterouCampo: this.alterouCampo }; var objetoCampo = eval(campo.tipo); campo.objetoCampo = new objetoCampo(campo, this); this.campos.push(campo); this.divOrdem = this.listaParam.appendChild(campo.objetoCampo.cria()); }; clParametros.prototype.criaOrdenDesc = function() { // opção de ordenar decrescente var campo = { id: "ordenDesc", id_parametro: "ordenDesc", label: "decrescente", tipo: "CampoCheck", inverte: true, cond: "orderDesc", alterouCampo: this.alterouCampo, valorInicial: this.pai.inicialDesc }; var objetoCampo = eval(campo.tipo); campo.objetoCampo = new objetoCampo(campo, this); this.campos.push(campo); this.divOrdem.appendChild(campo.objetoCampo.cria()); }; clParametros.prototype.coloca = function() { if (this.aberto) return; // se o parâmetro já estiver aberto, não precisa recolocá-lo $(this.elementoBase).addClass('comParametros').children(':not(div.botTamanho)').each(function() { $(this).slideUp(300); }); //console.log(this.box.style.display); this.elementoBase.appendChild(this.box); //calend.achaCampos(this.box); botao.tamanho(this.box); tip.acha(this.box); this.aberto = true; }; clParametros.prototype.tira = function() { var esteParametro = this; if (this.avisoObrigatorio) this.avisoObrigatorio.remove(); $(this.box).slideUp(300, function() { removeObj(this); esteParametro.aberto = false; }); $(this.elementoBase).removeClass('comParametros').children().each(function() { $(this).slideDown(300, function() { this.setAttribute('style', '') }); }); }; clParametros.prototype.alterouCampo = function() { var item = this.pai; if (item.alterouParametro) item.pai[item.alterouParametro].call(item.pai); // chama um método da lista if (item.temporiza) item.temporiza.call(item); // desabilitar impressão e exportação até retornar o relatório do servidor if (this.pai.objCabecalho) { var botoes = this.pai.objCabecalho.aba.botoes; for (var botao in botoes) if (botoes[botao].objBotao) botoes[botao].objBotao.desabilita(); } }; clParametros.prototype.montaInfo = function(viaAjax) { var info = []; var campos = this.campos; if (this.avisoObrigatorio) this.avisoObrigatorio.remove(); var inicioObrigatorio = []; var todosInicioObrigatorio = 0; var parametrosInvalido = false; for (var i = 0, t = campos.length; t--; i++) { // Estrutura de repetição guardar todos os parametros da lista. var objCampo = campos[i].objetoCampo; // Guardando a referencia do Campo em questão. if (objCampo.invalido) parametrosInvalido = true; if (campos[i].inicioObrigatorio > 0) { todosInicioObrigatorio++; objCampo.tiraAvisoIndividual(); } // Anexando os parametros no array propriedades. var propriedades = { tab: campos[i].tab, cmp: campos[i].cmp, cond: ((viaAjax) ? escape(campos[i].cond) : campos[i].cond), id: campos[i].id, tipo: campos[i].sqlTipo, label: campos[i].label, nomeColuna: ((viaAjax) ? escape(campos[i].nomeColuna) : campos[i].nomeColuna), nomeCampo: ((viaAjax) ? escape(campos[i].campoValor) : campos[i].campoValor) }; var valor = undefined; // Variável para saber se o campo for do tipo texto e seu valor for vazio. if (campos[i].opcional > 0) { // Verificando se o campo é do tipo opcional. // Verificando se o Checkbox foi clicado e o combo foi selecionado. valor = (objCampo && objCampo.objetoCampo && objCampo.objetoCampo.valor) ? objCampo.objetoCampo.valor : 0; propriedades.opcional = ((campos[i].objetoCampo.mostrando) ? 1 : 0); // se é opcional mas não está selecionado, verifica o inícioObrigatório para poder fazer a busca if ((valor == 0 || propriedades.opcional == 0) && campos[i].inicioObrigatorio > 0) inicioObrigatorio.push(objCampo); } else if (objCampo && objCampo.valor && objCampo.valor.length > 0 && !objCampo.oculto) { valor = objCampo.valor; } else if (objCampo && !objCampo.valor && !objCampo.oculto && objCampo.pegaValor()) { valor = objCampo.pegaValor(); } // o "|todos|" serve para diferenciar quando seleciona "todos" de quando seleciona um item "vazio" // (usado em alguns selects específicos, como o perfil dos contatos de novas ocorrências de atendimento) // para efeito de parametros, deve ser considerado como não selecionado, como vazio. if (valor != undefined && valor != '|todos|') { if (viaAjax && typeof(valor) != "object") valor = encodeURIComponent(valor); //if (viaAjax) valor = valor; if (valor != 0 && typeof(valor) == 'string') valor = valor.replace(/\+/gi, '|mais|'); propriedades.val = valor; info.push(propriedades); } else { // se não tem valor mas era obrigatório para poder fazer a busca, retorna false para não continuar a busca e informa // nestes casos não é opcional, pois o opcional sempre tem valor (= 0 quando não selecionado), por isso já foi tratado no caso de opcional acima if (campos[i].inicioObrigatorio > 0) inicioObrigatorio.push(objCampo); } } // se não tiver nenhum campo inválido e tiver algum dos campos de inicioObrigatorios selecionados, faz a busca if (!parametrosInvalido && (todosInicioObrigatorio == 0 || todosInicioObrigatorio > inicioObrigatorio.length)) { return { post: JSON.stringify(info), info: info }; } else if (inicioObrigatorio.length > 0) { var aviso = (inicioObrigatorio.length == 1) ? "Selecione o parâmetro" : "Selecione ao menos um dos parâmetros"; this.avisoObrigatorio = $("
" + aviso + " ao lado para carregar o relatório.
").appendTo(this.elementoBase); for (var cadaCampo = 0; cadaCampo < inicioObrigatorio.length; cadaCampo++) { inicioObrigatorio[cadaCampo].colocaAvisoIndividual(''); } } }; clParametros.prototype.listaSelecionados = function() { // como é baseado nos parâmetros selecionados, na primeira busca não mostra a ordenação, pois foi enviado pelo servidor, mas não tem no local. var info = []; for (var i = 0, t = this.campos.length; t--; i++) { var campo = this.campos[i]; var objCampo = campo.objetoCampo; // Guardando a referencia do Campo em questão. if (objCampo.invalido) return false; var nome = campo.label; var valor = undefined; // Variável para saber se o campo for do tipo texto e seu valor for vazio. var continua = true; // se for um campo opcional, só inclui se tiver sido selecionado e usa o campo de dentro para encontrar o valor if (campo.opcional > 0) { continua = objCampo.mostrando; objCampo = objCampo.objetoCampo; } if (continua) { if (objCampo && objCampo.valor && objCampo.valor.length > 0) valor = objCampo.valor; if (valor != undefined && valor != '|todos|') { // nos campos Select e MultiploCheck, o valor é o id. Precisa passar pela lista do campo para encontrar o nome do item selecionado if ((objCampo.tipo == 'CampoSelect' || objCampo.tipo == 'CampoMultiploCheck') && objCampo.lista) { var lista = objCampo.lista; var val = []; var valores = valor.split(','); for (var indiceLista = 0, totLista = lista.length; totLista--; indiceLista++) { for (var indiceValorParam = 0, totValorParam = valores.length; totValorParam--; indiceValorParam++) { if (lista[indiceLista].id == valores[indiceValorParam]) val.push(lista[indiceLista].nome); } // se não for uma lista associativa, coloca direto o valor selecionado if (val.length == 0 && valor.toString().length > 0) val.push(valor); } valor = val.join(', '); } info.push({ nome: nome, valor: valor }); } } } return info; }; clParametros.prototype.exibe = function(parametrosParaExibir) { parametrosParaExibir = this.trocaIdsPorCampos(parametrosParaExibir); for (var i = 0, t = parametrosParaExibir.length; t-- ; i++) { var esteCampo = parametrosParaExibir[i]; esteCampo.objetoCampo.exibe.call(esteCampo.objetoCampo); } }; clParametros.prototype.oculta = function(parametrosParaOcultar, parametrosNaoOcultar) { parametrosParaOcultar = this.trocaIdsPorCampos(parametrosParaOcultar); // inclui no parametrosOcultar o parametro de ordenação (para nunca ocultar) if (!parametrosNaoOcultar) parametrosNaoOcultar = []; parametrosNaoOcultar.push('ordem'); // passa pelos parametros e verifica se deve ocultar for (var i = 0, t = parametrosParaOcultar.length; t-- ; i++) { var esteCampo = parametrosParaOcultar[i]; var oculta = true; for (var j = 0, k = parametrosNaoOcultar.length; k-- ; j++) { if (esteCampo.id_parametro == parametrosNaoOcultar[j]) oculta = false; } if (oculta) esteCampo.objetoCampo.oculta.call(esteCampo.objetoCampo); } }; clParametros.prototype.trocaIdsPorCampos = function(listaIds) { // se não tem listaIds, retorna todos campos if (!listaIds) { return this.campos; } else { var listaCampos = []; for (var i = 0, t = listaIds.length; t-- ; i++) { for (var j = 0, k = this.campos.length; k-- ; j++) { if (listaIds[i] == this.campos[j].id_parametro) { listaCampos.push(this.campos[j]); break; } } } return listaCampos; } }; clParametros.prototype.basearInclui = function(campo) { if (campo.baseadoEm) { var campoPai = this.camposID[campo.baseadoEm]; if (campoPai) { if (!campoPai.baseadosNeste) campoPai.baseadosNeste = []; campoPai.baseadosNeste.push(campo); } } }; clParametros.prototype.basearEvento = function() { var este = this; for (var i in this.camposID) { var objCampo = this.camposID[i]; if (objCampo.baseadosNeste) $(objCampo.campo).on("change", function(e) { este.basearMuda.call(este, e) }).change(); } }; clParametros.prototype.basearMuda = function(e) { var esseCampo = $(e.target); var valor = esseCampo.val(); const campoDiv = esseCampo.closest("div"); var idEsseCampo = (esseCampo.attr("type") == "radio") ? campoDiv.children().filter("input").attr("name") : campoDiv.attr("id"); var objCampo = this.camposID[idEsseCampo]; var baseados = objCampo.baseadosNeste; for (var i = 0; i < baseados.length; i++) { var campoFilho = baseados[i]; if (campoFilho.baseadoEm == idEsseCampo) { var condicao = eval(valor && ("'" + valor + "'" + campoFilho.condicaoBasear + "'" + campoFilho.valorBasear + "'")); var metodo = (condicao) ? campoFilho.acaoSeTrue : campoFilho.acaoSeFalse; const paramFuncaoCampo = (metodo == "exibe" || metodo == "oculta") ? (campoFilho.mantemEspaco == 1) : valor; campoFilho.objetoCampo[metodo].call(campoFilho.objetoCampo, paramFuncaoCampo); } } }; // ******************************************************************************************************************************* // ******************************************************************************************************************************* function clParamCampo(parametros, pai) { this.parametrosOriginais = {}; for (var i in parametros) { this[i] = parametros[i]; this.parametrosOriginais[i] = parametros[i]; } this.pai = pai; }; clParamCampo.prototype = new clCampo; clParamCampo.prototype.cria = function() { var esteCampo = this; var div = cria('div', { className: 'campo opcional', id: this.id }); if (this.label && this.label.length > 0) div.appendChild(cria('label', { htmlFor: 'opcional_' + this.id }, null, this.label)); this.campo = div.appendChild(cria('input', { type: 'checkbox', id: 'opcional_' + this.id, className: 'check' })); adicionaEvento(this.campo, 'click', function() { esteCampo.clicaOpcional.call(esteCampo); // Quando tirar a seleção de um campo opcional, verifica se ele está selecionado como parametro de ordenação, se tiver remove o mesmo da ordenação. if (esteCampo.mostrando == false) esteCampo.tiraDaOrdenacao.call(esteCampo); }); if (this.valorInicial > 0) this.campo.click(); this.elementoDiv = div; return div; }; clParamCampo.prototype.tiraDaOrdenacao = function() { // A VERIFICAÇÃO É FEITA ATRAVÉS DO ID DO CAMPO ENVIADO, RECUPERANDO O NOME QUE VEM ANTES DO "_ (UNDERLINE)". // POR ISSO OS CAMPOS OPCIONAIS DEVEM SER CADASTRADOS NO BANCO COM ESTE PADRAO (nome_param) var id = this.id.split("_"); id = id[0]; var parametros = this.pai.pai.objParametros.campos; for (var i = 0, t = parametros.length; t--; i++) { if (parametros[i].id == "ordem") { if (id == parametros[i].objetoCampo.valor) parametros[i].objetoCampo.valor = ""; } } }; clParamCampo.prototype.clicaOpcional = function(inicial) { var esteCampo = this; if (this.mostrando) { this.mostrando = false; if (this.objetoCampo) $(this.objetoCampo.elementoDiv).fadeOut(); } else { this.mostrando = true; if ((!this.objetoCampo || this.objetoCampo.tipo == 'CampoSelect') && this.tipo) { var objetoCampo = eval(this.tipo); if (this.valorInicial == 'todos' || this.valorInicial == 'todas') this.parametrosOriginais.txtVazio = this.valorInicial; this.parametrosOriginais.lista = [{ id: '', nome: 'carregando...' }]; this.parametrosOriginais.label = (this.parametrosOriginais.labelInterno) ? this.parametrosOriginais.labelInterno : null; this.parametrosOriginais.alterouCampo = this.pai.alterouCampo; if (this.parametrosOriginais.valorInicial.indexOf("_") > 0) this.parametrosOriginais.valorInicial = this.parametrosOriginais.valorInicial.split("_")[1]; if (this.parametrosOriginais.valorInicial.toString().toLowerCase() == "null") this.parametrosOriginais.valorInicial = ""; this.objetoCampo = new objetoCampo(this.parametrosOriginais, this.pai); this.elementoDiv.insertBefore(this.objetoCampo.cria(), this.campo.nextSibling); if (this.tipo == 'CampoSelect') { if (this.jaCarregado > 0) { this.montaSelect(this.lista); } else if (relat.listas[this.acao]) { this.montaSelect((relat.listas[this.acao])); } else { new cnx.carrega('relat_fx.php?acao=' + esteCampo.acao, function() { esteCampo.montaSelect.call(esteCampo, jQuery.parseJSON(this.resposta)); relat.tabela.ajustaSelect.call(esteCampo, jQuery.parseJSON(this.resposta)); }); } } } if (this.objetoCampo) $(this.objetoCampo.elementoDiv).fadeIn(); } // Quando clica no checkbox, chama a alteração do campo pai. Na montagem inicial (quando já vem carregado), não precisa. if (!inicial) this.pai.alterouCampo(); }; clParamCampo.prototype.montaSelect = function(dados) { this.objetoCampo.lista = dados; removeObj(this.objetoCampo.elementoDiv); this.elementoDiv.insertBefore(this.objetoCampo.cria(), this.campo.nextSibling); $(this.objetoCampo.elementoDiv).fadeIn(); }; // ******************************************************************************************************************************* // parametros para salvar // ******************************************************************************************************************************* function SalvaParam(parametros, pai) { clParametros.call(this, parametros, pai); } { SalvaParam.prototype = new clParametros; SalvaParam.prototype.constructor = SalvaParam; SalvaParam.prototype.monta = function() { var esteParametro = this; this.listaParam = cria('div', { id: 'listaCampos' }); var titulo = this.listaParam.appendChild(cria('h6', null, null, 'parâmetros iniciais')); this.botOculta = $("").on("click", function() { esteParametro.tira.call(esteParametro); }); $(this.pai.objBotoes.divBotoes).append(this.botOculta); this.dados = {}; this.pai.campos = this.pai.campos.concat(this.campos); var iniciaisRecebidos = (this.pai.dados.iniciais) ? jQuery.parseJSON(this.pai.dados.iniciais) : []; var iniciais = {}; for (var i = 0, t = iniciaisRecebidos.length; t--; i++) iniciais[iniciaisRecebidos[i].id] = iniciaisRecebidos[i].val; this.camposID = {}; for (var i in this.campos) { var campo = this.campos[i]; campo.salvaParam = true; campo.tempoAviso = 0; // mantém o aviso de inválido (não some depois de um tempo) campo.trocaTag = function() {}; // para não alterar o campo ao editar // ajusta a busca da lista dos campos para a urlBase dos parametros (só se for ação numérica ou função - senão não vai buscar) if (campo.acao && (!isNaN(parseInt(campo.acao, 10)) || typeof(campo.acao) == "function")) campo.buscaLista = this.urlBase; campo.tab = 1340; campo.cmp = campo.id_parametro; campo.sqlTipo = "texto"; if (iniciais[campo.id_parametro] != undefined) campo.valorInicial = iniciais[campo.id_parametro]; // se já foi gravado um valor inicial para essa empresa, já carrega no campo var objetoCampo = (campo.opcional > 0) ? eval(SalvaParamCampoOpcional) : eval(campo.tipo); campo.objetoCampo = new objetoCampo(campo, this.pai); //if (campo.acao && isNaN(parseInt(campo.acao, 10)) && relat.listas[campo.acao]) campo.objetoCampo.lista = relat.listas[campo.acao]; if (campo.acao && isNaN(parseInt(campo.acao, 10))) { if (relat.listas[campo.acao]) campo.objetoCampo.lista = relat.listas[campo.acao]; else { campo.objetoCampo.buscaLista = "relat_fx.php"; campo.objetoCampo.acao = function() { return "25&qual=" + campo.acao }; } } var divCampo = this.listaParam.appendChild(campo.objetoCampo.cria()); divCampo.appendChild(cria('div', { className: 'limpa' })); this.pai.camposID[campo.id] = this.camposID[campo.id] = campo.objetoCampo; } // o método verificaParametros por enquanto só tem no campo multiploCheck (no caso uma lista de campos) // passa pelos parametros depois de criados e verifica se o método "verificaParametros" existe. for (var i = 0, t = this.campos.length; t--; i++) { var campo = this.campos[i]; this.basearInclui(campo); // if (campo.objetoCampo.verificaParametros) campo.objetoCampo.verificaParametros.call(campo.objetoCampo); } return this.listaParam; }; SalvaParam.prototype.coloca = function() { if (this.botAbre) this.botAbre.hide(); this.botOculta.show(); var onde = $(this.onde); var divParam = $(this.listaParam); onde.attr("id", "parametros"); onde.addClass("relat_" + this.idRel); onde.children().filter("div.limpa").before(divParam); if (this.primeira) divParam.show(); else divParam.slideDown(300); this.pai.edita.call(this.pai); }; SalvaParam.prototype.tira = function() { var esteParametro = this; var campos = this.campos; if (this.primeira) removeObj(this.listaParam); else $(this.listaParam).slideUp(200, function() { for (var i = 0; i < campos.length; i++) { var campo = campos[i].objetoCampo; if (campo.campo) campo.campo.value = campo.valorOriginal(); if (campo.ajustaSelects) campo.ajustaSelects.call(campo); } removeObj(this); }); this.botOculta.hide(); if (!this.botAbre) { this.botAbre = $("").on("click", function() { esteParametro.coloca.call(esteParametro); }); $(this.pai.objBotoes.divBotoes).append(this.botAbre); } else this.botAbre.show(); this.mantemValor.call(this); this.pai.volta.call(this.pai); }; SalvaParam.prototype.mantemValor = function() { for (var i in this.campos) this.campos[i].objetoCampo.mantemValorOriginal(this); }; } function SalvaParamCampoOpcional(parametros, pai) { CampoCheck.call(this, parametros, pai); } { // o campo opcional é um campoCheck e, se tiver um campo interno ele será o this.campoFilho SalvaParamCampoOpcional.prototype = new CampoCheck; SalvaParamCampoOpcional.prototype.constructor = SalvaParamCampoOpcional; SalvaParamCampoOpcional.prototype.trataCampoInicio = function() { if (this.valorInicial) { var split = this.valorInicial.split("_"); if (split[0] == "0" || split[0] == "1") { this.valorInicial = split[0]; if (split[1]) this.valorInicialFilho = split[1]; } else { this.valorInicialFilho = split[0]; } } }; SalvaParamCampoOpcional.prototype.aposCriarCampo = function() { var esteCampo = this; adicionaEvento(this.campo, 'click', function() { esteCampo.clicaOpcional.call(esteCampo); }); if (this.valorInicial == "1") { this.mostrando = false; this.clicaOpcional(true); } }; SalvaParamCampoOpcional.prototype.clicaOpcional = function(inicial) { var esteCampo = this; if (this.mostrando) { this.mostrando = false; if (this.objetoFilho) $(this.objetoFilho.elementoDiv).fadeOut(); } else { this.mostrando = true; if ((!this.objetoFilho || this.objetoFilho.tipo == 'CampoSelect') && this.tipo) { var campo; for (var i = 0, t = this.pai.campos.length; t--; i++) if (this.pai.campos[i].id == this.id) { campo = this.pai.campos[i]; break; } var paramFilho = jQuery.extend(false, [], campo); delete(paramFilho.objetoCampo); paramFilho.valorInicial = (this.valorInicialFilho) ? this.valorInicialFilho : ""; if (this.valorInicial == 'todos' || this.valorInicial == 'todas') paramFilho.txtVazio = this.valorInicial; paramFilho.lista = [{ id: '', nome: 'carregando...' }]; paramFilho.label = (paramFilho.labelInterno) ? paramFilho.labelInterno : null; var objetoCampo = eval(this.tipo); if (!this.objetoFilho ) { this.objetoFilho = new objetoCampo(paramFilho, this.pai); this.elementoDiv.insertBefore(this.objetoFilho.cria(), this.campo.nextSibling); } if (this.tipo == 'CampoSelect') { if (this.jaCarregado > 0) { this.montaSelect(this.lista); } else if (relat.listas[this.acao]) { this.montaSelect((relat.listas[this.acao])); } else { new cnx.carrega('relat_fx.php?acao=' + esteCampo.acao, function() { esteCampo.montaSelect.call(esteCampo, jQuery.parseJSON(this.resposta)); }); } } } if (this.objetoFilho) $(this.objetoFilho.elementoDiv).fadeIn(); } }; SalvaParamCampoOpcional.prototype.montaSelect = function(dados) { this.objetoFilho.lista = dados; removeObj(this.objetoFilho.elementoDiv); this.elementoDiv.insertBefore(this.objetoFilho.cria(), this.campo.nextSibling); $(this.objetoFilho.elementoDiv).fadeIn(); }; SalvaParamCampoOpcional.prototype.pegaValor = function() { var valor = (this.campo.checked) ? "1" : "0"; if (this.objetoFilho) valor += "_" + this.objetoFilho.valor; return valor; }; SalvaParamCampoOpcional.prototype.foiAlteradoOriginal = SalvaParamCampoOpcional.prototype.foiAlterado; SalvaParamCampoOpcional.prototype.foiAlterado = function() { var retorno = this.foiAlteradoOriginal(); if (!retorno && this.objetoFilho) retorno = this.objetoFilho.foiAlterado(); if (retorno) retorno.val = this.pegaValor(); return retorno; }; SalvaParamCampoOpcional.prototype.mantemValorOriginal = function() { var campo = this; var valorOriginal = campo.valorOriginal(); var split = (!valorOriginal)? "": valorOriginal.split("_"); if (campo.opcional > 0 ) { var lista = (campo.objetoFilho) ?campo.objetoFilho.lista :"" ; if ( split[0] == "1") { this.mostrando = true; $(campo.campo).prop("checked", true); if (campo.objetoFilho ) { $(campo.objetoFilho.elementoDiv).fadeIn(); campo.objetoFilho.mantemValorOriginal(); } } else { this.mostrando = false; $(campo.campo).prop("checked", false); if (campo.objetoFilho ) { $(campo.objetoFilho.elementoDiv).fadeOut(); campo.objetoFilho.mantemValorOriginal(); } } } }; } // ******************************************************************************************************************************* // *******************************************************************************************************************************