/* 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);