up
This commit is contained in:
@@ -20,6 +20,7 @@ type NotificacionLog struct {
|
||||
ErrorMsg string `json:"error_msg" gorm:"column:error_msg;type:text"`
|
||||
Asunto string `json:"asunto" gorm:"column:asunto"`
|
||||
PreviewHTML string `json:"preview_html" gorm:"column:preview_html;type:text"`
|
||||
Pasarela string `json:"pasarela" gorm:"column:pasarela;type:varchar(20)"` // bold | dlocal | (vacío para correos de aviso)
|
||||
}
|
||||
|
||||
func (NotificacionLog) TableName() string { return "notificaciones_log" }
|
||||
@@ -75,6 +76,7 @@ func UpdateNotificacionLog(n NotificacionLog) error {
|
||||
return app.Http.Database.DB.Model(&n).Updates(map[string]interface{}{
|
||||
"estado": n.Estado,
|
||||
"error_msg": n.ErrorMsg,
|
||||
"pasarela": n.Pasarela,
|
||||
}).Error
|
||||
}
|
||||
|
||||
|
||||
@@ -325,6 +325,7 @@ func TestCicloNotificaciones(t *testing.T) {
|
||||
®laBienvenida,
|
||||
&cliente,
|
||||
[]models.Contrato{contrato},
|
||||
"",
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("EnviarNotificacionGrupo (bienvenida): %v", err)
|
||||
|
||||
@@ -134,7 +134,7 @@ func procesarContratos(regla *models.NotificacionRegla, contratos []models.Contr
|
||||
continue
|
||||
}
|
||||
cliente := &grupoContratos[0].Cliente
|
||||
if err := EnviarNotificacionGrupo(regla, cliente, grupoContratos); err != nil {
|
||||
if err := EnviarNotificacionGrupo(regla, cliente, grupoContratos, ""); err != nil {
|
||||
log.Printf("[CRON] Error enviando a cliente %d: %v", clienteID, err)
|
||||
} else {
|
||||
log.Printf("[CRON] Enviado a cliente %d (%s) — %d contrato(s)", clienteID, cliente.Email, len(grupoContratos))
|
||||
|
||||
@@ -163,8 +163,9 @@ func EnviarCorreoManual(contrato *models.Contrato) error {
|
||||
return sendErr
|
||||
}
|
||||
|
||||
// EnviarNotificacionGrupo envía un correo agrupado para un cliente con múltiples contratos
|
||||
func EnviarNotificacionGrupo(regla *models.NotificacionRegla, cliente *models.Cliente, contratos []models.Contrato) error {
|
||||
// EnviarNotificacionGrupo envía un correo agrupado para un cliente con múltiples contratos.
|
||||
// pasarela indica la pasarela de pago que originó el evento (bold | dlocal | "").
|
||||
func EnviarNotificacionGrupo(regla *models.NotificacionRegla, cliente *models.Cliente, contratos []models.Contrato, pasarela string) error {
|
||||
p, err := models.GetPlantillaByID(regla.PlantillaID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("plantilla no encontrada: %w", err)
|
||||
@@ -230,6 +231,7 @@ func EnviarNotificacionGrupo(regla *models.NotificacionRegla, cliente *models.Cl
|
||||
Estado: "pendiente",
|
||||
Asunto: p.Asunto,
|
||||
PreviewHTML: html,
|
||||
Pasarela: pasarela,
|
||||
}
|
||||
savedLog, err := models.CreateNotificacionLog(logEntry)
|
||||
if err != nil {
|
||||
@@ -276,7 +278,14 @@ func ReenviarLog(logEntry *models.NotificacionLog) error {
|
||||
// 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) {
|
||||
// EnviarCorreoConfirmacionPago envía el correo de "pago recibido" para un contrato.
|
||||
// pasarela (opcional): "bold", "dlocal", etc. Se guarda en el historial del cliente.
|
||||
func EnviarCorreoConfirmacionPago(contratoID uint, pasarela ...string) {
|
||||
pas := ""
|
||||
if len(pasarela) > 0 {
|
||||
pas = pasarela[0]
|
||||
}
|
||||
|
||||
contrato, err := models.GetContratoByID(contratoID)
|
||||
if err != nil {
|
||||
log.Printf("[PAGO-CORREO] contrato %d no encontrado: %v", contratoID, err)
|
||||
@@ -296,10 +305,10 @@ func EnviarCorreoConfirmacionPago(contratoID uint) {
|
||||
return
|
||||
}
|
||||
|
||||
if err := EnviarNotificacionGrupo(regla, &contrato.Cliente, []models.Contrato{*contrato}); err != nil {
|
||||
if err := EnviarNotificacionGrupo(regla, &contrato.Cliente, []models.Contrato{*contrato}, pas); 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)
|
||||
log.Printf("[PAGO-CORREO] correo de confirmación enviado para contrato %d → %s (pasarela: %s)", contratoID, contrato.Cliente.Email, pas)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user