From b3b6f6705d7e2a39103e8c950365e8691a498f70 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 9 Jul 2026 20:13:40 -0500 Subject: [PATCH] fix: marcar pago manual no toca estado ni fecha_vencimiento MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MarcarContratoPagado siempre sobreescribía estado='activo' y renovaba fecha_vencimiento, lo que causaba doble renovación si el admin ya había ajustado el contrato manualmente. ConfirmarPagoManual solo limpia pago_confirmado, fecha_pago y el enlace Bold, sin tocar nada más. Co-Authored-By: Claude Sonnet 4.6 --- pkg/models/contrato.go | 15 +++++++++++++++ rest/controllers/contrato_controller.go | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/models/contrato.go b/pkg/models/contrato.go index bffbfe2..8dcaa51 100644 --- a/pkg/models/contrato.go +++ b/pkg/models/contrato.go @@ -336,6 +336,21 @@ func MarcarContratoPagado(contratoID uint) (bool, error) { return result.RowsAffected > 0, result.Error } +// ConfirmarPagoManual marca el pago como confirmado sin modificar estado ni fecha_vencimiento. +// Útil cuando el admin ya ajustó manualmente el contrato y solo necesita limpiar el enlace pendiente. +func ConfirmarPagoManual(contratoID uint) (bool, error) { + now := time.Now() + result := app.Http.Database.DB.Model(&Contrato{}). + Where("id = ? AND pago_confirmado = false", contratoID). + Updates(map[string]interface{}{ + "pago_confirmado": true, + "fecha_pago": now, + "enlace_pago": "", + "enlace_pago_link_id": "", + }) + return result.RowsAffected > 0, result.Error +} + // GetEstadoPago devuelve si el contrato tiene pago confirmado (para polling desde el frontend). func GetEstadoPago(contratoID uint) (bool, *time.Time, error) { var c Contrato diff --git a/rest/controllers/contrato_controller.go b/rest/controllers/contrato_controller.go index 640381a..b627738 100644 --- a/rest/controllers/contrato_controller.go +++ b/rest/controllers/contrato_controller.go @@ -444,13 +444,15 @@ func VerificarPagoBold(c *fiber.Ctx) error { } // MarcarPagoManual confirma manualmente el pago de un contrato sin pasar por Bold. +// Solo limpia el enlace y marca pago_confirmado; NO toca estado ni fecha_vencimiento +// porque el admin puede haberlos ajustado manualmente antes de confirmar el pago. // POST /api/contratos/:id/marcar-pagado func MarcarPagoManual(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return c.Status(400).JSON(fiber.Map{"error": "ID inválido"}) } - ok, err := models.MarcarContratoPagado(uint(id)) + ok, err := models.ConfirmarPagoManual(uint(id)) if err != nil { return c.Status(500).JSON(fiber.Map{"error": err.Error()}) }