fix: marcar pago manual no toca estado ni fecha_vencimiento

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 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-09 20:13:40 -05:00
co-authored by Claude Sonnet 4.6
parent 0218b93bb4
commit b3b6f6705d
2 changed files with 18 additions and 1 deletions
+15
View File
@@ -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
+3 -1
View File
@@ -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()})
}