From 615dd8d5e35b09241d705a2f21d9bea0807fcff6 Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 1 Mar 2026 20:18:38 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/server.js b/server.js index 6b9905a..8c6313d 100644 --- a/server.js +++ b/server.js @@ -2101,12 +2101,24 @@ app.post("/budgets", authMiddleware, async (req, res) => { } catch(e) { res.status(500).json({ok: false}); } }); -app.patch("/budgets/:id/status", authMiddleware, async (req, res) => { +// Borrar Presupuesto +app.delete("/budgets/:id", authMiddleware, async (req, res) => { try { - const { status } = req.body; - await pool.query("UPDATE budgets SET status=$1 WHERE id=$2 AND owner_id=$3", [status, req.params.id, req.user.accountId]); + const q = await pool.query("SELECT status FROM budgets WHERE id=$1 AND owner_id=$2", [req.params.id, req.user.accountId]); + if (q.rowCount === 0) return res.status(404).json({ok: false, error: "No encontrado"}); + + const status = q.rows[0].status; + + // REGLA DE NEGOCIO: No se puede borrar si está aceptado o ya convertido a servicio + if (status === 'accepted' || status === 'converted') { + return res.status(400).json({ok: false, error: "Para poder borrar un presupuesto, primero debe estar anulado/rechazado."}); + } + + await pool.query("DELETE FROM budgets WHERE id=$1 AND owner_id=$2", [req.params.id, req.user.accountId]); res.json({ ok: true }); - } catch(e) { res.status(500).json({ok: false}); } + } catch(e) { + res.status(500).json({ok: false, error: "Error interno"}); + } }); // Convertir Presupuesto en Servicio Activo (CON SOPORTE RED INTERNA)