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:
co-authored by
Claude Sonnet 4.6
parent
0218b93bb4
commit
b3b6f6705d
@@ -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
|
||||
|
||||
@@ -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()})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user