/* Codificación UTF-8 */ /* FUNCIONES: * - isEmptyJSON(obj) * - getRulesFilter(idFilter, claseM, panel) * - showMessage(langCod,type,msg) * - addList(gvhLista,selectedValue) * - stateFields(sufijo, state, panel) * - createTree(idTree, node, multiple, url, claseM, destino, actualizaA, idForm) * - showConfirm(id, codigo, descBreve, text, btnOk, btnCancel, destino, destinoNo, panel, claseM) * - select2.defaults(width, allowClear, closeOnSelect, placeholder, containerCssClass, dropdownCssClass) * - validateDate(id, fecha, separador, mascara) */ (function($) { /* * isEmptyJSON() * FUNCIÓN: Indicará si un objeto JSON es vacío o no */ $.fn.isEmptyJSON = function(obj) { for(var i in obj) { return false; } return true; } /* * getRulesFilter() * FUNCIÓN: Parsea los parámetros introducidos en el filtro avanzado en formato JSON y SQL para guardarlos en datosJSON * DEFAULTS: idFilter - id del componente CWFilter * claseM - clase manejadora a la que pertenece * panel - panel en el que se encuentra el filtro */ $.fn.getRulesFilter = function(options) { var defaults = $.extend({ idFilter: '', claseM: '', panel: 'edi' }, options); filter = $('#'+defaults.idFilter); //JSON resultado = filter.queryBuilder('getRules', { get_flags: true, skip_empty: true } ); console.log(resultado); console.log(resultado['rules']); resultParseJSON = JSON.stringify(resultado, undefined, 2); console.log('parseJSON: '+resultParseJSON); // SQL parseSQL = ''; if (resultado['rules'].length > 0) { resultParseSQL = filter.queryBuilder('getSQL', false, false); parseSQL = resultParseSQL.sql + (resultParseSQL.params ? '\n\n' + JSON.stringify(resultParseSQL.params, undefined, 2) : ''); console.log('parseSQL: '+parseSQL); } panelJSON = filter.attr('data-gvhPanelJSON'); raizJSON = datosJSON[defaults.claseM][panelJSON]; if (panelJSON == 'fil') { raizJSON['data'][0]['gvhJS_fields'][defaults.idFilter]['rules'] = resultParseJSON; raizJSON['data'][0]['gvhJS_fields'][defaults.idFilter]['rulesSQL'] = parseSQL; } console.log(raizJSON); } /* * showMessage() * FUNCIÓN: Muestra un mensaje con el texto del fichero json que corresponda * defaults: código mensaje */ $.fn.showMessage = function(langCod,type,msg) { $.ajax({ url: urlLang, dataType: 'json', async: false, type: 'post', success: function(data) { cod = desescapeIGEPjs(data[langCod]['cod']); title = desescapeIGEPjs(data[langCod]['title']); descrip = desescapeIGEPjs(data[langCod]['descr']); if ((msg) && (msg != '')) { descrip += '
'+msg; } switch(type) { case 'alert': alertify.alert(cod,title,descrip); break; case 'error': alertify.error(cod,title,descrip); break; case 'suggest': alertify.suggest(cod,title,descrip); break; } }, error: function ( jqXHR, textStatus, errorThrown ) { alert(jqXHR); }, }); } /* * addList() * FUNCIÓN: Crea una lista nueva con las opciones que se le pasan * defaults: gvhLista: array de opciones a añadir a la lista * selectedValue: valor seleccionado en la lista */ $.fn.addList = function(options) { var settings = $.extend({ gvhLista : null, selectedValue : null }, options); var parentDetach = $(this).parent(); $(this).empty(); var $detachSelect = $(this); console.log('DETACH() - selected: '+valueJSONDecode); $detachSelect.detach(); gvhLista = settings.gvhLista; lengthLista = gvhLista.length; for(i=0;i'+descripcion+''); } else { $detachSelect.append(''); } } parentDetach.append($detachSelect); } /* * stateFields() * FUNCIÓN: Modifica el estado de los campos del registro * defaults: sufijo: sufijo de los campos a cambiar el estilo * state: estado en el que se encuentra la fila o registro * panel: panel sobre el que se actúa */ $.fn.stateFields = function(options) { var defaults = $.extend({ sufijo : '', state : 'no', panel: 'lis' }, options); //REVIEW: CHECKBOX $('[id$='+defaults.sufijo+']').filter('[id^=cam_]').map(function() { field = $(this); switch(defaults.state) { case 'modificada': if (field.attr('data-gvhstate') == 'edit') { field.prop('readonly',false); field.prop('disabled',false); if ((defaults.panel == 'lis') || (defaults.panel == 'lisDetalle')) { field.removeClass('tableEdit'); field.removeClass('tableNew'); field.addClass('tableModify'); } else { field.removeClass('edit'); field.removeClass('new'); field.addClass('modify'); } } break; case 'borrada': field.prop('readonly',false); field.prop('disabled',false); if ((defaults.panel == 'lis') || (defaults.panel == 'lisDetalle')) { field.removeClass('tableEdit'); field.removeClass('tableNew'); field.addClass('tableDelete'); } else { field.removeClass('edit'); field.removeClass('new'); field.addClass('delete'); } break; case 'nada': field.prop('readonly',true); if ((defaults.panel == 'lis') || (defaults.panel == 'lisDetalle')) { field.removeClass('tableNew'); field.removeClass('tableModify'); field.removeClass('tableDelete'); field.addClass('tableEdit'); } else { field.removeClass('modify'); field.removeClass('new'); field.removeClass('delete'); field.addClass('edit'); } break; default: field.prop('readonly',true); if ((defaults.panel == 'lis') || (defaults.panel == 'lisDetalle')) { field.removeClass('tableNew'); field.removeClass('tableModify'); field.removeClass('tableDelete'); field.addClass('tableEdit'); } else { field.removeClass('modify'); field.removeClass('new'); field.removeClass('delete'); field.addClass('edit'); } break; } }); if (defaults.state == 'modificada') { editor = $('div[id^=editor_cam_]'); if (editor.length > 0) { editor.filter('[id$='+defaults.panel+']').filter('[data-gvhPanelOn='+defaults.panel+']').filter('[data-gvhstate=edit]').each(function() { $(this).attr('contenteditable','true'); }) } } } /* * createTree() * FUNCIÓN: Crea un árbol jquery con el plugin jstree * defaults: idTree - del BOTÓN para el que se van a activar los campos * node - */ $.fn.createTree = function(options) { var defaults = $.extend({ idTree: '', node: '', multiple: 'false', url: '', claseM: '', destino: '', actualizaA: '', idForm: '' },options); if (defaults.multiple == "true") multiple = true; else multiple = false; // Comprobar si existe la variable datosJSON raizJSON = datosJSON[defaults.claseM][defaults.panel]; var data = []; if (raizJSON['gvhJSON'] == 'false') { data = JSON.stringify($("#"+defaults.idForm).serialize()); url = defaults.url; } else { data = datosJSON; url = defaults.url+"&gvhcache=true&claseManejadora="+defaults.claseM+"&gvhpanel="+defaults.panel; } console.log(data); $('#'+defaults.idTree).jstree({ "types" : { "default" : { "icon" : "glyphicon glyphicon-flash" }, "root" : { "icon" : "fa fa-chevron-down" }, "users" : { "icon" : "fa fa-users" }, "volley" : { "icon" : "fa fa-anchor" }, "ciclismo" : { "icon" : "fa fa-bicycle" }, "child" : { "icon" : "fa fa-child" } }, "core" : { "multiple": multiple, "checkbox": true, "ajax": true, "worker": true, "data": { "url": url, //"url": "phrame.php?action=TreeSelector__treeAjax", "data": function(data) { console.log('data '+data); //json = node; return data;//{ "id" : node.id, "nodo": node }; }, "success": function (node) { console.log('success '+node); }, /*'data': function(node) { console.log('getJSONData '+node); json = node; return { "id" : node.id, "nodo": node }; }*/ "search": { "case_insensitive": true, "ajax" : { "url": "phrame.php?action=TreeSelector__treeAjax&value=search", 'dataType': 'json', 'type': 'POST', "data": function (node) { console.log('search '+node.id) return { "id": node.id }; } } }, }, "themes": { 'name': 'proton', 'responsive': true }, }, /*"changed": function (e, data) { console.log("Nodo seleccionado:"); selectedNodes = data.selected; if (selectedNodes.length > 0) { $.each(selectedNodes, function( index, value ) { console.log(value.id+' '+value.text); }); } else { console.log('no hay seleccionados'); } }, "search": { "case_insensitive": true, "ajax" : { "url": "phrame.php?action=TreeSelector__treeAjax&value=search", 'dataType': 'json', 'type': 'POST', "data": function (node) { console.log('search '+node.id) return { "id": node.id }; } } },*/ "plugins" : [ "types", "wholerow", "search", "themes", "html_data", "checkbox", "sort", "ui" ] }); } /* * showConfirm() * FUNCIÓN: mostrar mensaje de confirmación * defaults: id - del botón para el que se van a activar los campos * codigo - código del mensaje (ej. APL-1) * descBreve - descripción breve de la cabecera * text - texto del cuerpo del mensaje * btnOk - texto del botón OK * btnCancel - texto del botón Cancelar */ $.fn.showConfirm = function(options) { var defaults = $.extend({ id: '', codigo: '', descBreve: '-', text: '-', btnOk: 'Ok', btnCancel: 'Cancelar', destino: '', destinoNO: '', panel: '', claseM: '' },options); alertify.set({ labels : { ok : defaults.btnOk, cancel : defaults.btnCancel } }); alertify.confirm(defaults.codigo,defaults.descBreve,defaults.text, function (e) { if (e) { $(this).controllerJS({ id: defaults.id, panel: defaults.panel, destino: defaults.destino, newWindow: 'false', confirm: '', //??? claseM: defaults.claseM, message: msgLoad }) } else { $(this).controllerJS({ id: defaults.id, panel: defaults.panel, destino: defaults.destinoNO, newWindow: 'false', confirm: '', //??? claseM: defaults.claseM, message: msgLoad }) } }, 'Default Value'); }; /* * select2.defaults() * FUNCIӓN: Propiedades por defecto de las listas tipo select2 */ /* width: 'auto', closeOnSelect: true, placeholder: 'Selecciona una opción', allowClear: true, minimumResultsForSearch: 15, containerCssClass: 'tpx-select2-container', dropdownCssClass: 'tpx-select2-drop'*/ $.fn.select2.defaults = $.extend($.fn.select2.defaults, { width: 'auto', allowClear: true, closeOnSelect: true, // múltiple - se cierra tras la selección placeholder: 'Selecciona una opción', containerCssClass: 'tpx-select2-container', dropdownCssClass: 'tpx-select2-drop' }); /* * validateDate() * FUNCIӓN: Comprobar que la fecha sea correcta * defaults: fecha - fecha introducida * separador */ $.fn.validateDate = function(options) { var defaults = $.extend({ id: '', fecha: '', separador: '/', mascara: 'dd/mm/yyyy' },options); separador = defaults.separador; if (defaults.mascara.indexOf('/') != -1) separador = '/'; if (defaults.mascara.indexOf('-') != -1) separador = '-'; if ((defaults.mascara == 'dd/mm/yyyy') || (defaults.mascara == 'dd-mm-yyyy')) var dateDDMMYYYRegex = /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](18|19|20)\d\d$/; if ((defaults.mascara == 'mm/dd/yyyy') || (defaults.mascara == 'mm-dd-yyyy')) var dateDDMMYYYRegex = /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](18|19|20)\d\d$/; if (defaults.fecha != '') { correcto = defaults.fecha.match(dateDDMMYYYRegex); if (correcto) { fecha = defaults.fecha.split(separador); dia = fecha[0]; mes = fecha[1]; anio = fecha[2]; var error = 0; if ((mes==4 || mes==6 || mes==9 || mes==11) && dia==31) { correcto = false; } if (mes == 2) { // bisiesto var bisiesto = (anio % 4 == 0 && (anio % 100 != 0 || anio % 400 == 0)); if (dia > 29 || (dia==29 && !bisiesto)) { correcto = false; } } } if (!correcto) { $('#'+defaults.id).showMessage('gvhlang_msj900','error'); $('#'+defaults.id).val(''); } return correcto; } } })(jQuery);