Files
Jorge Luis caudillo esparza 0776ed8c59 Cambios en Gis lotes
2026-10-03 14:43:42 -07:00

328 lines
14 KiB
JavaScript

(function (ventana, documento, $) {
'use strict';
if (ventana.SIGLotesEtapa) {
return;
}
var instancias = Object.create(null);
var resguardando = false;
function buscarPropietario(selector, clave) {
return $(selector).filter(function () {
return $(this).attr('data-lotes-propietario') === clave;
}).first();
}
function redimensionar(estado) {
if (estado.mapa && ventana.SIGVisorGis) {
ventana.SIGVisorGis.redimensionar(estado.mapa);
}
}
function devolverMapa(estado) {
if (estado.mapa && estado.origen.length) {
estado.mapa.detach().appendTo(estado.origen);
estado.origen.removeClass('sig-lotes-mapa-reservado').css('height', '');
redimensionar(estado);
}
}
function moverAlPanel(estado) {
if (!estado.mapa || !estado.mapa.length) {
return;
}
if (!estado.origen.hasClass('sig-lotes-mapa-reservado')) {
estado.altoOrigen = estado.origen.outerHeight();
}
estado.origen.height(estado.altoOrigen).addClass('sig-lotes-mapa-reservado');
estado.mapa.detach().appendTo(estado.panel.find('[data-lotes-mapa-panel]'));
redimensionar(estado);
}
function actualizarSeleccion(estado) {
var raiz = buscarPropietario('.sig-lotes-etapa', estado.clave);
raiz.find('[data-lotes-fila]').each(function () {
var seleccionada = String($(this).attr('data-lotes-fila')) === String(estado.lote || '');
$(this).toggleClass('sig-lotes-fila-seleccionada', seleccionada)
.attr('aria-selected', seleccionada ? 'true' : 'false');
});
var fila = raiz.find('[data-lotes-fila]').filter(function () {
return String($(this).attr('data-lotes-fila')) === String(estado.lote || '');
}).first();
var contenedor = estado.panel.find('[data-lotes-menu-panel]').empty();
var acciones = fila.find('.sig-menu-acciones').clone(false);
// Los enlaces conservan el destino de postback del grid y sus permisos de servidor.
acciones.find('[id]').removeAttr('id');
acciones.find('.sig-menu-acciones-boton').attr('aria-expanded', 'false');
acciones.find('.sig-lotes-ver-mapa').closest('li').remove();
acciones.appendTo(contenedor);
}
function consultarDetalle(estado) {
if (!estado.panel.hasClass('sig_panel_open') || !estado.pendiente) {
return;
}
var gestor = ventana.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager.getInstance();
if (gestor && gestor.get_isInAsyncPostBack()) {
return;
}
var boton = documento.getElementById(estado.panel.attr('data-lotes-consultar'));
var campo = documento.getElementById(estado.panel.attr('data-lotes-campo'));
if (!boton || !campo) {
return;
}
campo.value = estado.pendiente;
estado.pendiente = null;
boton.click();
}
function abrirDetalle(estado, lote) {
estado.panel[0].click();
estado.lote = lote.CveFraccionamientoLote;
estado.vinculo = lote.GISPoligonoClave;
estado.panel.find('[data-lotes-titulo]').text(lote.Nombre || ('Lote ' + estado.lote));
estado.panel.find('[data-lotes-estado]').text('Consultando información del lote...');
estado.panel.find('[data-lotes-detalle]').hide();
estado.panel.find('[data-lotes-desvincular]').toggle(!!estado.vinculo);
actualizarSeleccion(estado);
ventana.SIGPanelLateral.abrir(estado.panel);
moverAlPanel(estado);
estado.pendiente = estado.lote;
consultarDetalle(estado);
}
function conectarMapa(estado) {
if (!estado.mapa || estado.mapa.is('[data-sig-lotes-mapa-inicializado]')) {
return;
}
estado.mapa.on('sig:loteSeleccionado', function (evento, lote) {
abrirDetalle(estado, lote);
});
estado.mapa.attr('data-sig-lotes-mapa-inicializado', '1');
}
function conectarPanel(estado) {
var panel = estado.panel;
if (panel.is('[data-sig-lotes-panel-inicializado]')) {
return;
}
estado.anclaPanel = $('<span class="sig-lotes-ancla-panel" hidden></span>').insertBefore(panel);
// El origen del panel también queda fuera de los UpdatePanel.
panel.detach().appendTo($('form').first());
panel.on('cerrado.sig.panel', function () {
estado.pendiente = null;
if (!resguardando) {
devolverMapa(estado);
}
});
panel.on('click.sigLotes', '[data-lotes-desvincular]', function () {
var boton = $(this);
if (!estado.vinculo || boton.prop('disabled')) {
return;
}
boton.prop('disabled', true);
var lote = estado.lote;
var clave = estado.vinculo;
panel.find('[data-lotes-estado]').text('Desvinculando lote...');
$.ajax({
url: estado.mapa.attr('data-gis-url'),
type: 'POST',
dataType: 'json',
timeout: 30000,
data: {
metodo: 'DesvincularLote',
CveFraccionamientoEtapa: estado.etapa,
CveFraccionamientoLote: lote,
ClavePoligono: clave
}
}).done(function (respuesta) {
if (!respuesta.success) {
panel.find('[data-lotes-estado]').text(respuesta.message || 'No fue posible desvincular.');
return;
}
if (estado.lote === lote && estado.vinculo === clave) {
estado.vinculo = '';
boton.hide();
panel.find('[data-lotes-estado]').text('Lote desvinculado. Puede seleccionar el polígono para vincular otro lote.');
estado.lote = null;
actualizarSeleccion(estado);
}
ventana.SIGVisorGis.limpiarSeleccion(estado.mapa, lote);
}).fail(function (respuesta) {
panel.find('[data-lotes-estado]').text(
respuesta.responseJSON && respuesta.responseJSON.message ||
'No se pudo confirmar la desvinculación. Seleccione nuevamente el polígono.');
}).always(function () {
boton.prop('disabled', false);
});
});
panel.attr('data-sig-lotes-panel-inicializado', '1');
}
function restaurarMapas() {
if (resguardando) {
return;
}
$('.sig-lotes-mapa-origen').each(function () {
var origen = $(this);
var clave = origen.attr('data-lotes-propietario');
var etapa = origen.attr('data-lotes-etapa');
var estado = instancias[clave];
var paneles = $('.sig-lotes-panel').filter(function () {
return $(this).attr('data-lotes-propietario') === clave;
});
if (!estado) {
estado = instancias[clave] = { clave: clave, etapa: etapa, panel: paneles.first(), origen: origen };
}
var nuevoPanel = paneles.filter(function () {
return this !== estado.panel[0];
}).first();
if (nuevoPanel.length) {
ventana.SIGPanelLateral.cerrar(estado.panel);
estado.panel.remove();
estado.panel = nuevoPanel;
}
var reemplazoOrigen = estado.origen[0] !== origen[0];
estado.origen = origen;
var nuevoMapa = origen.find('.sig-visor-gis').first();
if (estado.etapa !== etapa || (reemplazoOrigen && !nuevoMapa.length)) {
ventana.SIGPanelLateral.cerrar(estado.panel);
if (estado.mapa) {
estado.mapa.remove();
}
estado.mapa = null;
estado.lote = null;
estado.pendiente = null;
estado.reabrirPanel = false;
estado.etapa = etapa;
origen.removeClass('sig-lotes-mapa-reservado').css('height', '');
}
if (estado.mapa && nuevoMapa.length && nuevoMapa[0] !== estado.mapa[0]) {
nuevoMapa.remove();
}
if (!estado.mapa || !estado.mapa.length) {
estado.mapa = nuevoMapa;
}
conectarPanel(estado);
conectarMapa(estado);
if (estado.reabrirPanel) {
estado.reabrirPanel = false;
ventana.SIGPanelLateral.abrir(estado.panel);
}
if (estado.mapa) {
estado.mapa.removeClass('sig-lotes-mapa-resguardado');
}
if (estado.panel.hasClass('sig_panel_open')) {
moverAlPanel(estado);
} else {
devolverMapa(estado);
}
actualizarSeleccion(estado);
});
$.each(instancias, function (clave, estado) {
if (buscarPropietario('.sig-lotes-mapa-origen', clave).length) {
return;
}
ventana.SIGPanelLateral.cerrar(estado.panel);
if (estado.mapa) {
estado.mapa.remove();
}
estado.panel.remove();
delete instancias[clave];
});
}
function resguardarMapas(emisor, argumentos) {
// pageLoading ocurre después de recibir la respuesta y antes de reemplazar el DOM.
resguardando = true;
$.each(instancias, function (clave, estado) {
if (!estado.mapa || !estado.mapa.length) {
return;
}
estado.altoOrigen = estado.origen.hasClass('sig-lotes-mapa-reservado') ?
estado.altoOrigen : estado.origen.outerHeight();
estado.origen.height(estado.altoOrigen).addClass('sig-lotes-mapa-reservado');
estado.mapa.detach().appendTo($('form').first()).addClass('sig-lotes-mapa-resguardado');
});
var reemplazos = argumentos && argumentos.get_panelsUpdating ? argumentos.get_panelsUpdating() : [];
var eliminados = argumentos && argumentos.get_panelsDeleting ? argumentos.get_panelsDeleting() : [];
$.each(instancias, function (clave, estado) {
var ancla = estado.anclaPanel && estado.anclaPanel[0];
var reemplazaPanel = $.grep([].concat(reemplazos, eliminados), function (panel) {
return ancla && (panel === ancla || $.contains(panel, ancla));
}).length > 0;
if (reemplazaPanel) {
// El mapa ya está a salvo. WebForms debe disponer las pestañas y controles
// del panel que el servidor va a reemplazar para no duplicar componentes AJAX.
estado.reabrirPanel = estado.panel.hasClass('sig_panel_open');
ventana.SIGPanelLateral.cerrar(estado.panel);
estado.panel.detach().insertAfter(estado.anclaPanel);
}
});
resguardando = false;
}
function inicializar() {
restaurarMapas();
$.each(instancias, function (clave, estado) {
if (estado.mapa) {
estado.mapa.removeClass('sig-lotes-mapa-resguardado');
}
var contenido = estado.panel.find('[data-lotes-detalle]');
var coincide = !estado.pendiente &&
String(contenido.attr('data-lotes-detalle')) === String(estado.lote);
contenido.toggle(coincide);
if (coincide) {
estado.panel.find('[data-lotes-estado]').text('');
} else if (estado.lote && !estado.pendiente && estado.panel.hasClass('sig_panel_open')) {
estado.panel.find('[data-lotes-estado]').text('No fue posible mostrar el lote. Selecciónelo nuevamente.');
}
ventana.setTimeout(function () { consultarDetalle(estado); }, 0);
});
$('.sig-lotes-etapa .select2me:not([data-sig-lotes-select-inicializado])').each(function () {
var elemento = $(this);
if (typeof elemento.select2 !== 'function') {
return;
}
if (!elemento.data('select2') && !elemento.hasClass('select2-hidden-accessible')) {
elemento.select2({ width: '100%' });
}
elemento.attr('data-sig-lotes-select-inicializado', '1');
});
}
$(documento).on('click.sigLotes', '.sig-lotes-ver-mapa', function (evento) {
evento.preventDefault();
var boton = $(this);
var lote = boton.attr('data-lote');
// El menú puede estar temporalmente en el formulario, fuera del grid.
var estado;
$.each(instancias, function (clave, candidata) {
if (buscarPropietario('.sig-lotes-etapa', clave)
.find('[data-lotes-fila="' + lote + '"]').length) {
estado = candidata;
return false;
}
});
if (!estado || !estado.mapa || !estado.mapa.length) {
if (ventana.SIGAlerts) {
ventana.SIGAlerts.enqueue({ type: 4, message: 'La etapa no tiene un mapa disponible.' });
}
return;
}
ventana.SIGVisorGis.verLote(estado.mapa, lote);
});
ventana.SIGLotesEtapa = {
inicializar: inicializar,
restaurarMapas: restaurarMapas
};
$(inicializar);
if (ventana.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager) {
var gestor = Sys.WebForms.PageRequestManager.getInstance();
gestor.add_pageLoading(resguardarMapas);
gestor.add_endRequest(inicializar);
}
}(window, document, jQuery));