diff --git a/pkg/services/renovacion_service.go b/pkg/services/renovacion_service.go index aed1681..30cd948 100644 --- a/pkg/services/renovacion_service.go +++ b/pkg/services/renovacion_service.go @@ -74,17 +74,39 @@ func EnviarCorreoPrueba(email string, p *models.PlantillaCorreo) error { return app.Http.Mail.Send(email, "[PRUEBA] "+p.Asunto, html) } -// EnviarCorreoManual envía correo de aviso para un contrato específico +// EnviarCorreoManual envía correo de aviso para un contrato específico. +// Usa la primera regla activa para obtener la plantilla y la pasarela de pago; +// si no hay regla, usa la primera plantilla disponible con pasarela "bold". func EnviarCorreoManual(contrato *models.Contrato) error { - // Usar la primera plantilla activa de tipo renovacion/vencimiento como fallback - plantillas, err := models.GetAllPlantillasSelect() - if err != nil || len(plantillas) == 0 { - return fmt.Errorf("no hay plantillas de correo disponibles") + // Intentar obtener plantilla y pasarela desde la primera regla activa + var p *models.PlantillaCorreo + gateway := "bold" + + reglas, err := models.GetReglasActivas() + if err == nil && len(reglas) > 0 { + regla := reglas[0] + gateway = regla.PasarelaEnlace + p, err = models.GetPlantillaByID(regla.PlantillaID) + if err != nil { + p = nil + } } - p, err := models.GetPlantillaByID(plantillas[0].ID) - if err != nil { - return err + + // Fallback: primera plantilla disponible + if p == nil { + plantillas, err2 := models.GetAllPlantillasSelect() + if err2 != nil || len(plantillas) == 0 { + return fmt.Errorf("no hay plantillas de correo disponibles") + } + p, err = models.GetPlantillaByID(plantillas[0].ID) + if err != nil { + return err + } } + + // Generar o reutilizar el enlace de pago + enlacePago := ObtenerOCrearEnlacePago(contrato, gateway) + dias := int(contrato.FechaVencimiento.Sub(time.Now()).Hours() / 24) var items []ItemServicio for _, s := range contrato.Servicios { @@ -103,6 +125,7 @@ func EnviarCorreoManual(contrato *models.Contrato) error { DiasRestantes: dias, Total: contrato.PrecioAcordado, Servicios: items, + EnlacePago: enlacePago, } html, err := RenderPlantilla(p, datos) if err != nil {