Añadidas modificaciones para PDF y bug detectado

This commit is contained in:
imnavajas
2025-05-09 13:54:41 +02:00
parent 43ae427137
commit 59609df471
4 changed files with 93 additions and 50 deletions

View File

@ -5,14 +5,37 @@ document.addEventListener('DOMContentLoaded', function () {
document.getElementById('xmlFile').addEventListener('change', function (e) {
const file = e.target.files[0];
if (!file) return;
if (!file || !file.name.endsWith('.zip')) {
Swal.fire('Error', 'Selecciona un archivo .zip válido.', 'error');
return;
}
const reader = new FileReader();
reader.onload = function (event) {
const xmlText = event.target.result;
parseXmlAndLoadTable(xmlText);
reader.onload = async function (event) {
try {
const zip = await JSZip.loadAsync(event.target.result);
const xmlFiles = Object.values(zip.files).filter(f =>
f.name.endsWith('.xml') && !f.name.startsWith('__MACOSX/')
);
if (xmlFiles.length === 0) {
Swal.fire('Error', 'El ZIP no contiene archivos XML.', 'error');
return;
}
for (const file of xmlFiles) {
const content = await file.async('text');
parseXmlAndLoadTable(content);
}
Swal.fire('Éxito', `${xmlFiles.length} archivos XML cargados.`, 'success');
} catch (err) {
console.error(err);
Swal.fire('Error', 'No se pudo procesar el ZIP.', 'error');
}
};
reader.readAsText(file);
reader.readAsArrayBuffer(file);
});
function parseXmlAndLoadTable(xmlText) {
@ -41,9 +64,14 @@ document.addEventListener('DOMContentLoaded', function () {
};
const products = Array.from(xmlDoc.getElementsByTagName('product'));
productosOriginales = products.map((prod, idx) => ({ index: idx, data: prod }));
const offset = productosOriginales.length;
products.forEach((prod, idx) => {
productosOriginales.push({ index: offset + idx, data: prod });
});
const rows = products.map((product, index) => {
const globalIndex = offset + index;
const id = product.querySelector('id')?.textContent ?? '';
const title = product.querySelector('title')?.textContent ?? '';
const pages = product.querySelector('body > pages')?.textContent ?? '';
@ -105,31 +133,36 @@ document.addEventListener('DOMContentLoaded', function () {
$('#xmlTable').html(headerHtml);
}
dataTable = $('#xmlTable').DataTable({
destroy: true,
data: rows,
orderCellsTop: true,
responsive: true,
scrollX: true,
dom: 'lfrtip',
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
order: [[1, 'asc']]
});
if (!dataTable) {
dataTable = $('#xmlTable').DataTable({
destroy: true,
data: rows,
orderCellsTop: true,
responsive: true,
scrollX: true,
dom: 'lfrtip',
language: {
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
order: [[1, 'asc']]
});
$('#xmlTable thead tr:eq(1) th').each(function (i) {
if (![0, 7, 8].includes(i)) {
$(this).html('<input type="text" class="form-control form-control-sm" placeholder="Filtrar..." />');
$('input', this).on('keyup change', function () {
if (dataTable.column(i).search() !== this.value) {
dataTable.column(i).search(this.value).draw();
}
});
}
});
$('#xmlTable thead tr:eq(1) th').each(function (i) {
if (![0, 7, 8].includes(i)) {
$(this).html('<input type="text" class="form-control form-control-sm" placeholder="Filtrar..." />');
$('input', this).on('keyup change', function () {
if (dataTable.column(i).search() !== this.value) {
dataTable.column(i).search(this.value).draw();
}
});
}
});
setupEventListeners();
setupEventListeners();
} else {
rows.forEach(row => dataTable.row.add(row));
dataTable.draw(false);
}
}
function setupEventListeners() {
@ -258,9 +291,9 @@ document.addEventListener('DOMContentLoaded', function () {
});
return;
}
const filasSeleccionadas = [];
dataTable.rows().every(function () {
const node = this.node();
const checkbox = $(node).find('input.select-row');
@ -268,7 +301,7 @@ document.addEventListener('DOMContentLoaded', function () {
filasSeleccionadas.push(this.index());
}
});
if (filasSeleccionadas.length === 0) {
Swal.fire({
title: 'Atención',
@ -279,7 +312,7 @@ document.addEventListener('DOMContentLoaded', function () {
});
return;
}
Swal.fire({
title: '¿Importar seleccionados?',
text: `Se van a importar ${filasSeleccionadas.length} filas.`,
@ -294,11 +327,11 @@ document.addEventListener('DOMContentLoaded', function () {
}
}).then(async (result) => {
if (!result.isConfirmed) return;
for (const i of filasSeleccionadas) {
const productXml = productosOriginales.find(p => p.index === i)?.data;
if (!productXml) continue;
try {
const response = await fetch('/importador/bubok/importar-fila', {
method: 'POST',
@ -311,11 +344,11 @@ document.addEventListener('DOMContentLoaded', function () {
pedido: datosComunesPedido
})
});
const result = await response.json();
const rowNode = dataTable.row(i).node();
const rowData = dataTable.row(i).data();
if (response.ok && result.status === 200) {
const skUrl = result.data?.sk_url?.replace('presupuestocliente', 'presupuestoadmin') ?? null;
rowData[7] = skUrl
@ -324,13 +357,13 @@ document.addEventListener('DOMContentLoaded', function () {
} else {
rowData[7] = `<span class="badge bg-danger">${result.message ?? 'Error desconocido'}</span>`;
}
dataTable.row(rowNode).data(rowData).draw(false);
} catch (error) {
console.error('Importación fallida:', error);
}
}
Swal.fire({
title: 'Importación finalizada',
text: 'Se han procesado todas las filas seleccionadas.',
@ -340,5 +373,5 @@ document.addEventListener('DOMContentLoaded', function () {
});
});
});
});