'use strict'; (function ($) { ///PLUGIN DE PESQUISA ///Autor: WESLEY FERREIRA ///Ano: 2017 ///Empresa: ABCZ //Lista de variaveis globais para controles de erros, cache e historico de pesquisas realizados. var lista_historico = []; var lista_resultado = []; var lista_erro = []; //Algumas funções são necessárias para o funcionamento deste plugin, dentre elas a formatação de string e verificação de valor do item para //informar se ele é um item nulo ou não, a inicialização desses acontece nessa função. _inicializaFuncoesAuxiliares(); //Componente de pesquisa padrão utilizado no Sigen, para busca de criadores, fazenda, raça, categoria, pelagem e etc. $.fn.buscaPersonalizada = function (options) { var pluginAtual = null; var campoPesquisa = null; var elementoSpan = null, elementoPesquisaSemFiltro = null, elementoErro = null, elementoID = null, cmbSelecao = null; var permiteValidar = true; //Verifica se foi encontrado algum campo com este seletor if (this.length <= 0) { return; } //Todas as mensagens utilizadas internamente no no plugin estão aqui, caso queira traduzir! var mensagem_resource = { PreenchaCampo: "Preencha o campo corretamente por favor", SelecioneOpcao: "Selecione uma opção", UrlInvalida: "A url fornecida é inválida, por favor corrija", DuasPesquisaTecla: "Não é possível habilitar dois comandos para a mesma tecla, por favor corrija", InformarPropriedadeID: "Por favor informe o seletor que receberá o valor do id do registro", CampoObrigatorio: "É necessário preencher o campo para realizar a pesquisa", PreRequisito: "É necessário que este campo seja preenchido primeiramente", PesquisaSemResultado: "A pesquisa não retornou nenhum resultado", PesquisaModal: "Pressione aqui, caso queira realizar outra forma de pesquisa.", PesquisaSemFiltro: "Pressione aqui, caso queira realizar a busca de todos os registros." } //Padrão estabelecido no plugin. var defaults = { seletorID: "", //Campo que guardará o ID do item selecionado campoExibicao: "", //Campo que exibirá o resultado da pesquisa campoObrigatorio: false, //Informa se é necessário preencher algo no campo para realizar a pesquisa mensagemCampoObrigatorio: mensagem_resource["CampoObrigatorio"], //Mensagem caso o campo seja obrigátorio campoPreRequisito: "", //Campos que devem ser preenchidos antes desse, para que possa ser realizada a pesquisa mensagemPreRequisito: mensagem_resource["PreRequisito"], // Caso não tenha preenchidos os campos anteriores, exibe essa mensagem pesquisaServidor: false, //Informa se a pesquisa vai ser via servidor ou se vai ter uma lista com os registros urlPesquisa: "", //Url da action para pesquisa parametrosServidor: [], //Parametros a serem enviados para o servidor metodoAjax: "POST", parametroResultado: [], //Listagem de itens caso os dados já estejam do lado cliente ou que tenha retornado no servidor propriedadePesquisa: "", //Caso a pesquisa seja do lado do cliente, quais propriedades devem ser pesquisadas (Ex.: id, nome, descricao) ? mensagemSemResultado: mensagem_resource["PesquisaSemResultado"], //Mensagem caso não possua resultado parametroID: "id", // Nome da propriedade de retorno que possuirá o ID do campo parametroTexto: "", // Nome da propriedade que possuirá o texto a ser exibido na pesquisa fnPesquisaConcluida: function (resultado) { }, // Metodo chamado após a seleção de um item válido fnPesquisaFalhou: function (erro) { }, // Método chamado após gera algum erro durante o tratamento fnPesquisaVazia: function () { }, //Caso não tenha resultado nenhum registro, executa essa função retornaTodoObjeto: false, //Quando executar a função OnSucessItem, verifica se será retornado só o id do item, ou todo objeto que corresponde ao item limpaCampos: "", //Caso tenha sido efetuada alguma alteração no campo de pesquisa, informa quais campos devem ser limpados teclaConfirmacao: 13, // Tecla de confirmação para pesquisa parametroSucesso: "SUCCESS", // nome do parametro msg retornado pelo o JSON equivalente ao SUCCESS parametroVazio: "EMPTY", // nome do parametro msg retornado pelo o JSON equivalite ao EMPTY parametroErro: "ERROR",// nome do parametro msg retornado pelo o JSON equalivante ao ERROR parametroNaoValido: "NOT VALID", //nome do parametro msg retornado pelo o JSON equivalente ao NOT VALID pesquisaModal: false, //Informa se o componente irá oferecer possibilidade de pesquisa através de uma modal confirmaSaidaModal: true, //Caso o usuário necessite abrir uma modal, após a modal de pesquisa, habilitar essa opção tituloModal: "Busca", // Titulo da modal teclaAbrirModal: 112, // Tecla de ativação da modal parametroEnvioModal: [], // Valores que quando preechidos poderão ser enviado para a modal. bloqueiaParametroEnvioModal: false, //Bloquear campos que foram enviados os valores. recuperaParametroModal: [], // Valores exibidos na grid da modal, que poderão ser recuperados para outros campos da tela. classeBotaoPesquisa: "", //Caso queira adicionar alguma classe ao botão de pesquisa da modal urlPartialModal: "", // url da modal focusInicialModal: "", //Seletor onde será dado o focus inicial ao abrir a modal de pesquisa pesquisaSemFiltro: false, //Executa busca no servidor/listagem fornecida, ignorando todos os filtros teclaPesquisaSemFiltro: 112, //Tecla de ativação de busca de todos os dados. pesquisaParcial: false, // Informa se a pesquisa retornará outros objetos além do pesquisado buscaParcial: "busca_completa", //Nome do parametro no Controller, onde receberá o valor da propriedade loadOtherInformation pesquisaCompleta: false, // Informa se a pesquisa retornará outros objetos que contém informações mais completas buscaCompleta: "busca_todos_dados", //Nome do parametro no Controller, onde receberá o valor da propriedade parameterloadAllInformation bloqueiaInformacao: false, // Informa se após realizar a pesquisa com os parametros parameterloadAllInformation e parameterLoadOtherInformation, os campos atribuidos serão bloqueados atribuiResultado: [], // Propriedade que informa qual campo/plugin, deverá ser setado o resultado dos objetos pesquisados através dos parametros parameterloadAllInformation e parameterLoadOtherInformation onChange: "", // Recebe método para propriedade de OnChange onChangeRetorno: "", // Recebe método para propriedade de OnChange que vai disparar caso a pesquisa retorne somente 1 item no resultado validacaoAdicional: [] // Caso, ao realizar a busca também irá fazer alguma validação, informar o nome dos parametros do Controller para que seja realizada a validação // Exemplo: - Controller: // Public Function BuscaFazenda(id as Integer, valida_orgao as Boolean) // - JavaScript: // additionalValidation: [{ // name: "valida_orgao", // message: "Você não possui permissão para alterar essa fazenda, devido não ter permissão no orgão" // }] } //Função responsavel pela a transformação das propriedades do plugin _formatarNomePropriedades(); //Gera o componente de span para exibição de erros do plugin. //Caso o id do hidden informado não esteja na tela, é gerado um. //Caso a pesquisa ofereça suporte a modal, gera um botão para abri-la. _inicializaComponenteErro(); this.each(function () { //Reserva os campos abaixo, para que facilite o acesso dentro de funções acopladas. campoPesquisa = this; //PROPRIEDADES INTERNAS DO PLUGIN //Busca a ultima pesquisa realizada, para que seja evitado ida no banco de pesquisas já realizadas anteriormente campoPesquisa._buscaHistoricoPesquisa = function () { var registroAtual = null; if (!$.isEmpty(lista_historico)) { //Percorre a lista de historico de pesquisas já realizada $.each(lista_historico, function (i, registro) { //Verifica se o campo, já foi pesquisado anteriomente if (!$.isEmpty(registro) && registro.seletorID == campoPesquisa.id) { //Se sim, verifica se a informação que ele está pretendendo pesquisar novamente é similar a já pesquisada //Caso sim, retorno esse registro. Caso não, descarto ele, para realizar uma nova pesquisa posteriormente if (registro.valor.indexOf($(campoPesquisa).val()) == 0) { registroAtual = registro; return false; } else { campoPesquisa._removeHistoricoPesquisa(); campoPesquisa._removeCacheResultado(); } } }); } return registroAtual; }; //Busca o objeto da ultima pesquisa realizada campoPesquisa._buscaCacheResultado = function () { var registroAtual = null; if (!$.isEmpty(lista_resultado)) { $.each(lista_resultado, function (i, item) { if (!$.isEmpty(item) && item.seletorID == campoPesquisa.id) { registroAtual = item.resultado; return false; } }); } return registroAtual; }; //Formata a exibição dos registros retornados pelo o banco ou atribuidos no plugin //Para que o mesmo seja exibido em uma combobox, caso seja mais de um ou atribuido diretamente ao campo. campoPesquisa._exibeResultadoSelecao = function (objResultado) { //Verifica se não está vindo registro nulo if (!$.isEmpty(objResultado)) { //Verifica se é um array e se possui mais de um registro if (Array.isArray(objResultado) && objResultado.length > 1) { if (defaults.pesquisaSemFiltro) { $(elementoPesquisaSemFiltro).hide(); } //Se sim, vai criar um combobox, e vai adicionar varias option's onde cada 1 desses, corresponde a um registro cmbSelecao = document.createElement("select"); cmbSelecao.id = "cmb_{0}".formataStr(campoPesquisa.id); //cmbSelecao.onchange = defaults.change; cmbSelecao.setAttribute("onchange", defaults.onChange); cmbSelecao.className = campoPesquisa.className; var opcao = document.createElement("option"); opcao.text = mensagem_resource["SelecioneOpcao"]; opcao.value = ""; $(cmbSelecao).append(opcao); $.each(objResultado, function (i, propriedade) { opcao = document.createElement("option"); opcao.value = campoPesquisa._formataPropriedade(propriedade, defaults.parametroID); opcao.text = campoPesquisa._formataPropriedade(propriedade, defaults.parametroTexto); $(cmbSelecao).append(opcao); }); //Insere o combo logo apos o campo de pesquisa, e oculta o campo de pesquisa para possibilitar a ação do combo $(campoPesquisa).after(cmbSelecao); $(campoPesquisa).val("").hide(); //.simulate('mousedown') //Atribui uma classe personalizada ao combo, para controle de alternação de campo (enter ou tab) $(cmbSelecao).removeClass("buscaPersonalizada").addClass("cmbBuscaPersonalizada").focus(); //Atrela eventos ao combo campoPesquisa._inicializaEventos(); } else if (((Array.isArray(objResultado) && objResultado.length == 1) || typeof objResultado == "object")) { $(defaults.seletorID).on('change', defaults.onChangeRetorno); //Caso não seja um array, ou seja um array com apenas um registro, ele atribui o resultado diretamente objResultado = (Array.isArray(objResultado)) ? objResultado[0] : objResultado; var propriedadeID = campoPesquisa._formataPropriedade(objResultado, defaults.parametroID); var propriedadeTexto = campoPesquisa._formataPropriedade(objResultado, defaults.parametroTexto); $(defaults.campoExibicao).val(propriedadeTexto); $(campoPesquisa).val(propriedadeTexto); $(defaults.seletorID).val(propriedadeID); campoPesquisa._manipulaHistoricoPesquisa(propriedadeID, propriedadeTexto); campoPesquisa._manipulaCacheResultado(objResultado); //Caso o desenvolvedor tenha interesse apenas no identificador do registro, retorna apenas o mesmo. //Caso não, retorna o objeto completo retornado do servidor. if (defaults.retornaTodoObjeto) { defaults.fnPesquisaConcluida(objResultado); } else { defaults.fnPesquisaConcluida(propriedadeID); } if (defaults.onChangeRetorno.length > 0) { $(function () { // do stuff eval(defaults.onChangeRetorno); }); } } } }; //Para exibição dos valores, podem ser incluidos 1 ou mais campos. //Por exemplo, caso queira exibir o ddg do criador, junto com o nome. //Informa a propriedades que exibir no 'parametroTexto', essas separadas por virgula. //E essa irá fazer a formatação e o retorno do texto formatado. campoPesquisa._formataPropriedade = function (objPropriedade, strFormato) { return $.formataPropriedade(objPropriedade, strFormato).trim(); }; //Caso a pesquisa, também retorne itens (ou objetos) para serem atribuidos a outro campo //Essa função atribuirá nos mesmos e também chamará a função responsável para exibição dos resultados campoPesquisa._formataResultadoPesquisa = function (objResultado) { campoPesquisa._manipulaErroCampo(""); var objSelecao = objResultado; //Se for pesquisa de servidor, atualiza a lista de registros do plugin if (defaults.pesquisaServidor) { if (defaults.pesquisaParcial && !$.isEmpty(objResultado.Result)) { defaults.parametroResultado = objResultado.Result; objSelecao = objResultado.Result; } else { defaults.parametroResultado = objSelecao; } } //Salva o resultado retornado em cache campoPesquisa._manipulaCacheResultado(objSelecao); //Exibe o resultado para seleção e se for apenas 1 registro, já é selecionado o mesmo. campoPesquisa._exibeResultadoSelecao(objSelecao); //Caso tenha informado que a pesquisa também retornará dados de outros campos //Será realizada a atribuição dos valores em seus campos/plugins. if (defaults.pesquisaParcial && !$.isEmpty(objResultado) && !$.isEmpty(objResultado.Result)) { //Verifica se foi informado o campo/plugin que receberá os valoers if (!$.isEmpty(defaults.atribuiResultado)) { //Se sim, percorre a listagem dos mesmo $.each(defaults.atribuiResultado, function (i, propPlugin) { //Recebe o plugin (caso seja) var plugin = propPlugin.objPlugin; if (!$.isEmpty(plugin)) { //Se for um plugin, ele recupera a propriedade do item retornado do servidor que contem o valor desse plugin plugin.setValue(objResultado[propPlugin.propName]); //Se o dev solicitou bloqueio ao atribuir if (defaults.bloqueiaInformacao) { //Sim sim atribui e bloqueia, e caso tenha pesquisa de modal, bloqueia ele também. $(plugin).prop("disabled", true).siblings(".pesquisaAvancada").css("pointer-events", "none"); } } else { //Caso não seja plugin, a atribuição é em campo comum, apenas atribui o resultado no mesmo. $(propPlugin.inputID).val(objResultado[propPlugin.propName][propPlugin.propResult]); } }); } } }; //Função responsavel para gerar os componentes de erro, pesquisa e o input hidden responsavel pelo o armazenamento do identificador do registro campoPesquisa._geraComponentesPesquisa = function () { //Gera inputHidden if ($.isEmpty($(defaults.seletorID)) || $(defaults.seletorID).length == 0) { elementoID = document.createElement("input"); elementoID.type = "hidden"; elementoID.id = defaults.seletorID.trim().substring(1, defaults.seletorID.length); elementoID.name = elementoID.id; $(campoPesquisa).after(elementoID); } else { elementoID = $(defaults.seletorID); } //Gera botão da modal if (defaults.pesquisaModal) { elementoSpan = document.createElement("span"); elementoSpan.className = "fa fa-search pesquisaAvancada " elementoSpan.className += defaults.classeBotaoPesquisa; elementoSpan.setAttribute('title', mensagem_resource["PesquisaModal"]); $(campoPesquisa).after(elementoSpan); } else if (defaults.pesquisaSemFiltro) { elementoPesquisaSemFiltro = document.createElement("span"); elementoPesquisaSemFiltro.className = "fa fa-chevron-down pesquisaAvancada " elementoPesquisaSemFiltro.className += defaults.classeBotaoPesquisa; elementoPesquisaSemFiltro.setAttribute('title', mensagem_resource["PesquisaSemFiltro"]); $(campoPesquisa).after(elementoPesquisaSemFiltro); } //Gera span de erro if ($(campoPesquisa).siblings(".erroTooltip").length == 0) { $(campoPesquisa).parent("div").addClass("hoverInput"); elementoErro = document.createElement("span"); elementoErro.className = "field-validation-valid text-danger erroTooltip"; elementoErro.setAttribute("data-valmsg-for", campoPesquisa.id); elementoErro.setAttribute("data-valmsg-replace", true); $(campoPesquisa).parent("div").append(elementoErro); } //Adiciona classe personalizada para erros $(campoPesquisa).addClass("buscaPersonalizada").attr("autocomplete", "off").prop('data-id', defaults.seletorID.replace("#", "")); }; //Caso o desenvolvedor tenha informado a modal no plugin, será gerado um botão //Onde ao pressionar será chamada essa função gerando uma modal. campoPesquisa._geraModalPesquisa = function () { //Faz a requisição no servidor com a url solicitada e com as caracteristicas definidas na inicialização do plugin $.allSIGEDynamicMessageBox({ boxMessage: GetPartialView(defaults.urlPartialModal, "POST").responseText, boxTitle: defaults.tituloModal, boxSize: "lg", topPosition: "15px", boxType: "info", boxFocusOnLoad: { selector: defaults.focusInicialModal }, boxButtons: [{ return: "SUCCESS", close: defaults.confirmaSaidaModal, label: "OK" }], onAfterShow: function () { //Ao abrir a modal, verifica se há algum parametro que o desenvolver que enviar para a modal //Um caso de uso, é quando o criador pode consultar apenas produtos dele. //No caso enviaria esses dados para a modal. if (!$.isEmpty(defaults.parametroEnvioModal)) { //Percorre a listagem $.each(defaults.parametroEnvioModal, function (i, parametro) { //Pega o nome das propriedades do objeto que contem as informações a serem enviadas var nomePropriedades = Object.getOwnPropertyNames(parametro); //Pecorre em todas as propriedades desse objeto $.each(nomePropriedades, function (j, propriedade) { //Pega o valor do campo (no momento atual) para atribui-lo ao campo da modal var strValor = $(parametro[propriedade]).val(); if (!$.isEmpty(strValor)) { //Atribui o resultado e invoca o change do campo, para caso o desenvolvedor queira fazer alguma alteração $(propriedade).val(strValor.toUpperCase()).trigger("change"); //Caso tenha informado que será bloqueado, desabilita o campo. if (defaults.bloqueiaParametroEnvioModal) { $(propriedade).attr("disabled", "disabled"); } } }); }); } //Por se tratar de variaveis globais e estarmos trabalhando com modais para consultas personalizadas //As vezes essas variaveis já vem preenchida com dados de outras consultas, para resolver isso, será limpada //tanto ao abrir a modal, quanto fechar, evitando busca de dados errada paramsSearch = []; valuesSearch = []; InicializaComponentesErro(); InicializaDatePicker(); }, onSuccess: function (result) { var status = result.result; //AO FECHAR A MODAL, verifica se o usuário confirmou a modal e se selecionou algum registro if (status == "SUCCESS" && $(".selected").length > 0) { //Se sim, pega o registro selecionado var linhaSelecionada = $(".content table").DataTable().rows($('.selected')).data()[0]; //Formata as propriedades de acordo com o padrão estabelecido nas configurações da modal var propriedadeID = campoPesquisa._formataPropriedade(linhaSelecionada, defaults.parametroID); var propriedadeTexto = campoPesquisa._formataPropriedade(linhaSelecionada, defaults.parametroTexto); //Caso o desenvolvedor, queira recuperar alguma informação da linha da modal //Informa as propriedades no mesmo para que ao realizar o close da modal, seja atribuido esses valores nos seus respectivos campos if (!$.isEmpty(defaults.recuperaParametroModal)) { //Percorre nos mesmos. $.each(defaults.recuperaParametroModal, function (i, parametro) { //Pega o nome das propriedades que será retornada o valor var nomePropriedades = Object.getOwnPropertyNames(parametro); //Percorre nas propriedades $.each(nomePropriedades, function (j, propriedade) { //Caso o desenvolver queira executar alguma função após a atribuição desses valores //O mesmo poderá passar uma função. if (propriedade != "function") { //Formata o valor a ser retornado var valorCampo = campoPesquisa._formataPropriedade(linhaSelecionada, parametro[propriedade]); //Atribui o valor $(propriedade).val(valorCampo); //Executa a função, caso tenha if (!$.isEmpty(parametro["function"])) { parametro["function"](valorCampo); } } }); }); } //Atribui o resultado da linha selecionada nos seus respectivos campos. $(defaults.seletorID).val(propriedadeID); $(campoPesquisa).val(propriedadeTexto); //Caso tenha algum campo de exibição, verifica se ele é label ou input para inserir de acordo com o necessário if ($(defaults.campoExibicao).is("label")) { $(defaults.campoExibicao).text(propriedadeTexto); } else { $(defaults.campoExibicao).val(propriedadeTexto); } //Salva no historico de pesquisa campoPesquisa._manipulaHistoricoPesquisa(propriedadeID, propriedadeTexto); campoPesquisa._manipulaCacheResultado(linhaSelecionada); //Se solicitou para retornar o objeto completo, retorna a linha selecionada if (defaults.retornaTodoObjeto) { defaults.fnPesquisaConcluida(linhaSelecionada); } else { //Caso não retorna apenas o id. defaults.fnPesquisaConcluida(propriedadeID); } //Foco no campo. $(campoPesquisa).focus(); } else if (status == "SUCCESS") { //Se pressionou o botão de confirmação, mas não selecionou nenhuma linha ele chama a função de um retorno e limpa o historico campoPesquisa.clearValues(); defaults.fnPesquisaVazia(); } } }); }; //Função responsavel pela inicialização do eventos necessários nesse plugin. //Para uma melhor organização, deixem todos aqui. campoPesquisa._inicializaEventos = function () { //Evento de controle de informação do campo, para caso esteja vazio limpar os registros do cache.) $(campoPesquisa).off("focusout").on("focusout", function (event) { //Verifica se a alteração está sendo feita no campo de pesquisa mesmo, ou se é algo no combo de seleção mas acionou o evento deste if ($(this).is(":visible")) { //Se o campo ta vazio, faz um "reset" nos valores do campos atribuidos por esse plugin if ($.isEmpty($(campoPesquisa).val())) { campoPesquisa.clearValues(); defaults.fnPesquisaVazia(); campoPesquisa._removeHistoricoPesquisa(); campoPesquisa._removeCacheResultado(); } else { //Caso não esteja vazio, pesquisa no historico de pesquisa se o valor atual do campo é o semelhante ao do anterior pesquisado //Isso corrije caso apague alguma letra da pesquisa, ele já corrige sem ter que ir no servidor para corrigir. var objPesquisado = campoPesquisa._buscaHistoricoPesquisa(); //Atribui caso tenha sido pesquisado anteriomente. if (!$.isEmpty(objPesquisado)) { $(defaults.seletorID).val(objPesquisado.id); $(defaults.campoExibicao).val(objPesquisado.valor); $(campoPesquisa).val(objPesquisado.valor); } } } }); //Evento principal de pesquisa, que é invocado quando é pressionado a tecla de confirmação, tab ou tecla para carregar todos registros $(campoPesquisa).off("keydown").on("keydown", function (event) { //Verifica a tecla que o usuário pressionou var teclaPressionada = (event.keyCode ? event.keyCode : event.which); //Caso tenha sido a tecla de confirmaçao, TAB, ou a tecla de pesquisa sem filtro ele realiza a atividade normal. if (($.inArray(teclaPressionada, [defaults.teclaConfirmacao, 9]) >= 0 && !$.isEmpty($(campoPesquisa).val())) || (defaults.teclaPesquisaSemFiltro == teclaPressionada && defaults.pesquisaSemFiltro)) { var objPesquisado = null, objRetornado = null; var resultadoID = ""; var realizouPesquisa = false; //Caso tenha sido alguma tecla diferente do TAB, é necessário esse prevenDefault(); //Pois caso o desenvolvedor tenha escolhido alguma tecla como F1, F2, F3 ele ignorar as ações predefinidas do navegador //O enter ele tambéo da o preventDefault, para evitar o submit que algumas telas com form dão. if (teclaPressionada != 9) { event.preventDefault(); } //Verifica se já foi realizada alguma pesquisa neste plugin com essas informações if (!$.isEmpty($(campoPesquisa).val())) { objPesquisado = campoPesquisa._buscaHistoricoPesquisa(); objRetornado = campoPesquisa._buscaCacheResultado(); } else { //Caso não tenha achado uma pesquisa similar a essa, mesmo assim chama para remover. //Pois as vezes tenha algum outro registro com informação diferente. //Isso é necessário pois o historico só armazena o ultimo registrado. campoPesquisa._removeHistoricoPesquisa(); campoPesquisa._removeCacheResultado(); } //Verifica se foi pesquisado anteriomente if (!$.isEmpty(objPesquisado)) { realizouPesquisa = true; //Caso sim, verifica se a pesquisa também retornaria objeto de outros campos if (defaults.pesquisaParcial && defaults.retornaTodoObjeto) { resultadoID = campoPesquisa._formataPropriedade(objRetornado, defaults.parametroID); realizouPesquisa = (objPesquisado.id == resultadoID); } //Se realmente fez a pesquisa e os identificadores são iguais, atribui os valores a seus respectivos campos if (realizouPesquisa) { //Atribuição dos campos $(defaults.seletorID).val(objPesquisado.id); $(defaults.campoExibicao).val(objPesquisado.valor); $(campoPesquisa).val(objPesquisado.valor); //Retorno dos objetos ao desenvolvedor if (defaults.retornaTodoObjeto) { defaults.fnPesquisaConcluida(objRetornado); } else { defaults.fnPesquisaConcluida(objPesquisado.id); } //Limpa qualquer erro. campoPesquisa._manipulaErroCampo(""); } } //Se não realizou pesquisa vai fazer todas validações, para pesquisa no servidor/lista de dados afim de encontrar o registro if (!realizouPesquisa) { //Caso não seja pesquisa sem filtro, vai fazer todas as validações sugeridas pelo o dev. if (!defaults.pesquisaSemFiltro) { //Verifica se o campo foi preenchido if (defaults.campoObrigatorio && $.isEmpty($(campoPesquisa).val())) { campoPesquisa._manipulaErroCampo(defaults.mensagemCampoObrigatorio); return false; } else if (!defaults.campoObrigatorio && $.isEmpty($(campoPesquisa).val())) { //Caso não tenha preenchido e não é obrigatório não faz nada. return false; } } //Caso tenha informado campos que serão pre-requisitos dessa pesquisa, verifica se os mesmos foi informado if (!$.isEmpty(defaults.campoPreRequisito)) { var strCampos = defaults.campoPreRequisito.split(","); var encontrouErro = false; //Percorre campo a campo, verifica se está vazio, se sim gera erro aos mesmos. //Caso não, limpa. $.each(strCampos, function (idx, strCampo) { strCampo = strCampo.trim(); if ($.isEmpty($(strCampo).val())) { campoPesquisa._geraErroPreRequisito(strCampo, defaults.mensagemPreRequisito); encontrouErro = true; } else { campoPesquisa._geraErroPreRequisito(strCampo, ""); } }); if (encontrouErro) { return false; } } //Se for pesquisa no servidor, formata os parametros. if (defaults.pesquisaServidor) { //Objeto responsavel pelo o armazenamento de propriedades a serem enviados para o servidor var params = {}; //Informa se a pesquisa retornará objetos para serem adicionados em outros campos params[defaults.buscaParcial] = defaults.pesquisaParcial; params[defaults.buscaCompleta] = defaults.pesquisaCompleta; //Verifica se será realizada alguma validação extra no servidor //Caso sim seta true a propriedade que será responsavel de habilitar que seja feita a validação if (!$.isEmpty(defaults.validacaoAdicional)) { $.each(defaults.validacaoAdicional, function (i, validacao) { params[validacao.name] = true; }); } //Caso não seja enviado algum parametro para o servidor e o usuário tenha inforamdo algum texto //A ser enviado para o servidor, preenche a variavel padrão que recebe a pesquisa do usuário: campo_busca if ($.isEmpty(defaults.parametrosServidor) && !$.isEmpty($(campoPesquisa).val())) { $(campoPesquisa).val($.trim($(campoPesquisa).val())); params["campo_busca"] = $(campoPesquisa).val().toUpperCase(); } else { //Caso tenha informado outros parametros para o servidor, percorre a listagem fornecida, atribuindo seus valores correspondentes. $.each(defaults.parametrosServidor, function (i, parametro) { var nomeParametros = Object.getOwnPropertyNames(parametro); $.each(nomeParametros, function (i, nome) { if (!$.isEmpty(parametro[nome])) { var valorEnvio = ""; if (typeof parametro[nome] == "string") { if (!(defaults.pesquisaSemFiltro && nome == "campo_busca" && teclaPressionada == defaults.teclaPesquisaSemFiltro)) { if ($(parametro[nome]).is(":checkbox")) valorEnvio = $(parametro[nome]).is(":checked"); else valorEnvio = $(parametro[nome]).val().toUpperCase(); } } else { valorEnvio = parametro[nome].toString().toUpperCase(); } params[nome] = valorEnvio.toString().toUpperCase(); } }); }); } //Caso tenha algum loading na tela, inicia o mesmo $(".loader_mask").show(); //Verifica se a requisição será feita por get ou post var fnAjax = defaults.metodoAjax.toUpperCase() == "GET" ? $.get : $.post; //Executa a requisição fnAjax(defaults.urlPesquisa, params, function (resultado) { //Recupera o status retornado pelo o servidor var status = resultado.msg; //Certifica que de algo tenha sido retornado do servidor var objRetornado = !$.isEmpty(resultado.result) ? resultado.result : null; //Limpa o historico de pesquisa e cache campoPesquisa._removeCacheResultado(); campoPesquisa._removeHistoricoPesquisa(); //Se caso a resultado também atribuirá em outros campos, limpa todos os campos if (!$.isEmpty(defaults.atribuiResultado) && defaults.atribuiResultado.length > 0) { $.each(defaults.atribuiResultado, function (i, paramPlugin) { var plugin = paramPlugin.objPlugin; if (!$.isEmpty(plugin) && !$.isEmpty(plugin.clearValues)) { plugin.clearValues(); if ((status == defaults.parametroVazio || $.isEmpty(objRetornado) || $.isEmpty(objRetornado.Result)) && defaults.bloqueiaInformacao) { $(plugin).attr("disabled", false).siblings(".pesquisaAvancada").css("pointer-events", "auto"); } } }); } //Se a pesquisa retornou tudo certo e etm algum registro a ser selecionado/atribuido chama a função responsavel pela formatação if (status == defaults.parametroSucesso && !$.isEmpty(objRetornado)) { campoPesquisa._formataResultadoPesquisa(objRetornado); } else if (status == defaults.parametroVazio || $.isEmpty(objRetornado)) { //Caso não tenha retornado nada, limpa todos os campos, gera um alerta de que não retornou nada e chama a função de campo vazio campoPesquisa.clearValues(); campoPesquisa._manipulaErroCampo(defaults.mensagemSemResultado); defaults.fnPesquisaVazia(); } else if (status == defaults.parametroErro) { //Caso tenha dado algum erro, limpa os campos e chama a função para tratamento do erro campoPesquisa.clearValues(); defaults.fnPesquisaFalhou(objRetornado); } else if (status == defaults.parametroNaoValido) { //Caso não tenha passado em alguma validação, percorre no item retornado pelo o servidor //Afim de identificador qual validação que não deu certo, gerando um alerta para o usuário if (!$.isEmpty(defaults.validacaoAdicional)) { $.each(defaults.validacaoAdicional, function (i, validacao) { if (validacao.name == objRetornado.name) { campoPesquisa._manipulaErroCampo(validacao.message); } }); } //Limpa o campo de pesquisa. campoPesquisa.clearValues(); } //Esconde o loading $(".loader_mask").hide(); }); } else { //Caso a pesquisa não seja feita no servidor, e seja apenas na listagem fornecida pelo o usuário //Verifica se a lista esta vazia if ($.isEmpty(defaults.parametroResultado)) { //Se sim, gera erro para o usuário. campoPesquisa._manipulaErroCampo(defaults.mensagemSemResultado); defaults.fnPesquisaVazia(); } else if (defaults.parametroResultado.length == 1) { //Se tem apenas um registro, não precisa fazer filtro, retorna o unico existente campoPesquisa._formataResultadoPesquisa(defaults.parametroResultado); } else { //Se tiver mais de um, é feito o selecionamento de acordo com o valor inserido no campo de pesquisa var itensSelecao = []; //Chama a função de selecionará itensSelecao = campoPesquisa._selecionaListagem(); //Se não retornou nada, gera alerta de pesquisa sem nenhum registro para retorno if ($.isEmpty(itensSelecao) && itensSelecao.length <= 0) { campoPesquisa._manipulaErroCampo(defaults.mensagemSemResultado); defaults.fnPesquisaVazia(); } else { //Se retornou algo, formata o objeto para execução da seleção do registro que ele precisa. campoPesquisa._manipulaErroCampo(""); campoPesquisa._formataResultadoPesquisa(itensSelecao); } } } } } else if (teclaPressionada == defaults.teclaAbrirModal && defaults.pesquisaModal) { //Caso a tecla selecionada seja a que abre a modal de pesquisa abre a mesma. event.preventDefault(); campoPesquisa._geraModalPesquisa(); } }); $(cmbSelecao).off("keydown").on("keydown", function (event) { //Verifica a tecla que o usuário pressionou var teclaPressionada = (event.keyCode ? event.keyCode : event.which); if (teclaPressionada == 27) { //Tecla ESC, Cancela a pesquisa. //Re-exibe o campo de pesquisa $(campoPesquisa).show(); //Remove o combobox $(this).unbind("focusout").remove(); if (!$.isEmpty(defaults.limpaCampos)) { campoPesquisa._limparCampos(defaults.limpaCampos); } campoPesquisa._manipulaErroCampo(""); campoPesquisa.focus(); } }); //Evento focusout do combobox $(cmbSelecao).off("focusout").on("focusout", function (event) { //Pega o id do item selecionado var propriedadeID = $(this).find(":selected").val(); //Verifica se não é nulo, geralmente é nulo quando o usuário deixou na primeira opção que corresponde a 'Selecione a opção' if (!$.isEmpty(propriedadeID)) { event.preventDefault(); //Pega o texto do input var propriedadeTexto = $(this).find(":selected").text(); //Atribui os resultados a seus respectivos campos. $(defaults.campoExibicao).val(propriedadeTexto); $(campoPesquisa).val(propriedadeTexto); $(defaults.seletorID).val(propriedadeID); //Re-exibe o campo de pesquisa $(campoPesquisa).show(); //Remove o combobox $(this).unbind("focusout").remove(); //Gera historico de pesquisa campoPesquisa._manipulaHistoricoPesquisa(propriedadeID, propriedadeTexto); //Recupera a lista que tem todos registros retornado pelo o campo var lista_resultado = campoPesquisa._buscaCacheResultado(); var objResultado = null; //Percorre a lista resultante, afim de encontrar o registro que identifica o da opção selecionada no combo //Isso para retornar o objeto completo para o desenvolver $.each(lista_resultado, function (i, resultado) { if (campoPesquisa._formataPropriedade(resultado, defaults.parametroID) == propriedadeID) { campoPesquisa._manipulaCacheResultado(resultado); objResultado = resultado; return false; } }); if (defaults.pesquisaSemFiltro) { $(elementoPesquisaSemFiltro).show(); } //Retorna de acordo a opção selecionada pelo desenvolvedor. if (defaults.retornaTodoObjeto) { defaults.fnPesquisaConcluida(objResultado); } else { defaults.fnPesquisaConcluida(propriedadeID); } } }); } //Função responsável para limpeza dos campos, utilizada quando é alterado algo no plugin e o desenvolvedor //Solicitou a limpeza de outros campos. campoPesquisa._limparCampos = function (strCampos) { if (typeof strCampos == "string") { $("body").find(strCampos).each(function () { $(this).text("").val("").removeClass("input-validation-error").addClass("valid").siblings("span.erroTooltip"); if ($(this).hasClass("buscaPersonalizada")) { this.clearValues(); } }); } else if (typeof strCampos == "function") { strCampos(); } } //Seleciona os registros da listagem fornecida para exibição na seleção //Utilizada quando a pesquisa não é feita no servidor. campoPesquisa._selecionaListagem = function () { var listaSelecao = []; var listaPropriedade = defaults.propriedadePesquisa.split(","); var valorPesquisa = $(campoPesquisa).val().toString().toUpperCase(); var valorAtual = ""; //Verifica por quais propriedades o desenvolver que fazer o filtro de pesquisa $.each(defaults.parametroResultado, function (i, registro) { //Percorre pelas propriedades $.each(listaPropriedade, function (j, propriedade) { //Pega o valor de acordo com o registro e a propriedade do momento valorAtual = campoPesquisa._formataPropriedade(registro, propriedade); //Se o valor digitado pelo o usuário informado for um númerico, provavelmente ele está pesquisado pelo o identificador //Caso seja, não vai dar um like no registro, trazendo as vezes registros desnecessários, vai trazer o que o identificador é igual //Caso não, da um like nos registros e traz todos que tem valor similar aquele. if ($.isNumeric(valorPesquisa)) { valorPesquisa = parseInt(valorPesquisa); if (valorPesquisa == valorAtual) { listaSelecao.push(registro); return false; } } else { if (valorAtual == valorPesquisa || valorAtual.toString().toUpperCase().indexOf(valorPesquisa.toUpperCase()) >= 0) { listaSelecao.push(registro); return false; } } }); }); return listaSelecao; } //Verifica se as configurações do plugin foram preenchidas corretamente. campoPesquisa._verificaPlugin = function () { var itemValido = true; var strMensagem = ""; //Caso seja pesquisa no servidor, obriga informar a url. if (defaults.pesquisaServidor) { if ($.isEmpty(defaults.urlPesquisa)) { strMensagem = mensagem_resource["UrlInvalida"]; itemValido = false; } } //Caso o campo tenha pesquisa sem filtro e modal também. Os mesmos não poderão ter a mesma tecla de ativação if (defaults.pesquisaModal && defaults.pesquisaSemFiltro && defaults.teclaAbrirModal == defaults.teclaPesquisaSemFiltro) { strMensagem = mensagem_resource["DuasPesquisaTecla"]; itemValido = false; } //Caso não tenha informado o id do input que armazenara o identificador registro, gera um erro. if ($.isEmpty(defaults.seletorID)) { strMensagem = mensagem_resource["InformarPropriedadeID"]; itemValido = false; } //Caso tenha dado algum erro, alerta o desenvolvedor. if (!itemValido) { ModalErro(strMensagem); } return itemValido; } //Caso ao realizar alteração ter que limpar outros campos, antes de realizar as chamadas das funções de sucesso, erro e resultado vazio, ele limpa os campos var fnSucesso = defaults.fnPesquisaConcluida; defaults.fnPesquisaConcluida = function (resultado) { if (!$.isEmpty(defaults.limpaCampos)) { campoPesquisa._limparCampos(defaults.limpaCampos); } campoPesquisa._manipulaErroCampo(""); if (permiteValidar) { fnSucesso(resultado); } permiteValidar = true; } if (!$.isEmpty(defaults.limpaCampos)) { var fnPesquisaVazia = defaults.fnPesquisaVazia; var fnPesquisaErro = defaults.fnPesquisaFalhou; defaults.fnPesquisaVazia = function () { campoPesquisa._limparCampos(defaults.limpaCampos); campoPesquisa._manipulaErroCampo(""); if (!defaults.modoLeitura) { fnPesquisaVazia(); } } defaults.fnPesquisaFalhou = function (erro) { campoPesquisa._limparCampos(defaults.limpaCampos); campoPesquisa._manipulaErroCampo(""); if (!defaults.modoLeitura) { fnPesquisaErro(erro); } } } //Verifica se todas as configurações do plugin estão corretas e possuem disponibilidade para realizar pesquisas if (!campoPesquisa._verificaPlugin()) { return false; } else { //Caso sim, gera os componentes de erro, modal e input necessário para o plugin campoPesquisa._geraComponentesPesquisa(); } //Evento para abertura da modal if (defaults.pesquisaModal) { $(elementoSpan).off("click").on("click", function (event) { if (!$(this).hasClass("disabled")) { campoPesquisa._geraModalPesquisa(); } else { event.preventDefault(); } }); } else if (defaults.pesquisaSemFiltro) { $(elementoPesquisaSemFiltro).off("click").on("click", function (event) { if (!$(this).hasClass("disabled")) { $(campoPesquisa).val(""); let eventKey = $.Event("keydown"); eventKey.keyCode = defaults.teclaPesquisaSemFiltro; $(campoPesquisa).trigger(eventKey); } else { event.preventDefault(); } }); } //ATRELA EVENTOS AOS INPUTS campoPesquisa._inicializaEventos(); }); //Função responsavel pela inclusão/alteração do registro na lista de historico campoPesquisa._manipulaHistoricoPesquisa = function (propriedadeID, propriedadeTexto) { campoPesquisa._removeHistoricoPesquisa(); lista_historico.push({ seletorID: campoPesquisa.id, id: propriedadeID, valor: propriedadeTexto }); } //Função responsavel pela inclusão/alteração do objeto retornado na lista de cache. campoPesquisa._manipulaCacheResultado = function (objResultado) { campoPesquisa._removeCacheResultado(); lista_resultado.push({ seletorID: campoPesquisa.id, resultado: objResultado }); } //Função responsavel por gerar o erro em campos que são pre-requisitos deste, para que logo apos seja feita a pesquisa. campoPesquisa._geraErroPreRequisito = function (strCampo, strMensagem) { var strSeletores = strCampo.split(","); $.each(strSeletores, function (i, seletor) { campoPesquisa._geraErroCampo(seletor, strMensagem); }); } //Função responsavel por gerar no campo deste plugin campoPesquisa._manipulaErroCampo = function (strMensagem) { campoPesquisa._geraErroCampo(campoPesquisa, strMensagem); } //Função generica que gerara erro em qualquer campo na tela campoPesquisa._geraErroCampo = function (strCampo, strMensagem) { $(strCampo).each(function () { var campoSelecionado = this; if ($.isEmpty(strMensagem)) { $.each(lista_erro, function (idx, erro) { if (erro.seletorID == campoSelecionado.id) { lista_erro.splice(idx, 1); return false; } }); } else { var encontrouRegistro = false; $.each(lista_erro, function (idx, erro) { if (erro.seletorID == campoSelecionado.id) { erro.mensagem = strMensagem; encontrouRegistro = true; return false; } }); if (!encontrouRegistro) { lista_erro.push({ seletorID: campoSelecionado.id, mensagem: strMensagem }); } } if ($("form").find(campoSelecionado).length > 0 && !$.isEmpty($.validator)) { $(campoSelecionado).valid(); } else if (!$.isEmpty(strMensagem)) { $(campoSelecionado).addClass("input-validation-error").removeClass("valid").siblings("span.erroTooltip").text(strMensagem); } else if ($.isEmpty(strMensagem)) { $(campoSelecionado).removeClass("input-validation-error").addClass("valid").siblings("span.erroTooltip").text(""); } }); } //Exclui todo historico de pesquisa realizado nesse plugin campoPesquisa._removeHistoricoPesquisa = function () { if (!$.isEmpty(lista_historico)) { $.each(lista_historico, function (i, registro) { if (registro.seletorID == campoPesquisa.id) { lista_historico.splice(i, 1); return false; } }); } } //Exclui todo cache salvo nesse plugin campoPesquisa._removeCacheResultado = function () { if (!$.isEmpty(lista_resultado)) { $.each(lista_resultado, function (i, registro) { if (registro.seletorID == campoPesquisa.id) { lista_resultado.splice(i, 1); return false; } }); } } //PROPRIEDADES EXTERNAS DO PLUGIN //Utilizada para alteração de fonte de resultado do plugin. //Um exemplo é a busca de uso deste, é a busca de pelagem, que pode varia de raça para raça. //No caso ao alterar a raça, atribui uma nova listagem de pelagens possíveis. campoPesquisa.setData = function (objPesquisa) { defaults.parametroResultado = objPesquisa; } //Utilizada para atribuição direta de itens no plugin. //Um exemplo de uso é na tela Detalhes e Atualizações, onde ao retornar os dados banco, " //Não é necessário ficar atribuindo os valores com o .val(). campoPesquisa.setValue = function (obj) { permiteValidar = false; campoPesquisa._formataResultadoPesquisa(obj); } //Limpar/Resetar o status de pesquisa do plugin. //Caso queira limpar os campos relacionados a este plugin, não é necessário ficar atribuindo "" através do .val() campoPesquisa.clearValues = function () { //Caso a pesquisa esteja sendo feita por um combobox, remove ele e exibe o campo de pesquisa normalmente if (!$.isEmpty($(campoPesquisa).siblings("select")) && $(campoPesquisa).siblings("select").length > 0) { $(campoPesquisa).show(); $(campoPesquisa).siblings("select").unbind("focusout").remove(); } if (defaults.pesquisaSemFiltro) { $(elementoPesquisaSemFiltro).show(); } //Limpa o campo de pesquisa e seu identificador $(defaults.seletorID).val(""); $(campoPesquisa).val(""); campoPesquisa._removeCacheResultado(); campoPesquisa._removeHistoricoPesquisa(); } //Retornar o objeto selecionado/retornado da busca //Caso queira recuperar o objeto completo da pesquisa. campoPesquisa.getDataReturned = function () { var objRetorno = null; if (!$.isEmpty($(campoPesquisa).val())) { objRetorno = campoPesquisa._buscaCacheResultado(); } return objRetorno; } //Verifica se as propriedades do plugin estão preenchidas corretamente. //Considera-se um registro valido, onde o campo de pesquisa e seu respectivo id estão preenchidos campoPesquisa.isValid = function () { var itemValido = true; var strMensagem = ""; if (defaults.campoObrigatorio && campoPesquisa.isEmpty()) { itemValido = false strMensagem = mensagem_resource["PreenchaCampo"]; } campoPesquisa._manipulaErroCampo(strMensagem) return itemValido; } //Verifica se as propriedades do plugin estão vazias. //Considera-se um registro valido, onde o campo de pesquisa e seu respectivo id estão preenchidos campoPesquisa.isEmpty = function () { var itemVazio = false; var strMensagem = ""; if ($.isEmpty($(campoPesquisa).val()) || $.isEmpty($(defaults.seletorID))) { itemVazio = true; strMensagem = mensagem_resource["PreenchaCampo"] } campoPesquisa._manipulaErroCampo(strMensagem); return itemVazio; } //Quando criou o plugin inicialmente, todas propriedades eram em inglês (achava o bam, bam, bam), só que logo após vi a //dificuldade em dar manutenção nisso, para ficar mais entendivel e mais limpo, mudei tudo para portugues. //Só que o porem da questão é esse plugin é utilizado em varias telas, não poderia alterar diretamente lá. //Fiz essa função para que o preenchimento no lado do desenvolvedor continue da mesma forma, e aqui eu altero tudo para //o pt-br (seria o papel do $.extend). function _formatarNomePropriedades() { var defaultOld = { fieldID: "seletorID", propertyResult: "campoExibicao", required: "campoObrigatorio", requiredMessage: "mensagemCampoObrigatorio", requiredInput: "campoPreRequisito", requiredPreRequisite: "mensagemPreRequisito", sServerSide: "pesquisaServidor", sAjaxUrl: "urlPesquisa", sAjaxData: "parametrosServidor", aData: "parametroResultado", propertySearch: "propriedadePesquisa", noResultMessage: "mensagemSemResultado", propertyID: "parametroID", propertyText: "parametroTexto", onSucessItem: "fnPesquisaConcluida", onFailure: "fnPesquisaFalhou", onResultEmpty: "fnPesquisaVazia", returnAllObject: "retornaTodoObjeto", clearFieldOnAlter: "limpaCampos", keyCodeConfirm: "teclaConfirmacao", messageReturnForSuccess: "parametroSucesso", messageReturnForEmpty: "parametroVazio", messageReturnForError: "parametroErro", modalSearch: "pesquisaModal", closeModalOnConfirm: "confirmaSaidaModal", titleModal: "tituloModal", keyModalSearch: "teclaAbrirModal", sendValuesModal: "parametroEnvioModal", blockSendValues: "bloqueiaParametroEnvioModal", getValuesModal: "recuperaParametroModal", classForSearchButton: "classeBotaoPesquisa", urlModal: "urlPartialModal", focusInitial: "focusInicialModal", loadAllData: "pesquisaSemFiltro", keyLoadAllData: "teclaPesquisaSemFiltro", loadOtherInformation: "pesquisaParcial", parameterLoadOtherInformation: "buscaParcial", loadAllInformation: "pesquisaCompleta", parameterloadAllInformation: "buscaCompleta", blockInformation: "bloqueiaInformacao", setInformationInput: "atribuiResultado", additionalValidation: "validacaoAdicional", methodAjax: "metodoAjax", messageReturnForNotValid: "parametroNaoValido", onChange: "onChange", onChangeOneItemReturn: "onChangeRetorno" } var listaPropriedades = Object.getOwnPropertyNames(options); $.each(listaPropriedades, function (i, prop) { defaults[defaultOld[prop]] = options[prop]; }); } //Caso a tela tenha o jquery validator, a validação do plugin, ocorre por ele. function _inicializaComponenteErro() { if (!$.isEmpty($.validator)) { jQuery.validator.addMethod("buscaPersonalizada", function (value, element, options) { var itemValido = true; var strMensagem = ""; $.each(lista_erro, function (i, erro) { if (erro.seletorID == $(element).prop("id")) { itemValido = false; strMensagem = erro.mensagem; return false; } }); if (!itemValido) { $.validator.messages["buscaPersonalizada"] = strMensagem; } return itemValido; }); jQuery.validator.classRuleSettings.buscaPersonalizada = { buscaPersonalizada: true }; } } return campoPesquisa; } //Funções auxiliares para o funcionamento do plugin em outras telas. function _inicializaFuncoesAuxiliares() { //Formatação de string String.prototype.formataStr = function () { var s = this; for (var i = 0; i < arguments.length; i++) { var reg = new RegExp("\\{" + i + "\\}", "gm"); s = s.replace(reg, arguments[i]); } return s; } //Verificação de valor do registro, para indicar se o mesmo é nulo ou não. $.isEmpty = function (value) { var empty = (value == undefined || value == null); if (!empty) { if (Array.isArray(value)) { if (value.length == undefined || value.length == 0) { empty = true; } } else { if (parseInt(value) != 0 && value == "") { empty = true; } } } return empty; } //Formatação de propriedades de acordo com o formato estabelecido $.formataPropriedade = function (objPropriedade, strFormato) { var strRetorno = ""; //Pega as propriedades a serem exibidas $.each(strFormato.split(","), function (i, propriedade) { //Remove os espaços propriedade = propriedade.trim(); //Chama a função que formata o valor de acordo com a propriedade var strFormatacao = $.formatarValor(objPropriedade, propriedade); //Se o valor não for vazio, adiciona na string de retorno if (!$.isEmpty(strFormatacao)) { strRetorno += strRetorno == "" ? strFormatacao : " - {0} ".formataStr(strFormatacao); } }); //Retorna resultado return strRetorno.toUpperCase(); } //Recupera o valor da propriedade de acordo com o formato solicitado //Por exemplo, tenho um objeto do tipo criador_view e solicito o nome da pessoa, ficando similar a Pessoa.nome //Logo objPropriedade seria o objeto criador_view, e o strFormato: 'Pessoa.nome' $.formatarValor = function (objPropriedade, strFormato) { $.each(strFormato.split("."), function (i, propriedade) { if (!$.isEmpty(objPropriedade)) { objPropriedade = objPropriedade[propriedade]; } else { objPropriedade = ""; return false; } }); if (!$.isEmpty(objPropriedade)) { if (objPropriedade.toString().toUpperCase().indexOf("/DATE") >= 0) { objPropriedade = new Date(parseInt(objPropriedade.substr(6))).toLocaleDateString(); } if (typeof objPropriedade === "function") objPropriedade = objPropriedade().toString().trim(); else objPropriedade = objPropriedade.toString().trim(); } return objPropriedade; }; } })(jQuery);;