diff --git a/tests/interfaz.test.js b/tests/interfaz.test.js index b412759..e269673 100644 --- a/tests/interfaz.test.js +++ b/tests/interfaz.test.js @@ -170,6 +170,13 @@ const esperar=async(n=10)=>{for(let i=0;isetImmedia assert.equal(csv[0].charCodeAt(0),0xFEFF,'BOM para Excel'); assert(csv[0].includes('"Contratado con IVA","Cobrado","Saldo"')); assert.equal(csv[1],'"PRY-2026-0003","Techo","\'=Luis, ""SA""","Helgen","Firmado","MXN",11600.00,5000.00,6600.00,43.1,"Instalación",3480.00,"2026-10-20",2,4850.00,5150.00,51.5'); assert(csv[3].endsWith(',0,,,'),'sin margen: celdas vacías'); assert.equal(csv.length,4); + // Desde el resumen se abre cualquier proyecto, también uno sin cotización aceptada (no está en la tabla) + const nAntes=B.llamadas.filter(c=>c.funcion==='getCobranzaProyecto').length; + B.$('resProyecto').value='PRY-2026-0001 — Luis — Solar MX — Techo'; B.$('resProyecto').disparar('change'); await esperar(); + const abiertos=B.llamadas.filter(c=>c.funcion==='getCobranzaProyecto'); + assert.equal(abiertos.length,nAntes+1); assert.equal(abiertos.pop().args[0],'PRY-2026-0001'); + assert(!B.$('cobVistaProyecto').classList.contains('oculto')&&B.$('resProyecto').value==='','abre el proyecto y limpia el buscador'); + B.run('verResumenCob()'); await esperar(); // Clic en un renglón abre el proyecto; "← Resumen" regresa B.respuestas.getCobranzaProyecto={ok:true,datos:{proyecto:PRY,cotizaciones:[],contrato:null,esquema:[],resumen:null,pagos:[],puedeAceptar:true,puedeFirmar:false,metodos:[],hoy:'2026-10-20'}}; B.run("abrirProyectoCob('PRY-2026-0001')"); await esperar(); diff --git a/web/cotizador/index.html b/web/cotizador/index.html index a7a7c22..b441913 100644 --- a/web/cotizador/index.html +++ b/web/cotizador/index.html @@ -278,6 +278,9 @@

1 · Resumen de cobranza

+ +
+
Cargando…
@@ -1010,6 +1013,12 @@ return (folio && COB_PROYECTOS.find(p => p.folio === folio)) || null; } $('cobProyecto').addEventListener('change', () => { const p = proyectoCobElegido(); if (p) abrirProyectoCob(p.folio); }); + // Desde el resumen: cualquier proyecto (el resumen solo lista los que tienen contrato) + $('resProyecto').addEventListener('change', () => { + const folio = ($('resProyecto').value.trim().match(/^PRY-\d{4}-\d{4}/i) || [''])[0].toUpperCase(); + const p = folio && COB_PROYECTOS.find(x => x.folio === folio); + if (p) { $('resProyecto').value = ''; abrirProyectoCob(p.folio); } + }); function abrirProyectoCob(folio) { $('cobVistaResumen').classList.add('oculto'); $('cobVistaProyecto').classList.remove('oculto');