From f5eef70e0972baaea0c781a5d1dc197378ad47c9 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Sat, 16 May 2026 15:17:49 -0500 Subject: [PATCH] up --- pkg/services/notif_dispatch.go | 73 ++++++++++++++++++++++++-- resources/views/layouts/portal.html | 75 +++++++++++++++++++++++++-- rest/controllers/portal_controller.go | 39 ++++++++++++++ rest/routes/portal.go | 5 ++ 4 files changed, 184 insertions(+), 8 deletions(-) diff --git a/pkg/services/notif_dispatch.go b/pkg/services/notif_dispatch.go index 933ed6b..29c75b0 100644 --- a/pkg/services/notif_dispatch.go +++ b/pkg/services/notif_dispatch.go @@ -40,11 +40,37 @@ func DispatchTicketRespuestaAdmin(ticket *models.ProyectoTicket, contenido strin log.Printf("[Notif] PortalUser %d no encontrado: %v", ticket.PortalUserID, err) return } - if portalUser.Email == "" { + + cfg := models.GetNotifConfig("ticket_respuesta_admin", "portal_user") + if cfg == nil { return } - // TODO: enviar email al portal user cuando mail_service implemente SendTicketRespuestaPortalUser - _ = fmt.Sprintf("/portal/dashboard") + + portalURL := "/portal/dashboard" + titulo := fmt.Sprintf("Respuesta en tu ticket: %s", ticket.Titulo) + cuerpo := fmt.Sprintf("El equipo respondiΓ³: %s", contenido) + + if cfg.CanalSistema { + _ = models.CreateSistemaNotif(&models.SistemaNotificacion{ + TipoUsuario: "portal_user", + UsuarioID: portalUser.ID, + Titulo: titulo, + Cuerpo: cuerpo, + Url: portalURL, + Icono: "π¬", + }) + } + if cfg.CanalEmail && portalUser.Email != "" { + go SendTicketRespuestaPortalUser(portalUser.Email, portalUser.Nombre, proyectoNombre, ticket.Titulo, contenido, portalURL) + } + if cfg.CanalTelegram && portalUser.TelegramChatID != "" { + ts := NewTelegramService() + msg := fmt.Sprintf("π¬ El equipo respondiΓ³ tu ticket\nProyecto: %s\nTicket: %s\n\n%s", + proyectoNombre, ticket.Titulo, contenido) + if err := ts.SendMessageWithToken(portalUser.TelegramChatID, msg, getAdminBotToken()); err != nil { + log.Printf("[Notif] Error telegram portal_user %d: %v", portalUser.ID, err) + } + } } // βββ DispatchFacturaSubida ββββββββββββββββββββββββββββββββββββββββββββββββββββ @@ -53,12 +79,49 @@ func DispatchFacturaSubida(factura *models.Factura) { if factura == nil || factura.ClienteID == 0 { return } + cfg := models.GetNotifConfig("factura_subida", "portal_user") + if cfg == nil { + return + } portalUsers, err := models.GetPortalUsersByClienteID(factura.ClienteID) if err != nil || len(portalUsers) == 0 { return } - log.Printf("[Notif] DispatchFacturaSubida factura=%d portal_users=%d (pendiente de implementar)", - factura.ID, len(portalUsers)) + + clienteNombre := factura.Cliente.Empresa + if clienteNombre == "" { + clienteNombre = factura.Cliente.Nombre + } + + for _, u := range portalUsers { + u := u + portalURL := "/portal/dashboard" + titulo := fmt.Sprintf("Nueva factura disponible: %s", factura.Numero) + cuerpo := fmt.Sprintf("Factura %s por %s %.2f", factura.Numero, factura.Moneda, factura.Monto) + + if cfg.CanalSistema { + _ = models.CreateSistemaNotif(&models.SistemaNotificacion{ + TipoUsuario: "portal_user", + UsuarioID: u.ID, + Titulo: titulo, + Cuerpo: cuerpo, + Url: portalURL, + Icono: "π§Ύ", + }) + } + if cfg.CanalEmail && u.Email != "" { + go SendFacturaSubidaPortalUser(u.Email, u.Nombre, clienteNombre, factura.Numero, factura.Monto, factura.Moneda, portalURL) + } + if cfg.CanalTelegram && u.TelegramChatID != "" { + ts := NewTelegramService() + msg := fmt.Sprintf("π§Ύ Nueva factura disponible\nNΓΊmero: %s\nMonto: %s %.2f", + factura.Numero, factura.Moneda, factura.Monto) + if err := ts.SendMessageWithToken(u.TelegramChatID, msg, getAdminBotToken()); err != nil { + log.Printf("[Notif] Error telegram portal_user %d: %v", u.ID, err) + } + } + } + log.Printf("[Notif] DispatchFacturaSubida factura=%d clientes notificados=%d", factura.ID, len(portalUsers)) } // βββ helpers βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ diff --git a/resources/views/layouts/portal.html b/resources/views/layouts/portal.html index 7a6e2db..ca0a426 100644 --- a/resources/views/layouts/portal.html +++ b/resources/views/layouts/portal.html @@ -20,15 +20,84 @@
-