/* * 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) * formOnUpdate(objElemento, modo='on') * formOnDelete(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 name = objElemento.attr('name'); if ($('input:radio[name='+name+']').length > 0) // Si el elemento es un radiobutton pasamos como id el atributo name { var id = name; } 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' ); gvh.setSelectedReg( raizJSON, 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); break; case 'cwimagen': valorCampo = objElemento.attr( 'src' ); break; case 'cwlistaradio': valorCampo = $('input:radio[name='+name+'][data-gvhWindow='+ambito+']:checked').val(); var radio = $('input:radio[name='+name+'][data-gvhWindow='+ambito+']'); 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' ); if (plugin == 'cwlistaradio') gvh.updateEvent(radio); else 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() : 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.getRegSelected(raizJSON); var numReg = vReg.length; } else { var reg = gvh.getPagActive(raizJSON); var vFields = gvh.getFields(raizJSON,reg); var sufijo = 0; } } switch(operacion) { case 'inserted': prefijo = 'ins___'; state = '[data-gvhstate=new],[data-gvhstate=edit]'; css = 'new'; reg = gvh.getPagIns(raizJSON); if (panelJSON == 'lis') { var vReg = gvh.getRegInsert(raizJSON); var numReg = vReg.length; } else { var vFields = gvh.getFields(raizJSON,reg); var sufijo = reg; } break; case 'updated': prefijo = 'cam___'; state = '[data-gvhstate=edit]'; break; case 'deleted': prefijo = 'cam___'; css = 'delete'; state = '[data-gvhstate=edit]'; break; default: prefijo = 'cam___'; css = 'edit'; break; } if (panelJSON == 'edi') { if (modo == 'on') gvh.setStateReg( raizJSON, operacion, reg, 'add' ); else gvh.setStateReg( raizJSON, operacion, reg, 'sub' ); } for (var i=0;i 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), 'inserted'); gvh.formOnButtons($('#'+idPanel)); } /** * formOnUpdate() * FUNCIÓN: Panel en modo modificación * @access private * @var objElemento: componente botón que se ha pulsado * @var modo: 'on', 'off' */ gvh.formOnUpdate = function(objElemento,modo = 'on') { 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), 'updated',modo); gvh.formOnButtons($('#P_'+panel)); gvh.offTooltipBasic($('#'+id),'off'); } /** * formOnDelete() * FUNCIÓN: Panel en modo modificación * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.formOnDelete = function(objElemento) { console.log(' ** gvh_panel.js - formOnDelete() '+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, 'deleted', pagActive, 'add' ); gvh.blockExit( false, 'W', panel ); gvh.formOnFields($('#'+id), 'deleted'); gvh.formOnButtons($('#P_'+panel)); gvh.offTooltipBasic($('#'+id),'off'); } } (jQuery);