This commit is contained in:
Lizandro Guarnizo
2026-05-16 21:36:59 -05:00
parent 4fa506c7d6
commit 1511ca97d9
6 changed files with 114 additions and 50 deletions
+14
View File
@@ -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
}
+9 -4
View File
@@ -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("🧾 <b>Nueva factura disponible</b>\nNúmero: <b>%s</b>\nMonto: %s %.2f",
factura.Numero, factura.Moneda, factura.Monto)
msg := fmt.Sprintf("🧾 <b>Nueva factura disponible</b>\nNúmero: <b>%s</b>\nMonto: %s %.2f\n\n🔗 <a href=\"%s\">Ver en el portal</a>",
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)
}