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;