Notificaciones on campana

This commit is contained in:
JORGE LUIS CAUDILLO ESPARZA
2025-01-06 03:53:57 -07:00
parent d14daeb4b5
commit 180fd2fe35
6 changed files with 2219 additions and 2069 deletions

View File

@@ -201,6 +201,32 @@ Public Class ClsPaginas
#End Region
#Region "GlobalDTs"
Public Shared Property GlobalDTNotificacionesUsuarios(CveUsuario As Integer, CveEmpresa As Integer) As DataTable
Get
Dim AppNombre As String = $"GlobalDTNotificacionesUsuarios-{CveEmpresa}"
If HttpContext.Current.Application(AppNombre) Is Nothing Then
Using ObjUsuarios As New ClsSisNotificaciones
If ObjUsuarios.NotificacionesUsuariosGet(-1, CveEmpresa) Then HttpContext.Current.Application(AppNombre) = ObjUsuarios.DtResultados
End Using
End If
Dim filtros As New List(Of String)
If CveUsuario <> -1 Then filtros.Add($"CveUsuario = {CveUsuario}")
If filtros.Count > 0 Then
Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows)
GlobalDTNotificacionesUsuarios = Dv.ToTable
Dv.Dispose()
Else
GlobalDTNotificacionesUsuarios = DirectCast(HttpContext.Current.Application(AppNombre), DataTable)
End If
End Get
Set(value As DataTable)
Dim AppNombre As String = $"GlobalDTNotificacionesUsuarios-{CveEmpresa}"
HttpContext.Current.Application(AppNombre) = value
End Set
End Property
Public Shared Property GlobalTipoCambio(Optional Fecha As Date = MinFecha) As Double
Get
If GlobalTipoCambio <= 0 Then

View File

