From 232e9ec4364b6c02af3ec163debd8a53d5c113b4 Mon Sep 17 00:00:00 2001 From: marsalva Date: Mon, 17 Aug 2026 22:31:54 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20usar=20fecha=20real=20de=20archivado=20(?= =?UTF-8?q?no=20created=5Fat)=20para=20mostrar=20servicios=20finalizados?= =?UTF-8?q?=2015=20d=C3=ADas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El filtro de /services/active usaba s.created_at (fecha de importación del aviso) para decidir si un servicio archivado sigue visible 15 días. Si el aviso se creó hace más de 15 días, al finalizarlo desaparecía de golpe de calendario.html aunque el frontend ya tenía preparado el efecto translucido/marca de agua. Ahora /services/set-appointment guarda archived_at dentro de raw_data en el momento real en que se archiva, y /services/active usa esa fecha (con fallback a created_at para registros antiguos sin archived_at). --- server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index a128fc7..23f87ea 100644 --- a/server.js +++ b/server.js @@ -3406,7 +3406,7 @@ app.get("/services/active", authMiddleware, async (req, res) => { // SI ES OPERARIO: Ve solo lo suyo. // 👻 FANTASMAS: Enviamos los archivados de los últimos 15 días para que salgan translúcidos if (req.user.role === 'operario' || req.user.role === 'operario_cerrado') { - query += ` AND s.assigned_to = $2 AND (s.status != 'archived' OR (s.status = 'archived' AND s.created_at >= NOW() - INTERVAL '15 days'))`; + query += ` AND s.assigned_to = $2 AND (s.status != 'archived' OR (s.status = 'archived' AND COALESCE((s.raw_data->>'archived_at')::timestamptz, s.created_at) >= NOW() - INTERVAL '15 days'))`; params.push(req.user.sub); } @@ -3460,6 +3460,7 @@ app.put("/services/set-appointment/:id", authMiddleware, async (req, res) => { // 🧹 AUTO-ARCHIVO DESDE LA APP: Si finaliza, lo quitamos del buzón de proveedores const isFinalApp = stName.includes('finalizado') || stName.includes('terminado') || stName.includes('anulado'); + if (isFinalApp) updatedRawData.archived_at = new Date().toISOString(); const mainStatusApp = isFinalApp ? 'archived' : 'imported'; await pool.query('UPDATE scraped_services SET raw_data = $1, assigned_to = $2, status = $5 WHERE id = $3 AND owner_id = $4',