diff --git a/app/templates/automation.html b/app/templates/automation.html index 9de863d..ea3273e 100644 --- a/app/templates/automation.html +++ b/app/templates/automation.html @@ -125,6 +125,10 @@ class="px-3 py-1 text-xs font-medium rounded-md transition-all"> Errores + + Ya existe + Enviados @@ -499,26 +503,27 @@ function renderResults(r) { _resultAll = []; activeSteps.forEach(s => { (r[s.resultKey].detalle || []).forEach((item, i) => { - _resultAll.push({ item, step: s, idx: `${s.pasoKey}-${i}`, ok: item.ok }); + const st = item.status || (item.ok ? 'success' : 'error'); + _resultAll.push({ item, step: s, idx: `${s.pasoKey}-${i}`, status: st }); }); }); - const errCount = _resultAll.filter(e => !e.ok).length; - const okCount = _resultAll.filter(e => e.ok).length; + const errCount = _resultAll.filter(e => e.status === 'error').length; + const warnCount = _resultAll.filter(e => e.status === 'warning').length; + const okCount = _resultAll.filter(e => e.status === 'success').length; - // Filter counts - document.getElementById('filter-cnt-errores').textContent = `(${errCount})`; - document.getElementById('filter-cnt-enviados').textContent = `(${okCount})`; - document.getElementById('filter-cnt-todos').textContent = `(${_resultAll.length})`; + document.getElementById('filter-cnt-errores').textContent = `(${errCount})`; + document.getElementById('filter-cnt-advertencias').textContent = `(${warnCount})`; + document.getElementById('filter-cnt-enviados').textContent = `(${okCount})`; + document.getElementById('filter-cnt-todos').textContent = `(${_resultAll.length})`; - // Default filter: errores si hay, si no todos - const defaultFilter = errCount > 0 ? 'errores' : 'todos'; + const defaultFilter = errCount > 0 ? 'errores' : warnCount > 0 ? 'advertencias' : 'todos'; setResultFilter(defaultFilter); document.getElementById('results-section').classList.remove('hidden'); showToast( - errCount === 0 ? `Envío completado · ${okCount} registros OK` : `${errCount} fallo(s) · ${okCount} OK`, + errCount === 0 ? `Envío completado · ${okCount} OK · ${warnCount} ya existían` : `${errCount} fallo(s) · ${okCount} OK · ${warnCount} ya existían`, errCount === 0 ? 'success' : 'warning' ); } @@ -529,32 +534,34 @@ function setResultFilter(filter) { // Actualizar estilos de botones const configs = { - errores: { active: 'bg-white shadow text-red-600', inactive: 'text-gray-500 hover:text-gray-700' }, - enviados: { active: 'bg-white shadow text-green-600', inactive: 'text-gray-500 hover:text-gray-700' }, - todos: { active: 'bg-white shadow text-gray-700', inactive: 'text-gray-500 hover:text-gray-700' }, + errores: { active: 'bg-white shadow text-red-600', inactive: 'text-gray-500 hover:text-gray-700' }, + advertencias: { active: 'bg-white shadow text-yellow-600', inactive: 'text-gray-500 hover:text-gray-700' }, + enviados: { active: 'bg-white shadow text-green-600', inactive: 'text-gray-500 hover:text-gray-700' }, + todos: { active: 'bg-white shadow text-gray-700', inactive: 'text-gray-500 hover:text-gray-700' }, }; - ['errores','enviados','todos'].forEach(f => { + ['errores','advertencias','enviados','todos'].forEach(f => { const btn = document.getElementById(`filter-btn-${f}`); const base = 'px-3 py-1 text-xs font-medium rounded-md transition-all'; btn.className = `${base} ${f === filter ? configs[f].active : configs[f].inactive}`; }); - // Filtrar items let items; - if (filter === 'errores') items = _resultAll.filter(e => !e.ok); - else if (filter === 'enviados') items = _resultAll.filter(e => e.ok); + if (filter === 'errores') items = _resultAll.filter(e => e.status === 'error'); + else if (filter === 'advertencias') items = _resultAll.filter(e => e.status === 'warning'); + else if (filter === 'enviados') items = _resultAll.filter(e => e.status === 'success'); else items = _resultAll; const listEl = document.getElementById('results-list'); if (items.length === 0) { const msg = filter === 'errores' ? 'Sin errores — todo enviado correctamente' : + filter === 'advertencias' ? 'Sin advertencias' : filter === 'enviados' ? 'No hay registros enviados' : 'Sin resultados'; listEl.innerHTML = `${msg}`; return; } - listEl.innerHTML = items.map(({ item, step: s, idx, ok }) => { + listEl.innerHTML = items.map(({ item, step: s, idx, status }) => { let label1 = '', label2 = '', dtype = s.tipo, did = ''; if (s.tipo === 'tercero') { @@ -569,8 +576,7 @@ function setResultFilter(filter) { const msg = (item.msg || '').trim(); - if (ok) { - // Fila exitosa + if (status === 'success') { return ` @@ -581,8 +587,18 @@ function setResultFilter(filter) { ${escHtml(label2)} ${escHtml(msg.slice(0,60))} `; + } else if (status === 'warning') { + return ` + + + + ${s.label} + + ${escHtml(label1)} + ${escHtml(label2)} + ${escHtml(msg.slice(0,80))} + `; } else { - // Fila con error + botón reenviar return `