/* * Codificación UTF-8 * * FUNCIONES LLAMADAS A OPERACIONES: * buscar( $objElemento ) * guardar( objElemento ) * cancelar( objElemento ) * insert( objElemento ) * deleted( objElemento ) * update( objElemento ) * cancelarVS( objElemento ) * okWS() * aceptarVS( objElemento ) * * FUNCIONES LLAMADAS A NEGOCIO: * callControllerJS( objElemento ) * loading( modo, message ) * * FUNCIONES MENSAJES: * showMessage( langCod, type, msg ) * showConfirm( id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO ) * * FUNCIONES CONTROL EVENTOS: * semaforoChange( funcion, objElemento ) * * getUrlParameter(sParam) * * REVIEW: * getRulesFilter(idFilter, claseM, panel) * select2.defaults(width, allowClear, closeOnSelect, placeholder, containerCssClass, dropdownCssClass) * validateDate(id, fecha, separador, mascara) * showLinkTree(id,linkRama) * popupwindow() */ /********************************************* / * FUNCIONES LLAMADAS A OPERACIONES /*********************************************/ /** * buscar: buscar del panel filtro * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = 'buscar' * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhConfirm * -> data-gvhNewWindow * @access private * @var $objElemento: componente botón que se ha pulsado */ gvh.buscar = function( $objElemento ) { var $form = $objElemento.closest( 'form' ); var panel = $objElemento.attr( 'data-gvhPanelOn' ); var destino = $form.attr( 'action' ); var claseM = $objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var id = $objElemento.attr( 'id' ); var destinoLength = $objElemento.attr( 'data-gvhDestino' ).length; if( destinoLength > 0 ) { destino = $objElemento.attr( 'data-gvhDestino' ); } if( $objElemento.attr( 'data-gvhConfirm' ) ) { var confirm = $objElemento.attr( 'data-gvhConfirm' ); var vConfirm = confirm.split( '___' ); //showConfirm() - PARAMS: id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO gvh.showConfirm( id , vConfirm[0] , desescapeIGEPjs( vConfirm[1] ) , desescapeIGEPjs( vConfirm[2] ) , desescapeIGEPjs( vConfirm[3] ) , desescapeIGEPjs( vConfirm[4] ) , destino , panel , claseM ); } else if( claseM !== undefined && panel !== undefined ) { var resultado; var $editor = $( 'div[data-gvhCWSource=CWEditorFiltros][data-gvhclasemanejadora='+claseM+'][data-gvhpanelon=fil]' ); if ($editor.length > 0) { resultado = gvh.getRulesFilter( $editor ); } if (resultado !== null) { gvh.callControllerJS( $objElemento ); } else { gvh.showConsoleMsg( 'log',' Las reglas del filtro avanzado introducidas por el usuario no son válidas.' ); } } } /** * guardar: Enviar a negocio los datos del panel para ser guardados * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = 'guardar' * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhConfirm * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.guardar = function( objElemento ) { gvh.showConsoleMsg('log',' *** gvh_functions.js - gvh.guardar() '); gvh.showConsoleMsg('log',objElemento); var accionActivaP = 'accionActivaP_'+objElemento.closest( 'form' ).attr( 'id' ); var panel = objElemento.attr( 'data-gvhPanelOn' ); var idGuardar = objElemento.attr( 'id' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); //var estadoPanel = $( '#P_'+panel+'[data-gvhClaseManejadora='+claseM+']' ).attr( 'data-gvhestadopanel' ); var destino = objElemento.closest( 'form' ).attr( 'action' ); var destinoLength = objElemento.attr( 'data-gvhDestino' ).length; if( destinoLength > 0 ) { destino = objElemento.attr( 'data-gvhDestino' ); } var fields = gvh.fieldsRequired(objElemento); if( fields != '' ) { gvh.showMessage( 'gvhlang_msj901', 'alert', fields ); return; } // TODO : FALTA data-gvhConfirm con JSON var confirm = objElemento.attr( 'data-gvhConfirm' ); if( (confirm != '') && (confirm != undefined) ) { var vConfirm = confirm.split( '___' ); var destinoNO = objElemento.attr( 'data-gvhConfirmCancel' ); //showConfirm() - PARAMS: id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO gvh.showConfirm( idGuardar , vConfirm[0] , desescapeIGEPjs( vConfirm[1] ) , desescapeIGEPjs( vConfirm[2] ) , desescapeIGEPjs( vConfirm[3] ) , desescapeIGEPjs( vConfirm[4] ) , destino , panel , claseM , destinoNO ); } else { gvh.callControllerJS( objElemento ); } } /** * cancelar: Cancelar la acción que se haya indicado realizar en el panel * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = 'guardar' * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhConfirm * -> data-gvhNewWindow * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.cancelar = function( objElemento ) { var modo = 'R'; var panel = objElemento.attr( 'data-gvhPanelOn' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); gvh.blockExit( true, modo, panel, claseM ); var destino = objElemento.attr( 'data-gvhDestino' ); if( (destino != 'cancelar') && (destino != '') ) { gvh.callControllerJS( objElemento ); } else { objElemento.loading( { message: 'Cancelando...' } ); setTimeout( 'window.top.location.reload(true)', 100 ); // true = ctrl+F5 } } /** * insert: Inserción de los datos introducidos en el panel * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = 'insert' * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhPatronPanel * -> data-gvhActSobre * @access private * @var objElemento: componente que lanza el evento de insertar */ gvh.insert = function( objElemento ) { gvh.showConsoleMsg('log', ' *** gvh_function.js - insert()' ); var patronPanel = objElemento.attr( 'data-gvhPatronPanel' ); var panelOn = objElemento.attr( 'data-gvhPanelOn' ); var destino = objElemento.attr( 'data-gvhDestino' ); var actuaSobre = objElemento.attr( 'data-gvhActSobre' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); if( panelOn != 'fil' && panelOn == actuaSobre ) { gvh.blockExit( false, 'I', panelOn, claseM ); } switch( patronPanel ) { case 'TR': gvh.callControllerJS( objElemento ); break; case 'simple': case 'maestro': case 'detalle': $( 'div[data-gvhpagina=block][data-gvhWindow='+gvh.ambito+']' ).hide(); if( (panelOn == 'fil') || ((destino != undefined) && (destino != '')) ) { gvh.callControllerJS( objElemento ); } else { gvh.formOnInsert(objElemento); } break; default: break; } } /** * deleted: Eliminar el registro(s) seleccionado(s) * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = 'delete' * -> data-gvhClaseManejadora * -> data-gvhPanelOn * @access private * @var objElemento: componente que lanza el evento de eliminar */ gvh.deleted = function( objElemento ) { gvh.showConsoleMsg('log', ' *** gvh_function.js - deleted()' ); var id = objElemento.attr( 'id' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var panelOn = objElemento.attr( 'data-gvhPanelOn' ); var panelJSON = panelOn.substr( 0, 3 ); var raizJSON = gvh.getRoot( claseM, panelJSON ); if( panelOn != 'fil' ) { gvh.blockExit( false, 'D', panelOn, claseM ); } switch( panelOn ) { case 'lis': case 'lisDetalle': var vSufijos = []; if( $('input:checkbox[id^=checkAll_'+panelOn+']').is(':checked') ) { gvh.formOnDelete( objElemento ); } else { $( 'input[data-gvhWindow='+gvh.ambito+'][id*=check_'+panelOn+']:checked' ).each( function() { var sufijo = $(this).attr( 'id' ).split('check_')[1]; var row = $(this).attr( 'data-gvhRow' ); var indiceJSON = gvh.indexDataJSON( raizJSON, row ); var estado = gvh.getStateReg(raizJSON,indiceJSON,'state'); if( estado == 'nada' ) { vSufijos.push( sufijo ); } } ); if( vSufijos.length > 0 ) { gvh.formOnDelete(objElemento); } else { gvh.showMessage( 'gvhlang_msj16', 'alert' ); } } break; case 'edi': case 'ediDetalle': var sufijo = ''; $( 'div[id*=pag_'+panelOn+'_]' ).each( function() { if( $(this).is( ':visible' ) ) { sufijo = $(this).attr( 'id' ).substring( 3, objElemento.attr('id').length ); } } ); gvh.formOnDelete(objElemento); break; default: break; } }//gvh.deleted /** * update: Modificar el registro(s) seleccionado(s) * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = 'update' * -> data-gvhClaseManejadora * -> data-gvhPanelOn * @access private * @var objElemento: componente que lanza el evento de update */ gvh.update = function( objElemento ) { gvh.showConsoleMsg('log', ' *** gvh_function.js - update()' ); var id = objElemento.attr('id'); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var panelOn = objElemento.attr('data-gvhPanelOn'); var patronPanel = objElemento.attr('data-gvhPatronPanel'); var panelJSON = panelOn.substr(0,3); var raizJSON = gvh.datosJSON[claseM][panelJSON]; var actuaSobre = objElemento.attr('data-gvhActSobre'); /* if( panelOn != 'fil' && panelOn == actuaSobre ) { gvh.blockExit( false, 'W', panelOn, claseM ); }*/ switch( panelOn ) { case 'edi': case 'ediDetalle': //var sufijo = panelOn+'_0'; gvh.formOnUpdate(objElemento); break; case 'lis': case 'lisDetalle': var vRowSelected; vRowSelected = gvh.getRegSelected(raizJSON); if( patronPanel == 'simple' ) // Patrón tabular simple/maestro/detalle { if( $('input:checkbox[data-gvhWindow='+gvh.ambito+'][data-gvhFunction=checkAll]').is(':checked') ) { gvh.formOnUpdate(objElemento); } else { if( vRowSelected.length > 0 ) { gvh.formOnUpdate(objElemento); } else { gvh.showMessage( 'gvhlang_msj16', 'alert' ); } } } else if ( patronPanel == 'TR' ) // Patrón Tabular-Registro { if( vRowSelected.length > 0 ) { gvh.callControllerJS( objElemento ); } else { gvh.showMessage( 'gvhlang_msj16', 'alert' ); } } else { gvh.showConsoleMsg('error', ' ¡¡Botón tooltip modificar no definido el tipo de panel!! ' ); } break; default: gvh.showConsoleMsg('error', ' ¡¡Botón tooltip modificar no asociado a ningún panel!! ' ); break; } }//gvh.update /** * cancelarVS: Cancelar la acción de la ventana de selección * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = ['cancelarvs'] * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhConfirm * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.cancelarVS = function( objElemento ) { var panel = objElemento.attr( 'data-gvhPanelOn' ); if( objElemento.attr('data-gvhConfirm') ) { var confirm = objElemento.attr( 'data-gvhConfirm' ); var vConfirm = confirm.split( '___' ); var destino = objElemento.attr( 'data-gvhDestino' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var id = objElemento.attr( 'id' ); //showConfirm() - PARAMS: id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO gvh.showConfirm( id , vConfirm[0] , desescapeIGEPjs( vConfirm[1] ) , desescapeIGEPjs( vConfirm[2] ) , desescapeIGEPjs( vConfirm[3] ) , desescapeIGEPjs( vConfirm[4] ) , destino , panel , claseM ); } else { gvh.dialogWS.modal( 'hide' ); if( gvh.dialogIdWM.length <= 0 ) { gvh.ambito = 'gvhMain'; } else { gvh.ambito = 'gvhModal'; } } } /** * okWS: Aceptar la acción de la ventana de selección * @access private * @var actionOrigen: * @var fila: * @var panel: * @var fieldsSource: * @var fieldsWS: * @var claseMO: */ gvh.okWS = function(objElemento, actionOrigen, fila, panel, fieldsSource, fieldsWS, claseMO) { gvh.showConsoleMsg('log',' *** gvh_Function.js - okWS() '); // DATOS DE LA VENTANA SELECCIÓN // Clase manejadora de ventana selección var claseM_WS = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); // Datos JSON de la ventana de selección var raizJSON_WS = gvh.getRoot(claseM_WS,'lis'); // DATOS DE LA VENTANA PADRE // Clase manejadora padre gvh.showConsoleMsg('log',claseMO); var ClaseMPadre = claseMO; var panelJSON = panel.substring(0,3); var raizJSON = gvh.getRoot(claseMO,panelJSON); var modoPanelPadre = objElemento.attr('data-gvhModoPanelOn'); // NOTA: El modo del panel se podría tb extraer del propio panel desde datosJSON. // Pág activa desde la que se ha invocado la ventana var regPadre; var sufijo; switch( panelJSON ) { case 'lis' : regPadre = $('#registroOrigen').val(); sufijo = '___'+panel+'_'+regPadre; break; case 'edi' : regPadre = ( modoPanelPadre == 'I' ? gvh.getPagIns(raizJSON) : 0 ); sufijo = '___'+panel+'_'+regPadre; break; case 'fil' : default: regPadre = 0; sufijo = ''; break; } var indiceJSONPadre = gvh.indexDataJSON( raizJSON, regPadre ); // Datos JSON de la ventana padre // Estado panel padre, id campo // prefijo según modo panel var estado; var prefijo; switch( panelJSON ) { case 'fil': estado = "updated"; prefijo = ''; break; case 'lis': case 'edi' : if( modoPanelPadre == 'I' ) { estado = "inserted" prefijo = 'ins___'; } else { estado = "updated"; prefijo = 'cam___'; } break; } // Var para marcar el panel como modificado var panelModif = false; var fieldActualiza = []; // Bucle de los campos a actualizar con los valores de la ventana de selección $.each( fieldsSource, function(indexSource, fSource) { var external = false; // Campo ventana de selección var fWS = fieldsWS[indexSource]; // Cálculo del indiceJSON: registro seleccionado //var indiceJSONWS = gvh.indexDataJSON( raizJSON_WS, fila ); var indiceJSONWS = gvh.getRegSelected( raizJSON_WS ); var newVal = gvh.getValue( raizJSON_WS, fWS, indiceJSONWS ); // Campo ventana padre // Actualización del objeto JSON de datos if( gvh.getExistField( raizJSON, fSource, indiceJSONPadre, external) ) { gvh.setValue( raizJSON, fSource, indiceJSONPadre, newVal, external ); var idSource = fSource; if( !external ) { idSource = prefijo + fSource + sufijo; } $('#'+idSource+'[data-gvhClaseManejadora='+ClaseMPadre+']').val( newVal ); gvh.setStateReg( raizJSON, estado, indiceJSONPadre ); if( (panelModif == false) && (panelJSON != 'fil') ) { if( $('#'+idSource+'[data-gvhClaseManejadora='+ClaseMPadre+']').attr('readonly') ) { panelModif = true; } } var funcion = ''; if( $('button[id='+idSource+']').attr('id') ) { funcion = $('button[id='+idSource+']').attr('data-gvhFunction'); // Botón tooltip "updateField" } var actualizaA = $('#'+idSource+'[data-gvhClaseManejadora='+ClaseMPadre+']').attr('data-gvhActualizaA'); fieldActualiza.push( idSource ); } else { gvh.showConsoleMsg( 'error', '¡¡¡ No existe el campo '+idSource+' para la clase manejadora '+claseM_WS ); } }); gvh.ambito = ( gvh.dialogIdWM.length <= 0 ? 'gvhMain' : 'gvhModal' ); if( fieldActualiza.length > 0 ) { $.each( fieldActualiza, function(index,value) { gvh.changeField($('#'+value+'[data-gvhClaseManejadora='+ClaseMPadre+']')); }); } gvh.dialogWS.modal('hide'); } /** * aceptarVS: Aceptar la acción de la ventana de selección * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhFunction = ['cancelarvs'] * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhConfirm * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.aceptarVS = function(objElemento ) { gvh.showConsoleMsg('log',' *** gvh_Function.js - aceptarVS() '); gvh.showConsoleMsg('log',objElemento); var panel = objElemento.attr( 'data-gvhPanelOn' ); var panelActua = objElemento.attr( 'data-gvhPanelActua' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); if( objElemento.attr('data-gvhConfirm') ) { var confirm = objElemento.attr( 'data-gvhConfirm' ); var vConfirm = confirm.split( '___' ); var destino = objElemento.attr( 'data-gvhDestino' ); var id = objElemento.attr( 'id' ); //showConfirm() - PARAMS: id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO gvh.showConfirm( id , vConfirm[0] , desescapeIGEPjs( vConfirm[1] ) , desescapeIGEPjs( vConfirm[2] ) , desescapeIGEPjs( vConfirm[3] ) , desescapeIGEPjs( vConfirm[4] ) , destino , panel , claseM ); } else { var destino = objElemento.attr( 'data-gvhDestino' ); var fieldsWS = objElemento.attr( 'data-gvhFieldsWS' ).split( ',' ); var fieldsSource = objElemento.attr( 'data-gvhFieldsSource' ).split( ',' ); var action = $( '#actionOrigen' ).val(); var raizJSON = gvh.getRoot(claseM,panel.substr(0,3)); var indiceJSONWS = gvh.getRegSelected( raizJSON ); var cod; var title; var descrip; if (indiceJSONWS.length < 0) { $.getJSON( gvh.urlLang, function( data ) { cod = desescapeIGEPjs( data['gvhlang_msj16']['cod'] ); title = desescapeIGEPjs( data['gvhlang_msj16']['title'] ); descrip = desescapeIGEPjs( data['gvhlang_msj16']['descr'] ); } ) .done( function() { alertify.suggest( cod, title, descrip ); } ); } else { var modoPanel = objElemento.attr( 'data-gvhModoPanelOn' ); var claseMOrigen = objElemento.attr( 'data-gvhClaseMOrigen' ); gvh.okWS(objElemento, action,indiceJSONWS,panelActua,fieldsSource,fieldsWS,claseMOrigen); } } }; /********************************** / * FUNCIONES LLAMADAS A NEGOCIO /**********************************/ /** * callControllerJS: Llamada a negocio con los datos del panel * El elemento necesita tener los siguientes atributos si se crea de forma directa en html: * -> data-gvhClaseManejadora * -> data-gvhDestino * -> data-gvhPanelOn * -> data-gvhConfirm * -> data-gvhNewWindow * @access private * @var objElemento: componente botón que se ha pulsado */ gvh.callControllerJS = function( objElemento ) { gvh.showConsoleMsg('log',' *** gvh_Function.js - callControlerJS()'); var className = objElemento.attr( 'class' ); if( className == 'btnTooltip' ) { return; } var id = objElemento.attr( 'id' ); var claseM = objElemento.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var panel = objElemento.attr( 'data-gvhPanelOn' ); var objPanel = $('#P_'+panel+'[data-gvhClaseManejadora='+claseM+']'); var destino = objElemento.attr( 'data-gvhDestino' ); var newWindow = objElemento.attr( 'data-gvhNewWindow' ); var confirmacion = objElemento.attr( 'data-gvhConfirm' ); var esModal = (objElemento.closest('[data-gvhwindow]').attr('data-gvhwindow') == 'gvhModal'); var idVentana = objElemento.closest('[role=dialog]').attr('id'); var lastPath = ''; if (idVentana && idVentana != 'WS') { lastPath = gvh.dialogs[idVentana]['lastPath']; } // Averiguar si debemos comprobar los datos del formulario var checkForm = false; const regex = /^.*checkForm=(0|1|true|false).*$/i; var m; if( (m = regex.exec(destino)) !== null ) { checkForm = m[1]; } checkForm = !(checkForm == false); // Obtenemos el estado del panel (=lectura/escritura/inserción/...) var estado; // var estado = 'R'; // estado = $('#'+gvh.ambito).attr( 'data-gvhEstadoPanel' ); $( 'div[id^=P_][data-gvhWindow='+gvh.ambito+']' ).map( function() { var estadoPanel = $(this).attr( 'data-gvhEstadoPanel' ); if ( (estadoPanel != 'R') || (estado == undefined) ) { estado = estadoPanel; } }); // Comprobamos si el panel ha sido modificado var changed = false; if( objPanel.length > 0 ) { var gvhchanged = objPanel.attr( 'data-gvhchanged' ); if (typeof gvhchanged !== typeof undefined && gvhchanged !== false) { if( gvhchanged == 'true' || gvhchanged == '1' ) { changed = true; } } } //console.log( 'Changed!!! : ' + changed ); if( confirmacion ) { var vConfirm = confirmacion.split( '___' ); //showConfirm() - PARAMS: id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO gvh.showConsoleMsg('log',' ** showConfirm() '); gvh.showConsoleMsg('log',' id => '+id); gvh.showConsoleMsg('log',' codigo => '+vConfirm[0]); gvh.showConsoleMsg('log',' descBreve => '+desescapeIGEPjs( vConfirm[1] )); gvh.showConsoleMsg('log',' text => '+desescapeIGEPjs( vConfirm[2] )); gvh.showConsoleMsg('log',' btnOk => '+desescapeIGEPjs( vConfirm[3] )); gvh.showConsoleMsg('log',' btnCancel => '+desescapeIGEPjs( vConfirm[4] )); gvh.showConsoleMsg('log',' destino => '+destino); gvh.showConsoleMsg('log',' panel => '+panel); gvh.showConsoleMsg('log',' claseM => '+claseM); gvh.showConsoleMsg('log',' *********** '); gvh.showConfirm( id , vConfirm[0] , desescapeIGEPjs( vConfirm[1] ) , desescapeIGEPjs( vConfirm[2] ) , desescapeIGEPjs( vConfirm[3] ) , desescapeIGEPjs( vConfirm[4] ) , destino , panel , claseM ); } //else if( estado == 'R' || !changed || !checkForm ) else { objElemento.controllerJS( { id: id , claseM: claseM , panel: panel , destino: destino , newWindow: newWindow , confirm: '' , message: 'cargando' , esModal: esModal , idVentana: idVentana , lastPath: lastPath } ); //gvh.controllerJS(id, panel, destino, claseM, newWindow, '', 'cargando'); } /*else { console.error( ' ¡¡¡ El panel está en modo activo (W/I) hay que acabar la acción o cancelarla para poder cambiar de panel!!! ' ); gvh.showMessage( 'gvhlang_msjUI', 'alert' ); }*/ } /** * loading: Muestra el bloque 'Cargando' * * @param {string} modo - Activar o desactivar ['on'|'off'] * @param {string} message - Cadena de texto si se quiere particularizar el mensaje "cargando" */ gvh.loading = function( modo, message ) { var bloquearInterfaz = true; var delay = 100; if( modo != 'on' ) { $( '#load-cover' ).hide(); $( '#load' ).hide(); $( '#load-cover' ).remove(); $( '#load' ).remove(); return; } if( $('#load-cover').length > 0 ) { setTimeout (function () { if (bloquearInterfaz) { $( '#load-cover' ).show(); } $( '#load' ).show(); }, delay); return; } var elCover = document.createElement( "div" ); elCover.setAttribute( "id", "load-cover" ); elCover.className = "load-cover"; elCover.style.cssText = "display: none;"; document.body.appendChild( elCover ); var elLoad = document.createElement( "section" ); elLoad.setAttribute( "id", "load" ); elLoad.className = ""; document.body.appendChild( elLoad ); var contenido = '
'; contenido += ''; if (message == '' || message == undefined) { message = desescapeIGEPjs (gvh.msgLoad); } else { message = desescapeIGEPjs (message) ; } contenido += '' + message + ''; contenido += '
'; $('#load').html (contenido); if (bloquearInterfaz) { setTimeout (function () { $( '#load-cover' ).show(); }, delay); } } //gvh.loading /*********************** / * FUNCIONES MENSAJES /***********************/ /** * showMessage: Muestra un mensaje con el texto del fichero json que corresponda (esp.json|val.json|eng.json) de igep * @access private * @var langCod: Código del mensaje a mostrar (ej. gvhlang_msjUI) * @var type: tipo de menssaje a mostrar ['alert'|'error'|'suggest'] * @var msg: texto que complementa al mensaje definido en el fichero json */ gvh.showMessage = function( langCod, type, msg ) { gvh.showConsoleMsg('log', ' *** showMessage() -> '+type ); // Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz $.ajax( { url: gvh.urlLang , dataType: 'json', async: false , type: 'post' , success: function( data ) { var cod = desescapeIGEPjs( data[langCod]['cod'] ); var title = desescapeIGEPjs( data[langCod]['title'] ); var 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 ); } } ); } /** * 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 */ gvh.showConfirm = function( id, codigo, descBreve, text, btnOk, btnCancel, destino, panel, claseM, destinoNO ) { alertify.set( { labels : { ok : btnOk , cancel : btnCancel } } ); alertify.confirm( codigo, descBreve, text, function( e ) { if( e ) { $(this).controllerJS( { id: id , panel: panel , destino: destino , newWindow: 'false' , confirm: '' , claseM: claseM , message: gvh.msgLoad } ); //gvh.controllerJS(id, panel, destino, claseM, 'false', '', gvh.msgLoad); } else { $(this).controllerJS( { id: id , panel: panel , destino: destinoNO , newWindow: 'false' , confirm: '' , claseM: claseM , message: gvh.msgLoad } ); //gvh.controllerJS(id, panel, destinoNO, claseM, 'false', '', gvh.msgLoad); } } , 'Default Value' ); } /**************************************** / * FUNCIONES CONTROL SECUENCIA EVENTOS /****************************************/ /** * semaforoChange: Método que activa eventos y los vuelve a activar para evitar la propagación de eventos en el dom * @access private * @var objElemento: elemento que lanza el cambio y es necesaria evitar la propagación */ gvh.semaforoChange = function( funcion, objElemento ) { //REVIEW: NADIE INVOCA semaforoChange() objElemento.on( 'change.stopPropagation', function() { e.stopPropagation(); e.stopImmediatePropagation(); event.preventDefault(); return false; }); gvh.changeField( objElemento ); objElemento.off( 'change.stopPropagation' ); } /*gvh.getUrlParameter = function(sParam) { var sPageURL = decodeURIComponent(location.search.substring(1)), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : sParameterName[1]; } } };*/ /*********** / * REVIEW /***********/ /** * getRulesFilter() * FUNCIÓN: Parsea los parámetros introducidos en el filtro avanzado en formato JSON y SQL para guardarlos en gvh.datosJSON * @access private * @var filter: objeto filtro */ gvh.getRulesFilter = function(filter) { var claseM = filter.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var panel = filter.closest('[data-gvhPanelOn]').attr('data-gvhPanelOn'); var idFilter = filter.attr('id'); //JSON var resultado; try { resultado = filter.queryBuilder( 'getRules', { get_flags : true , allow_invalid : false , skip_empty : true , } ); } catch(err) { return; } if (resultado !== null) { gvh.showConsoleMsg('log',resultado); gvh.showConsoleMsg('log',resultado['rules']); } resultParseJSON = JSON.stringify(resultado, undefined, 2); gvh.showConsoleMsg('log','parseJSON: '+resultParseJSON); // SQL var parseSQL = ''; var resultParseSQL; if (resultado !== null && resultado['rules'].length > 0) { resultParseSQL = filter.queryBuilder('getSQL', false, false); parseSQL = resultParseSQL.sql + (resultParseSQL.params ? '\n\n' + JSON.stringify(resultParseSQL.params, undefined, 2) : ''); gvh.showConsoleMsg('log','parseSQL: '+parseSQL); } var panelJSON = filter.closest('[data-gvhPanelJSON]').attr('data-gvhPanelJSON'); var raizJSON = gvh.datosJSON[claseM][panelJSON]; if (panelJSON == 'fil') { raizJSON['data'][0]['gvhJS_fields'][idFilter] = {}; raizJSON['data'][0]['gvhJS_fields'][idFilter]['CWPlugin'] = 'CWEditorFiltros'; raizJSON['data'][0]['gvhJS_fields'][idFilter]['value'] = resultParseJSON; raizJSON['data'][0]['gvhJS_fields'][idFilter]['active'] = true; //raizJSON['data'][0]['gvhJS_fields']['rulesSQL'] = {}; //raizJSON['data'][0]['gvhJS_fields']['rulesSQL']['CWPlugin'] = 'CWEditorFiltros'; //raizJSON['data'][0]['gvhJS_fields']['rulesSQL']['value'] = parseSQL; raizJSON['dataPerform']['data'][0]['gvhJS_fields'][idFilter] = {}; raizJSON['dataPerform']['data'][0]['gvhJS_fields'][idFilter]['CWPlugin'] = 'CWEditorFiltros'; raizJSON['dataPerform']['data'][0]['gvhJS_fields'][idFilter]['value'] = resultParseJSON; raizJSON['dataPerform']['data'][0]['gvhJS_fields'][idFilter]['active'] = true; //raizJSON['dataPerform']['data'][0]['gvhJS_fields']['rulesSQL'] = {}; //raizJSON['dataPerform']['data'][0]['gvhJS_fields']['rulesSQL']['CWPlugin'] = 'CWEditorFiltros'; //raizJSON['dataPerform']['data'][0]['gvhJS_fields']['rulesSQL']['value'] = parseSQL; } gvh.showConsoleMsg('log',raizJSON); return resultado; } /** * createTree() * FUNCIÓN: Crea un árbol jquery con el plugin jstree * @access private * @var objTree: objeto árbol * @var node: * @var multiple: selección múltiples valores * @var url * */ // REVIEW Vero cuando acabe el árbol gvh.createTree = function(objTree, node, multiple, url) { var claseM = objTree.closest('[data-gvhClaseManejadora]').attr('data-gvhClaseManejadora'); var panel = objTree.attr('data-gvhPanelOn'); var actualizaA = objTree.attr('data-gvhActualizaA'); var idTree = objTree.attr('id'); var idForm = objTree.closest('form').attr('id'); if (multiple == "true") var multiple = true; else var multiple = false; // Comprobar si existe la variable gvh.datosJSON var raizJSON = gvh.datosJSON[claseM][panel]; var data = []; if (raizJSON['gvhJSON'] == 'false') { var data = JSON.stringify($("#"+idForm).serialize()); var url = url; } else { var data = gvh.datosJSON; var url = url+"&gvhcache=true&claseManejadora="+claseM+"&gvhpanel="+panel; } gvh.showConsoleMsg('log',data); $('#'+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) { gvh.showConsoleMsg('log','data '+data); //json = node; return data;//{ "id" : node.id, "nodo": node }; }, "success": function (node) { gvh.showConsoleMsg('log','success '+node); }, /*'data': function(node) { gvh.showConsoleMsg('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) { gvh.showConsoleMsg('log','search '+node.id) return { "id": node.id }; } } }, }, "themes": { 'name': 'proton', 'responsive': true }, }, /*"changed": function (e, data) { gvh.showConsoleMsg('log',"Nodo seleccionado:"); selectedNodes = data.selected; if (selectedNodes.length > 0) { $.each(selectedNodes, function( index, value ) { gvh.showConsoleMsg('log',value.id+' '+value.text); }); } else { gvh.showConsoleMsg('log','no hay seleccionados'); } }, "search": { "case_insensitive": true, "ajax" : { "url": "phrame.php?action=TreeSelector__treeAjax&value=search", 'dataType': 'json', 'type': 'POST', "data": function (node) { gvh.showConsoleMsg('log','search '+node.id) return { "id": node.id }; } } },*/ "plugins" : [ "types", "wholerow", "search", "themes", "html_data", "checkbox", "sort", "ui" ] }); } /** * validateDate() * FUNCIӓN: Comprobar que la fecha sea correcta * defaults: fecha - fecha introducida * separador */ gvh.validateDate = function(id,fecha,separador,mascara) { separador = separador || '/'; mascara = mascara || 'dd/mm/yyyy'; var dateDDMMYYYRegex; if (mascara.indexOf('/') != -1) { separador = '/'; } if (mascara.indexOf('-') != -1) { separador = '-'; } if ((mascara == 'dd/mm/yyyy') || (mascara == 'dd-mm-yyyy')) { dateDDMMYYYRegex = /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](18|19|20)\d\d$/; } if ((mascara == 'mm/dd/yyyy') || (mascara == 'mm-dd-yyyy')) { dateDDMMYYYRegex = /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](18|19|20)\d\d$/; } if( fecha != '' ) { var error; correcto = fecha.match( dateDDMMYYYRegex ); if( correcto ) { fecha = fecha.split( separador ); dia = fecha[0]; mes = fecha[1]; anio = fecha[2]; 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 ) { gvh.showMessage('gvhlang_msj900','error'); $('#'+id).val(''); } return correcto; } }; //gvh.validateDate /** * showLinkTree() * FUNCIӓN: mostrar la opción del árbol * */ //var cont = 0; gvh.showLinkTree = function(id,linkRama) { gvh.showConsoleMsg('log',' ** gvh_funcionesPaneles.js - showLinkTree() '); if( linkRama != '' ) { gvh.showConsoleMsg('log','Llamada ajax para mostrar el panel '+linkRama); Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz var rspPhrame; $.ajax( { //data: data, type: "POST", cache: false, url: linkRama, beforeSend: function() { gvh.showConsoleMsg('log',' ... Beforesend ...'); gvh.loading('on'); }, success: function(response) { gvh.showConsoleMsg('log',' ... Success: '+response); rspPhrame = JSON.parse(response); location.href = decodeURIComponent(rspPhrame.path); }, error:function( jqXHR, textStatus, errorThrown ) { gvh.showConsoleMsg('log',' ... # ERROR showLinkTree'); }, complete:function( jqXHR, textStatus, errorThrown ) { gvh.showConsoleMsg('log',' ... # COMPLETE showLinkTree'); gvh.loading('off'); } } ); } }; //gvh.showLinkTre /** * popupWindow() * FUNCIÓN: Abrir una ventana emergente como respuesta a evento sobre el DOM */ gvh.popupWindow = function( instanceSettings ) { gvh.showConsoleMsg('log',' REVIEW: popupWindow() - gvh_funciones.js'); gvh.showConsoleMsg('log',instanceSettings); var defaultSettings = { centerBrowser:0, // center window over browser window? {1 (YES) or 0 (NO)}. overrides top and left centerScreen:0, // center window over entire screen? {1 (YES) or 0 (NO)}. overrides top and left height:500, // sets the height in pixels of the window. left:0, // left position when the window appears. location:0, // determines whether the address bar is displayed {1 (YES) or 0 (NO)}. menubar:0, // determines whether the menu bar is displayed {1 (YES) or 0 (NO)}. resizable:0, // whether the window can be resized {1 (YES) or 0 (NO)}. Can also be overloaded using resizable. scrollbars:1, // determines whether scrollbars appear on the window {1 (YES) or 0 (NO)}. status:0, // whether a status line appears at the bottom of the window {1 (YES) or 0 (NO)}. width:500, // sets the width in pixels of the window. windowName:null, // name of window set from the name attribute of the element that invokes the click windowURL:null, // url used for the popup top:0, // top position when the window appears. toolbar:0 // determines whether a toolbar (includes the forward and back buttons) is displayed {1 (YES) or 0 (NO)}. }; gvh.loading( 'off' ); //settings = $.extend({}, defaultSettings, instanceSettings || {}); var height = instanceSettings.height; var width = instanceSettings.width; if( instanceSettings.height == '' ) { height = 500; } if( instanceSettings.width == '' ) { width = 500; } var windowFeatures = 'height=' + height + ',width=' + width + ',toolbar=' + defaultSettings.toolbar + ',scrollbars=' + defaultSettings.scrollbars + ',status=' + defaultSettings.status + ',resizable=' + defaultSettings.resizable + ',location=' + defaultSettings.location + ',menuBar=' + defaultSettings.menubar; var centeredY, centeredX; if(instanceSettings.centerBrowser) { if ($.browser.msie) {//hacked together for IE browsers centeredY = (window.screenTop - 120) + ((((document.documentElement.clientHeight + 120)/2) - (height/2))); centeredX = window.screenLeft + ((((document.body.offsetWidth + 20)/2) - (width/2))); } else { centeredY = window.screenY + (((window.outerHeight/2) - (height/2))); centeredX = window.screenX + (((window.outerWidth/2) - (width/2))); } var newWin = window.open(instanceSettings.windowURL, instanceSettings.windowName, windowFeatures+',left=' + centeredX +',top=' + centeredY); if(!newWin || newWin.closed || typeof newWin.closed=='undefined') { alert( 'El navegador está bloqueando las ventanas emergentes (pop-up). Por favor añada al dominio "gva.es" a la lista de excepciones del navegador.' ); } else { newWin.focus(); } } else if(instanceSettings.centerScreen) { centeredY = (screen.height - height)/2; centeredX = (screen.width - width)/2; var newWin = window.open(instanceSettings.windowURL, instanceSettings.windowName, windowFeatures+',left=' + centeredX +',top=' + centeredY); if(!newWin || newWin.closed || typeof newWin.closed=='undefined') { alert( 'El navegador está bloqueando las ventanas emergentes (pop-up). Por favor añada al dominio "gva.es" a la lista de excepciones del navegador.' ); } else { newWin.focus(); } } else { var newWin = window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + defaultSettings.left +',top=' + defaultSettings.top); if(!newWin || newWin.closed || typeof newWin.closed=='undefined') { alert( 'El navegador está bloqueando las ventanas emergentes (pop-up). Por favor añada al dominio "gva.es" a la lista de excepciones del navegador.' ); } else { newWin.focus(); } } return false; }; //gvh.popupWindow // Configuración de parámetros de listas select2 gvh.configParamsSelect2 = function( objElemento ) { /*var placeholderTXT = '...'; $.getJSON(gvh.urlLang, function(data) { placeholderTXT = desescapeIGEPjs(data['gvhlang_placeHolderList']); });*/ /*width: 'auto', closeOnSelect: true, placeholder: 'Selecciona una opción', allowClear: true, minimumResultsForSearch: 15, containerCssClass: 'tpx-select2-container', dropdownCssClass: 'tpx-select2-drop'*/ if (objElemento.attr('id') != undefined) { //var minim = objElemento.attr('data-gvhMinimResult'); var configParams = { placeholder: '...', width: 'auto', dropdownAutoWidth : 'true' }; // Si la lista es múltiple, configuramos el select2 como múltiple. var esMultiple = objElemento.attr('multiple'); if (esMultiple == 'multiple') { configParams.multiple = "true"; } // Si se permite limpiar la lista con un boton. /* var clear = 'false'; var gvhclear = objElemento.attr('data-gvhAllowClear'); if (gvhclear != '') { clear = gvhclear; } configParams.allowClear = clear; */ return configParams; } /* var minim = $('#'+defaults.id).attr('data-gvhMinimResult'); var configParams = { minimumResultsForSearch: minim }; }*/ };