/* * Codificación UTF-8 * * FUNCIONES: * blockExit( exit, modo, panel ) * getStatePanel(panel) * cleanForm(id, panel) * updateEvent(objElemento, message = msgLoad) * changeField(objElemento) * * offTooltipBasic(objElemento, modo) * formOnButtons(id,panel,modo) * formOnFields(objElemento, operacion, modo='on') * formOnInsert(objElemento) */ var gvh = gvh || {}; +function($) { 'use strict'; /** * blockExit: Bloquea la salida del panel mientras no se ejecute o cancele la acción que se haya indicado (insertar/modificar) * @access private * @var exit: booleano * @var panel: tipo de panel sobre el que se está trabajando ['edi'|'ediDetalle'|'lis'|'lisDetalle'] * @var modo: ['I' (inserción) | 'W' (modificación) | 'R' (lectura)] */ gvh.blockExit = function( exit, modo, panel, patron ) { console.log(' *** gvh_panel.js - blockExit() -> '+panel+' modo '+modo ); $( '#home' ).attr( 'data-gvhExit', exit ); $( '#close' ).attr( 'data-gvhExit', exit ); $( 'div[id=P_'+panel+'][data-gvhWindow='+ambito+']' ).attr( 'data-gvhestadopanel', modo ); $( '#'+ambito).attr( 'data-gvhestadopanel', modo ); if( panel != 'fil' ) { gvh.iconUpdate( modo, panel ); } } /** * getStatePanel: Obtenemos el estado del panel ('R', 'W', 'I') * @access private * @var exit: booleano * @var panel: tipo de panel sobre el que se está trabajando ['edi'|'ediDetalle'|'lis'|'lisDetalle'] */ gvh.getStatePanel = function( panel ) { console.log(' *** gvh_panel.js - getStatePanel()'); return $('#P_'+panel).attr('data-gvhEstadoPanel'); } /** * cleanForm: Marcará el estado del registro: insertada/modificada * @access private * @var id: id del botón limpiar */ gvh.cleanForm = function(id) { console.log(' *** gvh_panel.js - cleanForm()' ); var claseM = $('#'+id).attr( 'data-gvhClaseManejadora' ); var panel = $('#'+id).attr( 'data-gvhPanelOn' ); var panelJSON = panel.substr( 0, 3 ); var raizJSON = gvh.getRoot(claseM,panelJSON); var reg = 0; var vFields = gvh.getFields(raizJSON,reg); var pagActiva = gvh.getPagActive(raizJSON); var numReg = 1; if (panelJSON != 'fil') { if (panelJSON == 'lis') { var vReg = gvh.getRegAlter(raizJSON); var numReg = count(vReg); var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijoRow = panel+'_'+rowTab; } else { var reg = gvh.getPagActive(raizJSON); } } var vFields = gvh.getFields(raizJSON,reg); for (var i=0;i 0 ) { gvh.addList(inputField, listOptions, valueOld); } } else { var idCampo = inputField.attr('id'); $('#'+idCampo+' option:selected').attr('selected',false); $('#'+idCampo+' option[value="'+valueOld+'"]').prop("selected", true); $('#'+idCampo+' option[value="'+valueOld+'"]').attr("selected", true); } gvh.setValue(raizJSON,field,reg,valueOld); break; case 'cwlista radio': var radio = $('input:radio[name*='+field+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); if( inputField.is(':visible') ) { if (valueOld != '') radio.filter('[value='+valueOld+']').prop('checked',true); else radio.prop('checked',false); gvh.setValue(raizJSON,field,reg,valueOld); } break; case 'cwlista select2': var inputField = $('input[id*='+field+']').filter('[data-gvhClaseManejadora='+claseM+']'); var lista = gvh.getFieldList(raizJSON,field,false,pagActiva); var descripcion = ''; for( i=0;i 0) && (regAlter.length > 0)) { for (var index=0;index++;index
'; gvh.setClassField(raizJSON,field,numReg,'fieldRequired'); } } } } if (fieldsRequired == '') { gvh.blockExit(true,'R',panel); } return fieldsRequired; } // fieldsRequired() /** * updateEvent() * FUNCIӓN: lanzar acción de interfaz * @access private * @var objElemento: elemento dom que lanza la acción * @var message: texto que aparecerá en el mensaje */ gvh.updateEvent = function(objElemento, message = msgLoad) { console.log(' *** gvh_panel.js - updateEvent() -> '+objElemento.attr('id')); var id = objElemento.attr('id'); var actualizaA = objElemento.attr('data-gvhActualizaA'); var panel = objElemento.attr('data-gvhPanelOn'); if ((actualizaA != '') && (actualizaA != undefined)) { var claseM = objElemento.attr('data-gvhClaseManejadora'); if ($('#'+id).is(':radio')) { id = $(this).attr('name'); } var panelJSON = panel; if (panel == 'ediDetalle') panelJSON = 'edi'; else if (panel == 'lisDetalle') panelJSON = 'lis'; var formulario = objElemento.closest('form'); var idForm = formulario.attr('id'); var value = objElemento.val(); var url = 'phrame.php?action=gvhJSRefreshUI&gvhcache=true&gvhpanel='+panelJSON+'&claseManejadora='+claseM+'&gvHclass='+claseM+'&gvHfname='+idForm+'&gvHfrom='+id+'&gvHvalue='+value+'&gvHtarget='+actualizaA; console.log(' ... Llamada a phrame: '+url); //Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz $.ajax({ data: datosJSON[claseM][panelJSON]['dataPerform'], type: "POST", cache: false, datatype: "script", url: url, beforeSend: function() { console.log(' ... Beforesend ...'); gvh.loading('on',message); }, success: function(response) { console.log(' ... Success: '+response); //EJECUTA JAVASCRIPT EN LA PÁGINA (acciones de interfaz) response.context.action = 'NoAction' var rspPhrameJSON = $.parseJSON(response); if (rspPhrameJSON.context.action == 'NoAction') { eval(rspPhrameJSON.context.script); } }, error:function( jqXHR, textStatus, errorThrown ) { console.log(' ... # ERROR updateEvent'); }, complete:function( jqXHR, textStatus, errorThrown ) { console.log('# COMPLETE updateEvent'); gvh.loading('off'); } }) } else { console.log(' ¡¡¡No se ha indicado el campo que debe ser actualizado. Param "actualizaA".!!!'); } }; // updateEvent() /** * changeField: Actualización del datosJSON con el cambio producido en el campo * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhClaseManejadora * -> data-gvhPanelOn * -> data-gvhCWSource * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.changeField = function( objElemento ) { var fieldAmbito = objElemento.attr( 'data-gvhWindow' ); if( fieldAmbito == ambito ) { var claseM = objElemento.attr( 'data-gvhClaseManejadora' ); var panel = objElemento.attr( 'data-gvhPanelOn' ); var plugin = objElemento.attr( 'data-gvhCWSource' ); var panelJSON = panel.substring( 0, 3 ); var idCampo = objElemento.attr( 'id' ); console.log( ' *** changeField() -> '+idCampo ); var campoJSON = idCampo; if( panelJSON != 'fil' ) { campoJSON = idCampo.split('___')[1]; if( plugin == 'cwlistaradio' ) { var name = objElemento.attr( 'name' ); campoJSON = name.split('___')[1]; } } var raizJSON = gvh.getRoot( claseM, panelJSON ); var plugin = ''; var external = objElemento.attr( 'data-gvhExternal' ); if( external == 'true' ) // Tratamiento de campos external { if (gvh.getExistField(raizJSON,campoJSON,0,true)) { plugin = gvh.getPlugin(raizJSON,campoJSON,0,true); } } else { var regJSON = 0; // Según el panel se calcula indice del datosJSON if (gvh.getStatePanel(panel) == 'I') { regJSON = gvh.getPagIns(raizJSON); } else { switch( panelJSON ) { case 'fil': regJSON = 0; break; case 'lis': var row = idCampo.split('___')[2].split('_')[1]; regJSON = gvh.indexDataJSON( raizJSON, row ); var sufijo = panel+'_'+row; break; case 'edi': var pagActual = gvh.getPagActive(raizJSON); regJSON = pagActual; break; default: regJSON = 0; break; } } if (gvh.getExistField(raizJSON,campoJSON,regJSON)) { var plugin = gvh.getPlugin(raizJSON,campoJSON,regJSON); var hidden = gvh.isHidden(raizJSON,campoJSON,regJSON); gvh.setStateReg( raizJSON, 'selected', regJSON, 'add' ); var objPanel = $('div[id=P_'+panel+'][data-gvhWindow='+ambito+']'); var estado = $('div[id=P_'+panel+'][data-gvhWindow='+ambito+']').attr( 'data-gvhestadopanel' ); switch( estado ) { case 'W': estado = 'modificada'; gvh.setStateReg( raizJSON, 'updated', regJSON, 'add' ); break; case 'D': estado = 'borrada'; gvh.setStateReg( raizJSON, 'deleted', regJSON, 'add' ); break; case 'I': estado = 'insertada'; gvh.setStateReg( raizJSON , 'inserted', regJSON, 'add' ); break; default: estado = 'nada'; gvh.setStateReg( raizJSON , 'nada', regJSON, 'add' ); break; } if( hidden == 1 ) // Campo oculto { plugin = 'Hidden'; } } else { console.log( '¡¡¡ changeField() - '+campoJSON+' no existe este campo en el registro '+regJSON+' !!!' ); } } if( plugin != '' ) { var valorCampo = ''; switch( plugin ) { case 'cwcampotexto': case 'cwareatexto': case 'cwrichareatexto': valorCampo = objElemento.val(); break; case 'cwlista': valorCampo = objElemento.val(); var idCampo = objElemento.attr('id'); $('#'+idCampo+' option:selected').attr('selected',false); $('#'+idCampo+' option[value="'+valorCampo+'"]').prop("selected", true); var dependencia = gvh.isDependenceList(raizJSON,campoJSON,regJSON); console.log(' LISTA: '+idCampo+' es dependiente? '+dependencia); /*if( (dependencia != undefined) && (dependencia != 'NO') ) { //Hay dependencia var listOptions = gvh.getFieldList(raizJSON,campoJSON,true,regJSON,external=false); console.log(listOptions); if( listOptions.length > 0 ) { gvh.addList(objElemento, listOptions, ''); } }*/ /* else { $('#'+idCampo+' option:selected').attr('selected',false); $('#'+idCampo+' option[value="'+valueOld+'"]').prop("selected", true); $('#'+idCampo+' option[value="'+valueOld+'"]').attr("selected", true); }*/ break; case 'cwimagen': valorCampo = objElemento.attr( 'src' ); break; case 'cwlistaradio': valorCampo = $('input:radio[name='+name+'][data-gvhWindow='+ambito+']:checked').val(); break; case 'cwcheckbox': if (objElemento.is(':checked')) { valorCampo = objElemento.attr('data-gvhValueCheck'); } else { valorCampo = objElemento.attr('data-gvhValueUnCheck'); } break; case 'Hidden': valorCampo = gvh.getValue(raizJSON,campoJSON,0); break; default: console.log( ' ¡¡¡ changeField() - '+plugin+' plugin no controlado !!!'); break; } if( external == 'true' ) { gvh.setValue(raizJSON,campoJSON,0,valorCampo,true); } else { gvh.setValue(raizJSON,campoJSON,regJSON,valorCampo,false); } var actualizaA = objElemento.attr( 'data-gvhActualizaA' ); if( (actualizaA != '') && (actualizaA != undefined) ) { var formulario = objElemento.closest( 'form' ); gvh.updateEvent($('#'+idCampo)); } if( panel != 'fil' ) { this.blockExit( false, $('#P_'+panel).attr('data-gvhEstadoPanel'), panel ); } console.log( raizJSON ); } } } // changeField() /** * offTooltipBasic() * FUNCIӓN: Desactiva el resto de botones tooltip con funciones básicas (insertar/modificar/eliminar) al pinchar en uno de ellos * @access private * @var objElemento: componente botón que se ha pulsado * @var modo: ['on','off'] * */ gvh.offTooltipBasic = function(objElemento, modo) { console.log( ' *** gvh_panel.js - offTooltipBasic()'); var id = objElemento.attr('id'); var botonTooltip = $('button[data-gvhWindow='+ambito+'][data-gvhposition=botonera]').filter('[data-gvhfunction=insert],[data-gvhfunction=update],[data-gvhfunction=delete]').not( '[id='+id+']' ); botonTooltip.each( function() { if (modo == 'on') { $(this).removeClass( 'disabled' ); $(this).prop('disabled',false); } else if (modo == 'off') { $(this).addClass( 'disabled' ); $(this).prop('disabled',true); } } ); } // offTooltipBasic() /** * formOnButtons() * FUNCIÓN: Activar botones de la barra inferior * @access private * @var objPanel: panel sobre el que se quieren activar los paneles */ gvh.formOnButtons = function( objPanel ) { var idPanel = objPanel.attr('id'); var panelOn = idPanel.substr(2,idPanel.length); // P_lis console.log( ' *** gvh_panel.js - formOnButtons() '+idPanel ); $( 'button[data-gvhWindow='+ambito+'][id*=bttlTreeSelector_]' ) .filter( '[data-gvhstate=edit][data-gvhposition=panel]' ) .removeClass( 'disabled' ); var boton = $( 'button[data-gvhWindow='+ambito+'][id*=btn_][data-gvhpanelon='+panelOn+']' ); boton.each( function() { if( $(this).is( ':hidden' ) ) { $(this).show(); } } ); }; /** * formOnFields() * FUNCIÓN: Activar campos * @access private * @var objElemento: componente botón que se ha pulsado * @var operacion: ['insertar', 'modificar', 'eliminar'] * @var modo: ['on', 'off'] */ gvh.formOnFields = function(objElemento, operacion, modo='on') { console.log(' ** gvh_panel.js - formOnFields() '+objElemento.attr('id')+' operacion '+operacion); var panel = objElemento.attr('data-gvhPanelOn'); var claseManejadora = objElemento.attr('data-gvhClaseManejadora'); var panelJSON = panel.substring(0,3); var raizJSON = gvh.getRoot(claseManejadora,panelJSON); var prefijo = ''; var state = ''; var css = ''; var iter = 0; var numReg = 1; if (panelJSON != 'fil') { if (panelJSON == 'lis') { var vReg = gvh.getRegAlter(raizJSON); var numReg = count(vReg); } else { var reg = gvh.getPagActive(raizJSON); var vFields = gvh.getFields(raizJSON,reg); } } switch(operacion) { case 'insert': prefijo = 'ins___'; state = '[data-gvhstate=new],[data-gvhstate=edit]'; css = 'new'; reg = gvh.getPagIns(raizJSON); vFields = gvh.getFields(raizJSON,reg); break; case 'update': prefijo = 'cam___'; state = '[data-gvhstate=edit]'; break; default: prefijo = 'cam___'; break; } for (var i=0;i 0) { var idCampo = vID[1]; var iter = raizJSON['panel']['pagActive']; if (panelJSON == 'lis') { var row = vID[2].split('_')[1]; iter = gvh.indexDataJSON(raizJSON,row); } var state = gvh.getStateField(raizJSON,idCampo,iter); if (state != false) { $("div[id*='"+idTA+"']").attr('contenteditable','true'); } else { $("div[id*='"+idTA+"']").attr('contenteditable','false'); } if (modo == 'on') { var tabindex = $(this).attr('tabindex'); if (tabindex < 0) tabindex = $(this).attr('tabindex')*(-1); $(this).attr('tabindex',tabindex); } } }); //textarea // Botones tooltip del panel var botonTooltip = $('button[data-gvhWindow='+ambito+'][id*=calD_'+prefijo+'][data-gvhposition=panel]'); $('button[data-gvhWindow='+ambito+'][data-gvhposition=panel][data-gvhpanelon='+panel+']').map(function() { var id = $(this).attr('id'); var vID = id.split('___'); var idCampo = vID[1]; if (panelJSON == 'lis') { var row = vID[2].split('_')[1]; iter = gvh.indexDataJSON(raizJSON,row); } if (gvh.getExistField(raizJSON,idCampo,iter)) { var state = gvh.getStateReg(raizJSON,iter,'state'); if (state != false) { if ($(this).attr('data-gvhpanelon') == panel) { if (operacion == 'insert') { $(this).filter('[data-gvhstate=edit],[data-gvhstate=new]').prop('disabled', false); $(this).show(); } else { if ($(this).is(':visible')) { $(this).filter('[data-gvhstate=edit]').prop('disabled',false); } } if (modo == 'on') { var tabindex = $(this).attr('tabindex'); if (tabindex < 0) tabindex = $(this).attr('tabindex')*(-1); $(this).attr('tabindex',tabindex); } } } } }); // botón tooltip } else { console.log('¡¡¡El registro '+iter+' no existe en ["data"] !!!'); }*/ }; /** * formOnInsert() * FUNCIÓN: Panel en modo inserción * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.formOnInsert = function(objElemento) { console.log(' ** gvh_panel.js - formOnInsert() '+objElemento.attr('id')); var id = objElemento.attr('id'); var panel = objElemento.attr('data-gvhPanelOn'); var idPanel = 'P_'+panel; var claseManejadora = objElemento.attr('data-gvhClaseManejadora'); var panelJSON = panel.substring(0,3); var raizJSON = gvh.getRoot(claseManejadora,panelJSON); var numReg = gvh.getNumReg(raizJSON); gvh.blockExit(false,'I',panel); // Reiniciamos los arrays JSON gvh.setAllState(raizJSON,'nada'); gvh.setAllSelected(raizJSON,'false'); // Según el tipo de panel, el modo inserción debe ocultar o activar determinados paneles var md = objElemento.attr('data-gvhTipoPanel'); console.log(' ... Tipo de panel: '+md); var idPaginador = $('#capa_'+panel+'_paginacion').filter('[data-gvhWindow='+ambito+']').attr('id'); console.log(' ... Se ocultan capas con datos.'); $('div[id*=pag_'+panel+'_]').filter('[data-gvhClaseManejadora='+claseManejadora+']').map(function (){ if ($(this).is(':visible')) { $(this).hide(); } }); switch(md) { case 'maestro': console.log(' ... Se oculta el detalle.'); $('div[data-gvhtipopanel=detalle][data-gvhWindow='+ambito+']').hide(); // Pestañas detalles $('#detalles').filter('[data-gvhWindow='+ambito+']').hide(); // Paginador console.log(' ... Se oculta paginador.'); $('#'+idPaginador).filter('[data-gvhClaseManejadora='+claseManejadora+']').hide(); break; case 'detalle': console.log(' ... Se oculta páginas detalle con datos.'); // Paginador console.log(' ... Se oculta paginador.'); $('#'+idPaginador).filter('[id*=Detalle]').hide(); break; case 'simple': console.log(' ... Se oculta paginador.'); $('#'+idPaginador).hide(); if ($('div[data-gvhpagina=block][data-gvhWindow='+ambito+']').is(':visible')) { console.log(' ... Se oculta capa bloqueo.'); $('div[data-gvhpagina=block][data-gvhWindow='+ambito+']').hide(); } // Comprobamos si es un Tabular-Registro, para activar el edi if (($('#'+idPaginador).filter('[id$=___insTR]').length) > 0) { console.log(' ... Se muestra panel edi (TR).'); $(this).show(); }; break; default: console.log('¡¡¡ Revisar parámetro "data-gvhTipoPanel".!!!'); break; } var idSolapa = "solData__"+panel; if ($('div[id*='+idSolapa+']').length > 0) { console.log(' ... Existen solapas.'); $('div[id*='+idSolapa+']').each(function() { if ($(this).attr('data-gvhWindow') == ambito) { console.log(' ... Se muestra solapa '+$(this).attr('id')); $(this).show(); } }); } var idPanelIns = 'pag_'+panel+'_ins'; console.log(' ... Se muestra el panel de inserción '+idPanelIns); $('#'+idPanelIns).show(); gvh.formOnFields($('#'+id), 'insert'); gvh.formOnButtons($('#'+idPanel)); } /** * formOnUpdate() * FUNCIÓN: Panel en modo modificación * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.formOnUpdateNO = function(objElemento) { console.log(' ** gvh_panel.js - formOnUpdate() '+objElemento.attr('id')); var id = objElemento.attr('id'); var panel = objElemento.attr('data-gvhPanelOn'); var idPanel = 'P_'+panel; var claseManejadora = objElemento.attr('data-gvhClaseManejadora'); var panelJSON = panel.substring(0,3); var raizJSON = gvh.getRoot(claseManejadora,panelJSON); var numReg = gvh.getNumReg(raizJSON); var pagActive = gvh.getPagActive(raizJSON); var idPaginacion = panel + '_paginacion'; var paginador = $('#'+idPaginacion).attr( 'data-gvhFunction' ); if( paginador == 'pagination' ) { $( '#'+idPaginacion ).twbsPagination( {estado:'modificada'} ); } gvh.setStateReg( raizJSON, 'updated', pagActive, 'add' ); gvh.blockExit( false, 'W', panel ); gvh.formOnFields($('#'+id), 'update'); gvh.formOnButtons($('#P_'+panel)); gvh.offTooltipBasic($('#'+id),'off'); } } (jQuery);