diff --git a/ci4/app/Views/themes/vuexy/form/importador/catalogo/viewImportadorCatalogoTool.php b/ci4/app/Views/themes/vuexy/form/importador/catalogo/viewImportadorCatalogoTool.php index 2b1b3ea5..0bae91e3 100644 --- a/ci4/app/Views/themes/vuexy/form/importador/catalogo/viewImportadorCatalogoTool.php +++ b/ci4/app/Views/themes/vuexy/form/importador/catalogo/viewImportadorCatalogoTool.php @@ -28,7 +28,7 @@
-
diff --git a/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js b/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js index cf169fce..b8ab6d44 100644 --- a/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js +++ b/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js @@ -2,6 +2,8 @@ import Ajax from '../../../components/ajax.js'; document.addEventListener('DOMContentLoaded', function () { + document.getElementById('importBtn').disabled = true; + const TABLE_COLUMNS = ["input", "idlinea", "descripcion", "cnt_pedida", "precio_compra"]; let dataTable; @@ -35,6 +37,9 @@ document.addEventListener('DOMContentLoaded', function () { const file = e.target.files[0]; if (!file) return; + // Deshabilitar botón importar al comenzar nuevo procesamiento + document.getElementById('importBtn').disabled = true; + const reader = new FileReader(); reader.onload = function (e) { const data = new Uint8Array(e.target.result); @@ -51,6 +56,18 @@ document.addEventListener('DOMContentLoaded', function () { async function validateAndLoadDataTable(data) { if (data.length === 0) return; + // Mostrar loader (ajústalo según tu HTML) + Swal.fire({ + title: 'Procesando...', + text: 'Cargando datos del Excel...', + allowOutsideClick: false, + showDenyButton: false, + cancelButtonText: 'Cancelar', + didOpen: () => { + Swal.showLoading(); + } + }); + const headers = data[0].map(h => h.toString().trim()); const headerMap = {}; headers.forEach((name, idx) => { @@ -60,6 +77,7 @@ document.addEventListener('DOMContentLoaded', function () { const requiredColumns = ["idpedido", ...TABLE_COLUMNS]; const missing = requiredColumns.filter(col => !(col in headerMap)); if (missing.length > 0) { + Swal.close(); // Cierra el loader Swal.fire({ title: 'Error', text: 'Faltan las siguientes columnas: ' + missing.join(', '), @@ -127,6 +145,12 @@ document.addEventListener('DOMContentLoaded', function () { dataTable.clear().rows.add(rows).draw(); setupEventListeners(); + + Swal.close(); // Ocultar loader + + // Habilitar botón importar si hay filas válidas + const tieneFilas = rows.length > 0; + document.getElementById('importBtn').disabled = !tieneFilas; } async function validarFila(rowData) { @@ -176,7 +200,7 @@ document.addEventListener('DOMContentLoaded', function () { const skId = result.data?.sk_id ?? ''; // Actualizar campo "Notas" con el enlace - if (skUrl) { + if (skUrl) { const notasHtml = `Ver presupuesto (${skId})`; // La columna de notas es la posición 6 (índice 6) rowData[6] = notasHtml;