@@ -2323,7 +2323,107 @@ Public Class ClsSisNotificaciones
Return retorno
End Function
#Region "Notifica2.0"
''' <summary>
''' Obtiene mensajes de notificaciones de usuarios, por defecto obtine los ultimos 20.
''' </summary>
''' <param name="cveusuarioPara">Clave del usuario destinatario.</param>
''' <param name="cveEmpresa">Clave de la empresa.</param>
''' <param name="mostrarTodos">determina si retorna todos los mensanjes o solo los ultimos 20.</param>
''' <returns>Devuelve True si la operación fue exitosa, de lo contrario False.</returns>
Public Function NotificacionesUsuariosMensajesGet(cveusuario As Int32, cveEmpresa As Int32, mostrarTodos As Boolean, verVistos As Boolean) As Boolean
Dim retorno As Boolean = False
DataAdapter("PA_SIGNotificacionesUsuariosMensajesGet", CommandType.StoredProcedure)
With SqlAdapter.SelectCommand.Parameters
.Add("@CveusuarioPara", SqlDbType.Int).Value = cveusuario
.Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa
.Add("@MostrarTodos", SqlDbType.Bit).Value = mostrarTodos
.Add("@verVistos", SqlDbType.Bit).Value = verVistos
End With
Try
SqlAdapter.Fill(Data)
retorno = True
Catch Ex1 As SqlException
Me.OnError("Ocurrió un error al intentar obtener Notificación.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
Catch ex As Exception
OnError("Ocurrió un error al intentar obtener Notificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
End Try
Return retorno
End Function
''' <summary>
''' Obtiene notificaciones de usuarios.
''' </summary>
''' <param name="cveusuarioPara">Clave del usuario destinatario.</param>
''' <param name="cveEmpresa">Clave de la empresa.</param>
''' <param name="mostrarTodos">determina si retorna todos los mensanjes o solo los ultimos 20.</param>
''' <returns>Devuelve True si la operación fue exitosa, de lo contrario False.</returns>
Public Function NotificacionesUsuariosGet(cveusuario As Int32, cveEmpresa As Int32) As Boolean
Dim retorno As Boolean = False
DataAdapter("PA_SIGNotificacionesUsuariosGet", CommandType.StoredProcedure)
With SqlAdapter.SelectCommand.Parameters
.Add("@Cveusuario", SqlDbType.Int).Value = cveusuario
.Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa
End With
Try
SqlAdapter.Fill(Data)
retorno = True
Catch Ex1 As SqlException
Me.OnError("Ocurrió un error al intentar obtener Notificación.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
Catch ex As Exception
OnError("Ocurrió un error al intentar obtener Notificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
End Try
Return retorno
End Function
Public Function NotificacionesUsuariosAdd(cveOrigen As Int32, cveusuarioPara As Int32, cveUsuarioDe As Int32, notificaCorreo As Boolean, notificaToast As Boolean, notificaCampana As Boolean,
icono As String, asunto As String, mensaje As String, cveEmpresa As Int32) As Boolean
Dim notificacion As String = "1"
NotificacionesUsuariosMensajesAdd(cveOrigen, cveusuarioPara, cveUsuarioDe, notificaCorreo, notificaToast, notificaCampana, icono, asunto, mensaje, cveEmpresa)
If (notificaCampana) Then
If (Not IsNothing(Data) AndAlso Data.Rows.Count > 0) Then
notificacion = Data(0)("Notificaciones").ToString()
End If
Dim _hubContext As IHubContext = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)()
_hubContext.Clients.Client(Notificaciones.UsuariosConexiones(cveusuarioPara)).ContadorCampana(notificacion)
ClsPaginas.GlobalDTNotificacionesUsuarios(-1, cveEmpresa) = Nothing
End If
End Function
Private Function NotificacionesUsuariosMensajesAdd(cveOrigen As Int32, cveusuarioPara As Int32, cveUsuarioDe As Int32, notificaCorreo As Boolean, notificaToast As Boolean, notificaCampana As Boolean,
icono As String, asunto As String, mensaje As String, cveEmpresa As Int32) As Boolean
Dim retorno As Boolean = False
DataAdapter("PA_SIGNotificacionesUsuariosMensajesAdd", CommandType.StoredProcedure)
With SqlAdapter.SelectCommand.Parameters
.Add("@CveOrigen", SqlDbType.Int).Value = cveOrigen
.Add("@CveusuarioPara", SqlDbType.Int).Value = cveusuarioPara
.Add("@CveUsuarioDe", SqlDbType.Int).Value = cveUsuarioDe
.Add("@NotificaCorreo", SqlDbType.Bit).Value = notificaCorreo
.Add("@NotificaToast", SqlDbType.Bit).Value = notificaToast
.Add("@NotificaCampana", SqlDbType.Bit).Value = notificaCampana
.Add("@Icono", SqlDbType.VarChar).Value = icono
.Add("@Asunto", SqlDbType.VarChar).Value = asunto
.Add("@Mensaje", SqlDbType.VarChar).Value = mensaje
.Add("@CveEmpresa", SqlDbType.Int).Value = cveEmpresa
End With
Try
SqlAdapter.Fill(Data)
retorno = True
Catch Ex1 As SqlException
Me.OnError("Ocurrió un error al intentar agregar Notificación.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
Catch ex As Exception
OnError("Ocurrió un error al intentar agregar Notificación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
End Try
Return retorno
Return retorno
End Function
#End Region
#Region " IDisposable Support "

View File

@@ -28,7 +28,7 @@ Public Class NotificacionesSQLWatcher
Using connection As New SqlConnection(rutadb)
' Consulta para detectar cambios recientes
Dim command As New SqlCommand(
"SELECT CveUsuario, Notificaciones, Fecha FROM NotificacionesUsuarios", connection)
"SELECT CveUsuario, Notificaciones, Fecha FROM SIG_NotificacionesUsuarios", connection)
' Asociar dependencia SQL a la consulta
Dim dependency As New SqlDependency(command)
@@ -51,7 +51,7 @@ Public Class NotificacionesSQLWatcher
' Método para enviar notificaciones solo de los registros actualizados
Private Sub SendNotifications()
Using connection As New SqlConnection(rutadb)
Dim query As String = "SELECT CveUsuario, Notificaciones, Fecha FROM NotificacionesUsuarios WHERE Fecha > DATEADD(MINUTE, -1, GETDATE())"
Dim query As String = "SELECT CveUsuario, Notificaciones, Fecha FROM SIG_NotificacionesUsuarios WHERE Fecha > DATEADD(MINUTE, -1, GETDATE())"
Dim command As New SqlCommand(query, connection)
connection.Open()

View File

@@ -49,9 +49,9 @@
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
GlobalConfiguration.Configuration.EnsureInitialized()
Dim watcher As New NotificacionesSQLWatcher()
watcher.StartWatching()
'se comenta ya que se envbia directo desde el metodo NotificacionesUsuariosAdd en clssisnotificaciones
'Dim watcher As New NotificacionesSQLWatcher()
'watcher.StartWatching()
End Sub

View File

@@ -20,12 +20,12 @@
</style>
<%: Scripts.Render("~/bundles/modernizr") %>
<%: Styles.Render("~/Content/AjaxControlToolkit/Styles/Bundle") %>
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700;800" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700;800" rel="stylesheet" />
<link href="/Metronic/fontawesome6/css/all.min.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="/Scripts/PrintJS/print.min.css"/>
<link rel="stylesheet" type="text/css" href="/Scripts/PrintJS/print.min.css" />
<%-- <link href="/Metronic/assets/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="/Metronic/assets/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="/Metronic/assets/global/plugins/simple-line-icons/simple-line-icons.min.css" rel="stylesheet" type="text/css" />--%>
@@ -139,13 +139,18 @@
<span class='SigCampananoti badge <%=If(countNotificaciones > 0, "badge-danger", "badge-default") %>'><%= countNotificaciones %> </span>
</a>
<ul class="dropdown-menu">
<li class="external">
<h3><span class="bold"><%= countNotificaciones %></span> Notificaciones pendientes</h3>
<li class="external" onclick ="$('.btnSigCampananoti').click();">
<h3>Click para ver notificaciones (<span class="bold"><%= countNotificaciones %></span>) pendientes</h3>
</li>
<li>
<asp:UpdatePanel ID="UpNotificaciones" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnSigCampananoti" CssClass="btnSigCampananoti" runat="server" Text="Enviar" OnClick="btnSigCampananoti_Click" Style="display:none" />
<ul class="dropdown-menu-list scroller" style="height: 250px;" data-handle-color="#637283">
<asp:Literal ID="LtlMNotificaciones" runat="server"></asp:Literal>
</ul>
</ContentTemplate>
</asp:UpdatePanel>
</li>
</ul>
</li>
@@ -347,8 +352,8 @@
<div class="page-container" runat="server" id="divpagecontainer">
<!-- BEGIN SIDEBAR -->
<div class="page-sidebar-wrapper" runat="server" id="divMenuB" style=" position: fixed;">
<div class="page-sidebar navbar-collapse collapse" >
<div class="page-sidebar-wrapper" runat="server" id="divMenuB" style="position: fixed;">
<div class="page-sidebar navbar-collapse collapse">
<!-- add "navbar-no-scroll" class to disable the scrolling of the sidebar menu -->
<!-- BEGIN SIDEBAR MENU -->
<ul class="page-sidebar-menu" id='ulmenulateralmaster' data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200">

View File

@@ -435,12 +435,19 @@ Partial Class Site
#Region "Notificaciones"
Private Sub CargarNotificaciones()
Protected Sub btnSigCampananoti_Click(sender As Object, e As EventArgs)
CargarNotificaciones(True)
End Sub
Private Sub CargarNotificaciones(Optional obtnerNotis As Boolean = False)
Dim Notificaciones As New StringBuilder
'Bienvenida
Notificaciones.Append(ItemNotificaciones("Bienvenido a SIG ", "Hoy", "fa fa-bullhorn"))
'Notificaciones.Append(ItemNotificaciones("Bienvenido a SIG ", "Hoy", "fa fa-bullhorn"))
countNotificaciones = 0
Dim dt As DataTable = ClsPaginas.GlobalDTNotificacionesUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If Not IsNothing(dt) AndAlso dt.Rows.Count() > 0 Then
countNotificaciones = dt(0)("Notificaciones").ToString().ToEntero()
End If
'Certificado
Dim fechacer As String = ConvertCER()
If fechacer = "" OrElse (((DateTime.Parse(fechacer).Month - ClsPaginas.NowADS().Month) < 2) AndAlso ((DateTime.Parse(fechacer).Year - ClsPaginas.NowADS().Year) < 1)) Then
@@ -461,6 +468,16 @@ Partial Class Site
End If
OC.Dispose()
End If
If obtnerNotis Then
Using objnoti As New ClsSisNotificaciones()
If objnoti.NotificacionesUsuariosMensajesGet(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, True, True) Then
For Each row As DataRow In objnoti.DtResultados.Rows
Notificaciones.Append(ItemNotificaciones(row("Mensaje").ToString(), row("Asunto").ToString(), row("Icono").ToString()))
Next
End If
End Using
End If
'If UsuarioActual.TienePermisoProceso(303) Then
' Using objgen As New ClsGenerales
' pnlNotificacionSAT.Visible = True
@@ -487,7 +504,8 @@ Partial Class Site
'End If
'OC.Dispose()
LtlMNotificaciones.Text = String.Format("{0}{1}", LtlMNotificaciones.Text, Notificaciones.ToString())
'LtlMNotificaciones.Text = String.Format("{0}{1}", LtlMNotificaciones.Text, Notificaciones.ToString())
LtlMNotificaciones.Text = Notificaciones.ToString()
Notificaciones.Clear()
End Sub
@@ -593,4 +611,5 @@ Partial Class Site
Catch ex As Exception
End Try
End Sub
End Class