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()}) }