This commit is contained in:
Lizandro Guarnizo
2026-05-12 19:41:17 -05:00
parent 55c68b470b
commit 25e3cd6254
9 changed files with 270 additions and 3 deletions
+30
View File
@@ -273,6 +273,36 @@ func ReenviarLog(logEntry *models.NotificacionLog) error {
return sendErr
}
// EnviarCorreoConfirmacionPago envía el correo de "pago recibido" para un contrato.
// Usa la regla/plantilla con tipo_evento = 'pago_recibido'. Si no existe, no hace nada.
// Es idempotente: no reenvía si ya se envió hoy (YaEnviadoHoy por regla+cliente).
func EnviarCorreoConfirmacionPago(contratoID uint) {
contrato, err := models.GetContratoByID(contratoID)
if err != nil {
log.Printf("[PAGO-CORREO] contrato %d no encontrado: %v", contratoID, err)
return
}
reglas, err := models.GetReglasByTipoEvento("pago_recibido")
if err != nil || len(reglas) == 0 {
log.Printf("[PAGO-CORREO] sin regla pago_recibido configurada — se omite correo de confirmación")
return
}
regla := &reglas[0]
// Idempotencia: si ya se envió hoy para esta regla+cliente, no reenviar
if models.YaEnviadoHoy(contrato.ClienteID, regla.ID) {
log.Printf("[PAGO-CORREO] correo de confirmación ya enviado hoy para cliente %d", contrato.ClienteID)
return
}
if err := EnviarNotificacionGrupo(regla, &contrato.Cliente, []models.Contrato{*contrato}); err != nil {
log.Printf("[PAGO-CORREO] error enviando correo de confirmación para contrato %d: %v", contratoID, err)
} else {
log.Printf("[PAGO-CORREO] correo de confirmación enviado para contrato %d → %s", contratoID, contrato.Cliente.Email)
}
}
// ObtenerOCrearEnlacePago devuelve el enlace de pago vigente del contrato.
// gateway puede ser "bold", "dlocal" o "ninguna"/"".
// Si ya existe un enlace guardado, lo reutiliza (mismo ciclo).