Requisiciones: correcciones de la prueba en PRUEBAS

- .oculto con !important: las clases con display propio (.acciones, .tiles) definidas después
  le ganaban y seguían visibles los botones Devolver/Rechazar (y podía pasar con la tarjeta de
  margen de Cobranza). Prueba en interfaz.test.js.
- Pago a proveedor en otra moneda: el aviso dice "La orden es en MXN…" (antes "El proyecto…").
  Prueba en requisiciones.test.js.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Efrain (Helgen) 2026-10-23 12:19:02 -06:00
parent fdb273793f
commit 5dd33f2af1
4 changed files with 10 additions and 4 deletions

View File

@ -3207,8 +3207,12 @@ function normalizarPagoProveedor(p, orden) {
const d = p || {};
const fecha = validarFechaIso(d.fecha, orden.hoy, 'La fecha del pago');
if (orden.fechaOrden && fecha < orden.fechaOrden) throw new Error('La fecha del pago no puede ser anterior a la orden (' + orden.fechaOrden + ').');
const pago = normalizarPago(Object.assign({}, d, { fecha: fecha, etapaOrden: 1 }),
{ moneda: orden.moneda, etapas: 1, hoy: orden.hoy });
let pago;
try {
pago = normalizarPago(Object.assign({}, d, { fecha: fecha, etapaOrden: 1 }), { moneda: orden.moneda, etapas: 1, hoy: orden.hoy });
} catch (e) {
throw new Error(String(e.message).replace('El proyecto es en', 'La orden es en')); // aquí la moneda de referencia es la de la orden
}
if (Math.abs(aCentavos(pago.montoAplicado) - aCentavos(orden.total)) > aCentavos(TOLERANCIA_PAGO)) {
throw new Error('El pago (' + formatoMoneda(pago.montoAplicado) + ' ' + orden.moneda + ') debe ser igual al total de la orden (' +
formatoMoneda(orden.total) + ' ' + orden.moneda + ').');

View File

@ -286,6 +286,8 @@ const esperar=async(n=10)=>{for(let i=0;i<n;i++) await new Promise(r=>setImmedia
B.run('pintarCobranza('+JSON.stringify({...firmada,puedeDesbloquear:true})+')');
assert(/Desbloquear contrato/.test(B.$('cobContrato').innerHTML));
// .oculto gana sobre clases con display propio (.acciones, .tiles…), aunque estén definidas después (pasó en PRUEBAS, 23/10/2026)
assert(/\.oculto \{ display:none !important; \}/.test(html),'.oculto con !important');
// ===== Compras (con permiso, sin cobranza): requisiciones → orden → pago → cierre =====
const C=montar({ivaTasa:0.16,catalogo:CAT,tipoCambio:TC,clientes:[],proyectos:[],marcas:{},permisos:{cobranza:false,desbloqueo:false,compras:true,requisicion:false}});
await esperar(5);

View File

@ -145,7 +145,7 @@ assert.deepEqual([pp.fecha,pp.monto,pp.monedaPago,pp.tipoCambio,pp.montoAplicado
assert.equal(P.normalizarPagoProveedor({fecha:'2026-10-21',monto:2319,metodo:'Efectivo'},ORDEN).referencia,'','efectivo sin referencia');
assert.equal(P.normalizarPagoProveedor({fecha:'2026-10-21',monto:125.41,monedaPago:'USD',tipoCambio:18.5,metodo:'Cheque',referencia:'1'},ORDEN).montoAplicado,2320.09);
for(const [mal,re] of [[{monto:2321.01},/debe ser igual al total de la orden \(\$2,320\.00 MXN\)/],[{monto:2318.99},/igual al total/],
[{monto:0},/mayor a 0/],[{monedaPago:'USD',monto:125.41},/tipo de cambio/],[{metodo:'Bitcoin'},/método de pago/],
[{monto:0},/mayor a 0/],[{monedaPago:'USD',monto:125.41},/La orden es en MXN y el pago en USD: captura el tipo de cambio/],[{metodo:'Bitcoin'},/método de pago/],
[{referencia:''},/referencia/],[{fecha:'2026-10-23'},/no puede ser futura/],[{fecha:'2026-10-19'},/anterior a la orden/],[{fecha:''},/obligatoria/]]){
assert.throws(()=>P.normalizarPagoProveedor({fecha:'2026-10-21',monto:2320,metodo:'Transferencia',referencia:'R',...mal},ORDEN),re,JSON.stringify(mal));
}

View File

@ -49,7 +49,7 @@
.aviso { padding:12px 14px; border-radius:6px; margin-bottom:16px; display:none; }
.aviso.ok { background:#E6FBF7; border:1px solid var(--teal); display:block; }
.aviso.error { background:#FEE2E2; border:1px solid #DC2626; display:block; }
.oculto { display:none; }
.oculto { display:none !important; } /* gana sobre .acciones, .tiles, .grid… (display) aunque estén definidas después */
.fila-cat { cursor:pointer; }
.fila-cat:hover td { background:var(--cielo); }
.fila-cat.editando td { background:#E6FBF7; }