// *******************************************************************************************************************************
// 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();
}
}
}
};
}
// *******************************************************************************************************************************
// *******************************************************************************************************************************