<%@ WebHandler Language="VB" Class="CargaEventos" %> Option Explicit On Option Strict On Imports System Imports System.Web Imports System.Collections Imports System.Collections.Generic Imports System.Web.SessionState Imports System.Data Imports Extensiones Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState Public Property events As List(Of CalendarEvent) Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest context.Response.ContentType = "text/plain" Dim CveUsuario = -1 Dim CveEmpresa = -1 Dim FI As Date Dim FF As Date If context.Request("METODO") IsNot Nothing Then Select Case context.Request("METODO") Case "servicio_domicilio" If context.Request("U").ToEntero > 0 Then CveUsuario = context.Request("U").ToEntero CveEmpresa = context.Request("E").ToEntero Dim CveSubProyecto As Integer = If(context.Request("CveSubProyecto") IsNot Nothing, context.Request("CveSubProyecto").ToEntero, -1) Dim CveUsuarioPara As Integer = If(context.Request("CveUsuarioPara") IsNot Nothing, context.Request("CveUsuarioPara").ToEntero, -1) FI = context.Request("start").ToDate FF = context.Request("end").ToDate If Not GetEventos(CveUsuario, CveEmpresa, FI, FF, CveOS:=-2, CveUsuarioPara:=CveUsuarioPara, CveSubProyecto:=CveSubProyecto, context:=context) Then 'Convierte el objeto de Eventos en JSON 'Dim oSerializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer Dim sJSON As String = Newtonsoft.Json.JsonConvert.SerializeObject(events) context.Response.Write(sJSON) End If End If Exit Select Case Else Exit Select End Select Else If context.Request("U").ToEntero > 0 Then CveUsuario = context.Request("U").ToEntero CveEmpresa = context.Request("E").ToEntero FI = context.Request("start").ToDate FF = context.Request("end").ToDate If Not GetEventos(CveUsuario, CveEmpresa, FI, FF) Then 'Convierte el objeto de Eventos en JSON 'Dim oSerializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer Dim sJSON As String = Newtonsoft.Json.JsonConvert.SerializeObject(events) context.Response.Write(sJSON) End If End If End If End Sub Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End Property Private Function GetEventos(CveUsuario As Integer, CveEmpresa As Integer, pFI As Date, pFF As Date, Optional CveOS As Integer = -1, Optional CveUsuarioPara As Integer = -1, Optional CveSubProyecto As Integer = -1, Optional context As HttpContext = Nothing) As Boolean Dim ObjEventos As New ClsOIEventos Dim ErrorEventos = False Dim CveEmpresaCRM As Integer = 0 Dim DT_SubProyectos As New System.Data.DataTable DT_SubProyectos.Columns.Add("CveSubProyecto", GetType(Integer)) DT_SubProyectos.Columns.Add("backgroundColor") Dim DT_EstatusOS = New DataTable DT_EstatusOS.Columns.Add("", GetType(Integer)) 'son 26 Dim Colores() As String = {"#006699", "#0099cc", "#0066cc", "#0033cc", "#0000ff", "#3333ff", "#3333ff", "#6600ff", "#9933ff", "#cc00ff", "#cc00cc", "#cc0099", "#cc3399", "#cc6699", "#cc0066", "#009933", "#00cc00", "#00cc66", "#009999", "#669900", "#99cc00", "#cccc00", "#cc9900", "#ff9900", "#006666", "#669999"} If CveOS = -2 Then Dim objSub As New ClsSubProyectos Dim DtTempSubproyectos As New DataTable If objSub.GetSubProyectos(CveEmpresa) Then DtTempSubproyectos = objSub.DtResultados.FiltraParametros("", "CveSubProyecto") End If objSub.Dispose() Dim ColorIndex As Integer = 0 If DtTempSubproyectos.Rows.Count > 0 Then For Each drow As DataRow In DtTempSubproyectos.Rows Dim Subrow = DT_SubProyectos.NewRow Subrow("CveSubProyecto") = drow("CveSubProyecto").ToString.ToEntero Subrow("backgroundColor") = Colores(ColorIndex) DT_SubProyectos.Rows.Add(Subrow) ColorIndex = ColorIndex + 1 If ColorIndex >= 25 Then ColorIndex = 0 End If Next End If End If Dim EsCoordinador As Boolean = False Dim usuarioActual_ As Usuario = UsuarioActual(context) If context IsNot Nothing AndAlso CveOS = -2 Then If usuarioActual_.TienePermisoProceso(348) Then EsCoordinador = True End If End If If ObjEventos.GetEventos(-1, -1, -1, "-1", "-1", -1, CveUsuario, CveUsuarioPara, -1, -1, -1, "-1", -1, -1, -1, -1, CveOS, -1, -1, -1, -1, -1, CveUsuario, CveUsuario, CveUsuario, CveEmpresa, pFI, pFF, CveSubProyecto:=CveSubProyecto, EsCoordinador:=EsCoordinador) Then If ObjEventos.DtResultados.Rows.Count > 0 Then events = New List(Of CalendarEvent) Try For Each dr As DataRow In ObjEventos.DtResultados.Rows If dr("CveEventoEstatus").ToString.ToEntero <> 5 Then Dim cevent As CalendarEvent = New CalendarEvent() cevent.id = dr("CveEvento").ToString.ToEntero cevent.title = dr("Asunto").ToString cevent.description = dr("Descripcion").ToString cevent.start = String.Format("{0:s}", dr("FechaInicio").ToString.ToDateTime) cevent.end = String.Format("{0:s}", dr("FechaFin").ToString.ToDateTime) cevent.allDay = False cevent.CveEventoEstatus = dr("CveEventoEstatus").ToString.ToEntero cevent.cveagendatipo = dr("CveAgendaTipo").ToString cevent.prioridad = dr("CvePrioridad").ToString.ToEntero cevent.backgroundColor = dr("BackGroundColor").ToString cevent.recurrenciatipo = dr("RecurrenciaTipo").ToString.ToEntero cevent.frecuencia = dr("Frecuencia").ToString.ToEntero cevent.diassemana = dr("DiasSemana").ToString cevent.dia = dr("Dia").ToString.ToEntero cevent.mes = dr("Mes").ToString.ToEntero cevent.recurrenciafin = dr("RecurrenciaFin").ToString cevent.CveProspecto = dr("CveProspecto").ToString.ToEntero cevent.Prospecto = dr("Prospecto").ToString cevent.CveTipoEvento = dr("Prospecto").ToString.ToEntero cevent.EmpresaCRM = dr("EmpresaCRM").ToString cevent.SubProyecto = dr("SubProyecto").ToString cevent.CveSubProyecto = dr("CveSubProyecto").ToString.ToEntero cevent.Direccion = dr("Direccion").ToString cevent.CveEmpresaCRM = dr("CveEmpresaCRM").ToString cevent.CveContactoCRM = dr("CveContactoCRM").ToString cevent.CveAcercamientoCRM = dr("CveAcercamientoCRM").ToString cevent.CvePersonal = dr("CvePersonal").ToString.ToEntero cevent.CveCliente = dr("CveCliente").ToString.ToEntero cevent.CveProveedor = dr("CveProveedor").ToString.ToEntero cevent.NombreCliente = dr("NombreCliente").ToString cevent.NombreProveedor = dr("NombreProveedor").ToString cevent.NomprePersonal = dr("NomprePersonal").ToString cevent.CveCompra = dr("CveCompra").ToString.ToEntero cevent.SerieFolioCompra = dr("SerieFolioCompra").ToString cevent.CveVenta = dr("CveVenta").ToString.ToEntero cevent.SerieFolioVenta = dr("SerieFolioVenta").ToString cevent.CveOS = dr("CveOS").ToString.ToEntero cevent.CveOSDetalle = dr("CveOSDetalle").ToString.ToEntero cevent.CveUsuarioAtendio = dr("CveUsuarioAtendio").ToString.ToEntero cevent.CveSubProyectoUsuarioAtendio = dr("CveSubProyectoUsuarioAtendio").ToString.ToEntero cevent.NombreAcercamiento = dr("NombreAcercamiento").ToString cevent.CveActivoFijo = dr("CveActivoFijo").ToString.ToEntero cevent.AFCodigo = dr("AFCodigo").ToString cevent.CveMovimiento = dr("CveMovimientoAlmacen").ToString.ToEntero cevent.MovimientoFolio = dr("MovimientoFolio").ToString cevent.CveIE = dr("CveIE").ToString.ToEntero cevent.FolioIE = dr("FolioIE").ToString '11/05/2018 - Evento Gasto Recurrente cevent.CveTipoEvento = dr("CveTipoEvento").ToString.ToEntero If cevent.CveTipoEvento = 10 Then cevent.Importe = dr("Importe").ToString.ToDouble End If If cevent.CveEventoEstatus.ToString.ToEntero = 3 Then cevent.backgroundColor = "#1BBC9B" End If If CveOS = -2 Then cevent.backgroundColor = DT_SubProyectos.FiltroPrimeroValor("backgroundColor", $" CveSubProyecto = {cevent.CveSubProyectoUsuarioAtendio } ") cevent.backgroundColor = If(cevent.backgroundColor.Trim = "", "#1BBC9B", cevent.backgroundColor.Trim) End If If usuarioActual_.Empresa.Funcionalidad(578) = "1" Then Dim colorString As String = dr("BackgroundColorOS").ToString.Trim If colorString.Length > 0 AndAlso IsValidHtmlColor(colorString) Then cevent.backgroundColor = $"#{colorString}" Else If dr("TipoEstatusOS").ToString.ToEntero.Contiene(1, 2, 3) Then cevent.backgroundColor = "#006699" ElseIf dr("TipoEstatusOS").ToString.ToEntero.Contiene(4) Then cevent.backgroundColor = "#025716" ElseIf dr("TipoEstatusOS").ToString.ToEntero.Contiene(5) Then cevent.backgroundColor = "#730505" Else cevent.backgroundColor = "#006699" End If End If End If 'VERIFICAMOS SI TIENE O NO RECURRENCIA If Not cevent.recurrenciatipo > 0 Then 'AGREGAMOS CUANDO NO ES RECURRENTE Dim tFecha As DateTime = DateAdd(DateInterval.Month, -6, ClsPaginas.NowADS()) 'SI LA FECHA DEL EVENTO ES MENOR DE 6 MESES DE LA FECHA ACTUAL NO LO AGREGA If dr("FechaFin").ToString.ToDateTime > tFecha Or dr("FechaInicio").ToString.ToDateTime > tFecha Then events.Add(cevent) End If Else 'EMPIEZA METODO PARA AGREGAR CUANDO SI ES RECURRENTE Dim FinRecurrencia = cevent.recurrenciafin.ToEntero Dim FI As DateTime, FF As DateTime, FT As DateTime Dim DiasSemana = cevent.diassemana.Split(","c) FI = cevent.start.ToDateTime FF = cevent.end.ToDateTime 'OBTENEMOS LA FECHA TERMINO (FT) DE LA RECURRENCIA Select Case FinRecurrencia Case -1 FT = DateAdd(DateInterval.Year, 2, dr("FechaInicio").ToString.ToDateTime) Case 0 FT = dr("RecurrenciaFin").ToString.ToDate Case Is > 0 FinRecurrencia -= 1 Select Case cevent.recurrenciatipo Case 1 FT = DateAdd(DateInterval.Hour, FinRecurrencia * cevent.frecuencia, dr("FechaInicio").ToString.ToDateTime) Case 2 FT = DateAdd(DateInterval.Day, FinRecurrencia * cevent.frecuencia, dr("FechaInicio").ToString.ToDateTime) Case 3 FT = DateAdd(DateInterval.WeekOfYear, FinRecurrencia * cevent.frecuencia, dr("FechaInicio").ToString.ToDateTime) FT = DateAdd(DateInterval.Day, (7 - Weekday(FT)).ToString.ToDouble, FT) Case 4 FT = DateAdd(DateInterval.Month, FinRecurrencia * cevent.frecuencia, dr("FechaInicio").ToString.ToDateTime) Case 5 FT = DateAdd(DateInterval.Year, FinRecurrencia * cevent.frecuencia, dr("FechaInicio").ToString.ToDateTime) End Select End Select 'SI ES TIPO SEMANAL Y DIASSEMANA TIENE VALORES CHECKEA ESTOS VALORES Do If DiasSemana.Length > 0 AndAlso DiasSemana(0) <> "" Then For Each drDias As String In DiasSemana Dim FIT = FI, FFT = FF FIT = DateAdd(DateInterval.Day, (drDias.ToEntero - Weekday(FI)).ToString.ToDouble, FI) FFT = DateAdd(DateInterval.Day, (drDias.ToEntero - Weekday(FF)).ToString.ToDouble, FF) cevent = New CalendarEvent() cevent.id = dr("CveEvento").ToString.ToEntero cevent.title = dr("Asunto").ToString cevent.description = dr("Descripcion").ToString cevent.start = String.Format("{0:s}", FIT) cevent.end = String.Format("{0:s}", FFT) cevent.allDay = False cevent.CveEventoEstatus = dr("CveEventoEstatus").ToString.ToEntero cevent.cveagendatipo = dr("CveAgendaTipo").ToString cevent.prioridad = dr("CvePrioridad").ToString.ToEntero cevent.backgroundColor = dr("BackGroundColor").ToString cevent.recurrenciatipo = dr("RecurrenciaTipo").ToString.ToEntero cevent.frecuencia = dr("Frecuencia").ToString.ToEntero cevent.diassemana = dr("DiasSemana").ToString cevent.dia = dr("Dia").ToString.ToEntero cevent.mes = dr("Mes").ToString.ToEntero cevent.recurrenciafin = dr("RecurrenciaFin").ToString cevent.CveProspecto = dr("CveProspecto").ToString.ToEntero cevent.Prospecto = dr("Prospecto").ToString '11/05/2018 - Evento Gasto Recurrente cevent.CveTipoEvento = dr("CveTipoEvento").ToString.ToEntero If cevent.CveTipoEvento = 10 Then cevent.Importe = dr("Importe").ToString.ToDouble End If If cevent.CveEventoEstatus.ToString.ToEntero = 3 Then cevent.backgroundColor = "#1BBC9B" End If 'SI LA FECHA DEL EVENTO ES MENOR DE 6 MESES DE LA FECHA ACTUAL Y/0 SI LA FECHA INICIAL DE LA RECURRENCIA ES MENOR A LA FECHA QUE SE CREO EL EVENTO NO LO AGREGA If FIT > DateAdd(DateInterval.Month, -6, ClsPaginas.NowADS()) And FIT >= dr("FechaInicio").ToString.ToDateTime Then events.Add(cevent) End If Next Else cevent = New CalendarEvent() cevent.id = dr("CveEvento").ToString.ToEntero cevent.title = dr("Asunto").ToString cevent.description = dr("Descripcion").ToString cevent.start = String.Format("{0:s}", FI) cevent.end = String.Format("{0:s}", FF) cevent.allDay = False cevent.CveEventoEstatus = dr("CveEventoEstatus").ToString.ToEntero cevent.cveagendatipo = dr("CveAgendaTipo").ToString cevent.prioridad = dr("CvePrioridad").ToString.ToEntero cevent.backgroundColor = dr("BackGroundColor").ToString cevent.recurrenciatipo = dr("RecurrenciaTipo").ToString.ToEntero cevent.frecuencia = dr("Frecuencia").ToString.ToEntero cevent.diassemana = dr("DiasSemana").ToString cevent.dia = dr("Dia").ToString.ToEntero cevent.mes = dr("Mes").ToString.ToEntero cevent.recurrenciafin = dr("RecurrenciaFin").ToString cevent.CveProspecto = dr("CveProspecto").ToString.ToEntero cevent.Prospecto = dr("Prospecto").ToString '11/05/2018 - Evento Gasto Recurrente cevent.CveTipoEvento = dr("CveTipoEvento").ToString.ToEntero If cevent.CveTipoEvento = 10 Then cevent.Importe = dr("Importe").ToString.ToDouble End If If cevent.CveEventoEstatus.ToString.ToEntero = 3 Then cevent.backgroundColor = "#1BBC9B" End If 'SI LA FECHA DEL EVENTO ES MENOR DE 6 MESES DE LA FECHA ACTUAL NO LO AGREGA If FI > DateAdd(DateInterval.Month, -6, ClsPaginas.NowADS()) Then events.Add(cevent) End If End If Select Case cevent.recurrenciatipo Case 1 FI = DateAdd(DateInterval.Hour, cevent.frecuencia, FI) FF = DateAdd(DateInterval.Hour, cevent.frecuencia, FF) Case 2 FI = DateAdd(DateInterval.Day, cevent.frecuencia, FI) FF = DateAdd(DateInterval.Day, cevent.frecuencia, FF) Case 3 FI = DateAdd(DateInterval.WeekOfYear, cevent.frecuencia, FI) FF = DateAdd(DateInterval.WeekOfYear, cevent.frecuencia, FF) Case 4 FI = DateAdd(DateInterval.Month, cevent.frecuencia, FI) FF = DateAdd(DateInterval.Month, cevent.frecuencia, FF) Case 5 FI = DateAdd(DateInterval.Year, cevent.frecuencia, FI) FF = DateAdd(DateInterval.Year, cevent.frecuencia, FF) End Select Loop Until FI > FT End If End If Next Catch ex As Exception GuardaLog(ex.ToString()) End Try End If End If ObjEventos.Dispose() Return ErrorEventos End Function ReadOnly Property UsuarioActual(ByVal context As HttpContext) As Usuario Get UsuarioActual = DirectCast(If(context IsNot Nothing, context.Session("UsuarioSIG", Nothing)), Usuario) End Get End Property Private Function IsValidHtmlColor(colorString As String) As Boolean Try Dim color As System.Drawing.Color = System.Drawing.ColorTranslator.FromHtml(colorString) ' Si no se produce una excepción, el color es válido Return True Catch ex As Exception ' Se produce una excepción, el color no es válido Return False End Try End Function End Class