/* Codificación UTF-8 * Métodos necesarios para paginar en un tabular o una ficha */ /* FUNCIONES: * blockRegPagina(raizJSON,pag) * setStateFieldsHTML_paginar(raizJSON, panel, claseManejadora, row) * setValueFieldsHTML_paginar(raizJSON, panel, claseManejadora, row) * paginar(pagSource, pagTarget, panel, panelJSON, claseManejadora) */ var gvh = gvh || {}; +function($) { 'use strict'; /** * blockRegPagina(): Devuelve el intervalo de registros correspondientes a una página de un panel tabular * @access private * @var claseManejadora: clase del panel sobre el que queremos calcular el índice * @var panel: tipo de panel sobre el que se está trabajando ['lis','lisDetalle'] * @var row: fila seleccionada del panel */ gvh.blockRegPagina = function(raizJSON,pag) { console.log(' ** blockRegPagina() '); var rowsPag = gvh.getRowsPag(raizJSON); var numReg = gvh.getNumReg(raizJSON); var numPagTotal = Math.ceil(numReg/rowsPag); var bloque = []; var regIni = 0; var regFin = parseInt(rowsPag)-1; if (pag > 0) { regIni = pag*(rowsPag); regFin = parseInt(regIni)+parseInt(rowsPag-1); } bloque['ini'] = regIni; bloque['fin'] = regFin; return bloque; } /** * setStateFieldsHTML_paginar(): modificar el aspecto visual del cambio conforme al estado correspondiente * @access private * @var claseManejadora: clase del panel sobre el que queremos calcular el índice * @var panel: tipo de panel sobre el que se está trabajando ['lis','lisDetalle'] * @var row: fila seleccionada del panel */ gvh.setStateFieldsHTML_paginar = function(raizJSON, panel, claseManejadora, row) { var panelJSON = panel.substr( 0, 3 ); var stateRow = gvh.getStateReg(raizJSON,row,'state'); var selectedRow = gvh.getSelectedReg(raizJSON,row); var numReg = gvh.getNumReg(raizJSON); var sufijo = panel+'_'+row; console.log(' ** gvh_paginar.js - setStateFieldsHTML_paginar() '); if (row < numReg) // Comprobación necesaria cuando es un panel tabular, en panel ficha siempre se cumplirá { if (panelJSON == 'lis') { var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijo = panel+'_'+rowTab; } $('[id$='+sufijo+']').filter('[id^=cam_]').filter('[data-gvhClaseManejadora='+claseManejadora+']').map(function() { var field = $(this); var id = $(this).attr('id'); var stateField = $(this).attr('data-gvhState'); switch(stateRow) { case 'modificada': if (stateField == 'edit') { field.prop('readonly',false); field.prop('disabled',false); //field.removeClass('edit'); field.removeClass('new'); field.removeClass('delete'); field.addClass('modify'); } break; case 'borrada': field.prop('readonly',true); field.prop('disabled',true); field.removeClass('edit'); field.removeClass('new'); field.addClass('delete'); break; case 'nada': field.prop('readonly',true); field.removeClass('modify'); field.removeClass('new'); field.removeClass('delete'); field.addClass('edit'); break; case 'selected': if (gvh.getStatePanel( panel ) == 'W') { field.prop('readonly',true); field.removeClass('modify'); field.removeClass('new'); field.removeClass('delete'); field.addClass('edit'); } break; default: field.prop('readonly',true); field.removeClass('new'); field.removeClass('modify'); field.removeClass('delete'); field.addClass('edit'); break; } }); //fin switch // Tratamiento del editor enriquecido porque tiene otro prefijo distinto de 'cam__' if ((stateRow == 'modificada') && (panelJSON == 'edi')) { editor = $('div[id^=editor_cam_]').filter('[data-gvhClaseManejadora='+claseManejadora+']'); if (editor.length > 0) { editor.filter('[id$='+panel+']').filter('[data-gvhPanelOn='+panel+']').filter('[data-gvhstate=edit]').each(function() { $(this).attr('contenteditable','true'); }) } } //if // Capa IGEPVisible var idIgepVisible = 'IGEPVisible'+sufijo; var IgepVisible = $('#'+idIgepVisible).filter('[data-gvhClaseManejadora='+claseManejadora+']'); if (IgepVisible.is(':hidden')) { IgepVisible.show(); } if (panelJSON == 'lis') { var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijoRow = panel+'_'+rowTab; $('tr[id='+sufijoRow+']').attr('data-gvhStateRow',stateRow); // Color de la fila var fila = $('#'+sufijoRow).filter('[data-gvhClaseManejadora='+claseManejadora+']'); var color = gvh.getClassRow(raizJSON,row); var cssRow = fila.attr('class'); fila.removeClass(cssRow); fila.addClass(color); // Checkbox de la fila //var selectedJSONDecode = gvh.getStateReg(raizJSON,row,'selected'); var selectedJSONDecode = gvh.getSelectedReg(raizJSON,row); if (selectedJSONDecode == 'undefined') selectedJSONDecode = false; var checkFila = $('#check_'+sufijoRow).filter('[data-gvhClaseManejadora='+claseManejadora+']'); if (checkFila.length < 0) { checkFila = $('#vsCheck_'+sufijo); } if (selectedJSONDecode == 'selected') { checkFila.prop('checked',true); fila.addClass('rowOn'); fila.removeClass('none'); } else { checkFila.prop('checked',false); fila.removeClass('rowOn'); if (color == '') fila.addClass('none'); } } //if panel tabular } else if (panelJSON == 'lis') { var jsonReg = gvh.getFieldsRow(raizJSON,row); var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijoRow = panel+'_'+rowTab; for (var field in jsonReg) { var idIGEPVisible = "IGEPvisiblecam___"+field+"___"+sufijoRow; $('span[id='+idIGEPVisible+']').filter('[data-gvhClaseManejadora='+claseManejadora+']').hide(); $('#'+sufijoRow).filter('[data-gvhClaseManejadora='+claseManejadora+']').removeClass(); $('#'+sufijoRow).filter('[data-gvhClaseManejadora='+claseManejadora+']').addClass('rowNoData'); } } // else filas inserción - panel tabular }; /** * setValueFieldsHTML_paginar(): cambia los valores de los campos al paginar * @access private * @var claseManejadora: clase del panel sobre el que queremos calcular el índice * @var panel: tipo de panel sobre el que se está trabajando ['lis','lisDetalle'] * @var row: fila seleccionada del panel */ gvh.setValueFieldsHTML_paginar = function(raizJSON, panel, claseManejadora, row) { console.log(' ** gvh_paginar.js - setValueFieldsHTML_paginar() '); var sufijo = panel+'_'+row; var panelJSON = panel.substr( 0, 3 ); var stateRow = gvh.getStateReg(raizJSON,row,'state'); var numReg = gvh.getNumReg(raizJSON); if (panelJSON == 'lis') { var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijoRow = panel+'_'+rowTab; } if (row < numReg) // Comprobación necesaria cuando es un panel tabular, en panel ficha siempre se cumplirá { if (panelJSON == 'lis') { var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijo = panel+'_'+rowTab; } var jsonReg = gvh.getFieldsJSON(raizJSON,row); if (panelJSON == 'lis') { var idIGEPVisibleRow = "IGEPVisible"+sufijoRow; if ($('#'+idIGEPVisibleRow).is(':hidden')) { $('#'+idIGEPVisibleRow).show(); } } for (var field in jsonReg) // Recorremos los campos correspondientes al registro para obtener su valor y asignarlo al componente HTML { // Comprobamos si el campo es visible o no var visible = gvh.isVisible(raizJSON,field,row); var idIGEPVisible = "IGEPVisiblecam___"+field+"___"+sufijoRow; if (visible) { if ($('#'+idIGEPVisible).is(':hidden')) { $('#'+idIGEPVisible).show(); } } else { if ($('#'+idIGEPVisible).is(':visible')) { $('#'+idIGEPVisible).hide(); } } var idCampo = 'cam___'+field+'___'+panel; var idIcono = 'icon_cam___'+field+'___'+panel; if (panelJSON == 'lis') { var idCampo = 'cam___'+field+'___'+panel+'_'+rowTab; var idIcono = 'icon_cam___'+field+'___'+panel+'_'+rowTab; } var css = jsonReg[field]['class']; var plugin = jsonReg[field]['CWPlugin']; var valueJSONDecode = jsonReg[field]['value']; if ((valueJSONDecode == 'undefined')) valueJSONDecode = ''; switch(plugin) { case 'cwcampotexto': var inputField = $('input[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); inputField.val(valueJSONDecode); inputField.attr('value',valueJSONDecode); inputField.attr('title',valueJSONDecode); // css campo var tipo = inputField.attr('type'); if (tipo != 'hidden') { var cssField = inputField.attr('class'); if (cssField != css) { inputField.removeClass(); inputField.addClass(css); } } break; case 'cwareatexto': case 'cwrichareatexto': var inputField = $('textarea[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); inputField.val(valueJSONDecode); inputField.attr('value',valueJSONDecode); inputField.attr('title',valueJSONDecode); // css campo var tipo = inputField.attr('type'); if (tipo != 'hidden') { var cssField = inputField.attr('class'); if (cssField != css) { inputField.removeClass(); inputField.addClass(css); } } break; case 'cwlista': case 'cwlista select2': var inputField = $('select[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); console.log('cwlista '+idCampo); //console.log(field+' '+row); var dependencia = gvh.isDependenceList(raizJSON,field,row); //console.log(' es dependiente de '+dependencia); if ((dependencia != undefined) && (dependencia != 'NO')) // es una lista dependiente { var listOptions = jsonReg[field]['lista']; /*console.log(listOptions); console.log(raizJSON);*/ if (listOptions.length > 0) { if (plugin == 'cwlista') gvh.addList(inputField, listOptions, valueJSONDecode); else gvh.addListSelect2(inputField, listOptions, valueJSONDecode); } } else { var jsonListaField = gvh.getFieldList(raizJSON,field,false); //console.log(jsonListaField); var idCampo = inputField.attr('id'); $('#'+idCampo+' option:selected').attr('selected',false); $('#'+idCampo+' option[value="'+valueJSONDecode+'"]').prop("selected", true); $('#'+idCampo+' option[value="'+valueJSONDecode+'"]').attr("selected", true); } // Al paginar podemos pasar de la última página que no sea completa a una página completa, hay que volver a rellenar los valores (option) de la lista if (panel == 'lis') { var listOptions = ''; if (inputField.length == 0) { if ((dependencia != undefined) && (dependencia != 'NO')) { // Si la lista es dependiente, las opciones de la lista están en el campo listOptions = jsonReg[field]['lista']; } else { // Si la lista no es dependiente, las opciones están en la zona común listOptions = jsonListaField[field]; } if ((listOptions != '') && (listOptions.length > 0)) { if (plugin == 'cwlista') gvh.addList(inputField, listOptions, valueJSONDecode); else gvh.addListSelect2(inputField, listOptions, valueJSONDecode); } } else { var dependencia = jsonReg[field]['dependence']; if ((dependencia != undefined) && (dependencia != 'NO')) { //Hay dependencia listOptions = jsonReg[field]['lista']; if (listOptions.length > 0) { if (plugin == 'cwlista') gvh.addList(inputField, listOptions, valueJSONDecode); else gvh.addListSelect2(inputField, listOptions, valueJSONDecode); } } else { $('#'+idCampo+' option[value="'+valueJSONDecode+'"]').prop("selected", true); } } } var cssField = inputField.attr('class'); if (cssField != css) { inputField.removeClass(); inputField.addClass(css); } break; case 'cwbotontooltip': break; case 'cwcheckbox': var inputField = $('input[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); var valueJSONDecode = jsonReg[field]['checked']; if ((valueJSONDecode == 'undefined') || (valueJSONDecode == 'false')) { inputField.prop('checked',false); } else { inputField.prop('checked',true); } var cssField = inputField.attr('class'); if (cssField != css) { inputField.removeClass(); inputField.addClass(css); } break; case 'cwimagen': break; case 'cwinformation': // Botón tooltip con información var button = $('button[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); button.attr('data-content', valueJSONDecode); var cssField = button.attr('class'); if (cssField != css) { button.removeClass(); button.addClass(css); } if ((color != '') && (color != undefined)) { button.addClass(color); } // icono del botón var iconJSON = jsonReg[field]['icon']; if (iconJSON == 'undefined') iconJSON = ''; var idIconButton = 'iconInf_cam___'+field+'___'+sufijo; iconButton = $('#'+idIconButton).filter('[data-gvhClaseManejadora='+claseManejadora+']'); iconButton.removeClass(); iconButton.addClass(iconJSON); break; case 'cwlabel icon': // Label que solamente es un icono var inputField = $('span[id*='+idIcono+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); inputField.removeClass(); inputField.addClass(valueJSONDecode); break; case 'cwlabel': var inputField = $('label[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); if (inputField.length > 0) { inputField.html(valueJSONDecode); inputField.attr('value',valueJSONDecode); cssField = inputField.attr('class'); if (cssField != css) { inputField.removeClass(); inputField.addClass(css); } } // El label puede ir acompañado de un icono var icono = $('#'+idIcono).filter('[data-gvhClaseManejadora='+claseManejadora+']'); if (icono.length > 0) { try { var iconJSONDecode = decodeURIComponent(escape(jsonReg[field]['icon'])); } catch(e) { var iconJSONDecode = jsonReg[field]['icon']; } if (iconJSONDecode == 'undefined') iconJSONDecode = ''; icono.removeClass(); icono.addClass(iconJSONDecode); } break; case 'cwlistaradio': // RADIOBUTTON var radio = $('input:radio[name*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseManejadora+']'); radio.filter('[value='+valueJSONDecode+']').prop('checked',true); var cssField = radio.attr('class'); if (cssField != css) { radio.removeClass(); radio.addClass(css); } break; default: break; } } } else if (panelJSON == 'lis') { var jsonReg = gvh.getFieldsRow(raizJSON,row); var rowsPag = gvh.getRowsPag(raizJSON); var rowTab = row%rowsPag; var sufijoRow = panel+'_'+rowTab; for (var field in jsonReg) { var idCampo = "cam___"+field+"___"+panel+"_"+rowTab; var css = jsonReg[field]['class']; var plugin = jsonReg[field]['CWPlugin']; var inputField = $('#'+idCampo).filter('[data-gvhClaseManejadora='+claseManejadora+']'); var idIGEPVisible = "IGEPVisiblecam___"+field+"___"+sufijoRow; if ($('#'+idIGEPVisible).is(':visible')) { $('#'+idIGEPVisible).hide(); } var idIGEPVisibleRow = "IGEPVisible"+sufijoRow; if ($('#'+idIGEPVisibleRow).is(':visible')) { $('#'+idIGEPVisibleRow).hide(); } } } } /** * paginar(): Al cambiar de página debemos volver a asignar los valores que vienen en el JSON a sus respectivos campos * @access private * @var pagSource: * @var pagTarget: * @var panel: * @var claseManejadora: */ gvh.paginar = function(pagSource, pagTarget, panel, claseManejadora) { console.log(' ************************************'); console.log(' ** paginar() - pag: '+pagTarget+' panel: '+panel+' claseManejadora '+claseManejadora); var bloque = []; var panelJSON = panel.substr(0,3); var raizJSON = gvh.getRoot(claseManejadora,panelJSON); gvh.setPagActive(raizJSON,pagTarget); var numReg = gvh.getNumReg(raizJSON); var rowsPag = gvh.getRowsPag(raizJSON); var valueJSONDecode = ''; if ((panel == 'lis') || (panel == 'lisDetalle')) { bloque = gvh.blockRegPagina(raizJSON,pagTarget); var regIni = bloque['ini']; var regFin = bloque['fin']; console.log(' ... Panel tabular desde '+regIni+' a '+regFin); for(var i=regIni;i<=regFin;i++) { gvh.setStateFieldsHTML_paginar(raizJSON, panel, claseManejadora, i); gvh.setValueFieldsHTML_paginar(raizJSON, panel, claseManejadora, i); } } else { var vFields = gvh.getFieldsRow(raizJSON,pagTarget); var sufijo = panel+'_'+pagTarget; var state = gvh.getStateReg(raizJSON,pagTarget,'state'); console.log(' ... Panel registro '); for(var i=0;i