diff --git a/pkg/models/notif_config.go b/pkg/models/notif_config.go index d3f2e61..daa9a5d 100644 --- a/pkg/models/notif_config.go +++ b/pkg/models/notif_config.go @@ -116,3 +116,17 @@ func MarcarTodasLeidas(tipoUsuario string, usuarioID uint) error { Where("tipo_usuario = ? AND (usuario_id = ? OR usuario_id = 0)", tipoUsuario, usuarioID). Update("leida", true).Error } + +func CountUnreadFacturaNotifs(usuarioID uint) int64 { + var count int64 + app.Http.Database.DB.Model(&SistemaNotificacion{}). + Where("tipo_usuario = 'portal_user' AND usuario_id = ? AND icono = 'π§Ύ' AND leida = false", usuarioID). + Count(&count) + return count +} + +func MarcarNotifsFacturasLeidas(usuarioID uint) error { + return app.Http.Database.DB.Model(&SistemaNotificacion{}). + Where("tipo_usuario = 'portal_user' AND usuario_id = ? AND icono = 'π§Ύ'", usuarioID). + Update("leida", true).Error +} diff --git a/pkg/services/notif_dispatch.go b/pkg/services/notif_dispatch.go index ded5df3..11365f2 100644 --- a/pkg/services/notif_dispatch.go +++ b/pkg/services/notif_dispatch.go @@ -147,10 +147,15 @@ func DispatchFacturaSubida(factura *models.Factura) { clienteNombre = factura.Cliente.Nombre } + baseURL := getAppURL() + // Construir URL apuntando a la pestaΓ±a Facturas del proyecto (o dashboard si no tiene proyecto) + portalURL := baseURL + "/portal/dashboard" + if factura.ProyectoID != nil && factura.Proyecto != nil && factura.Proyecto.Slug != "" { + portalURL = baseURL + "/portal/proyecto/" + factura.Proyecto.Slug + "?tab=Facturas" + } + for _, u := range portalUsers { u := u - baseURL := getAppURL() - portalURL := baseURL + "/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) @@ -169,8 +174,8 @@ func DispatchFacturaSubida(factura *models.Factura) { } 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) + msg := fmt.Sprintf("π§Ύ Nueva factura disponible\nNΓΊmero: %s\nMonto: %s %.2f\n\nπ Ver en el portal", + factura.Numero, factura.Moneda, factura.Monto, portalURL) if err := ts.SendMessageWithToken(u.TelegramChatID, msg, getAdminBotToken()); err != nil { log.Printf("[Notif] Error telegram portal_user %d: %v", u.ID, err) } diff --git a/resources/views/facturas.html b/resources/views/facturas.html index 4806e8f..2664df5 100644 --- a/resources/views/facturas.html +++ b/resources/views/facturas.html @@ -49,23 +49,27 @@ -
{{ .Descripcion }}
-{{ .Moneda }} {{ .Monto }}
- {{ if .FechaVencimiento }}Vence: {{ .FechaVencimiento.Format "02 Jan 2006" }}
{{ end }} + + + + +Sin facturas disponibles.
- {{ end }} + +Sin facturas disponibles.