<%@ WebHandler Language="VB" Class="TareasProgramadas" %> Imports System Imports System.Web Imports System.Data Imports Newtonsoft.Json Imports Newtonsoft.Json.Linq Imports Extensiones Imports System.IO Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Imports Microsoft.Reporting.WebForms Public Class TareasProgramadas : Implements IHttpHandler Private ReadOnly Property GlobalDTUsuariosE140(Optional CveUsuario As Integer = -1, Optional CveCliente As Integer = -1, Optional CveProveedor As Integer = -1) As DataTable Get Dim CveEmpresa As Integer = 140 Dim Str As New StringBuilder If CveUsuario <> -1 Then Str.AppendFormat("CveUsuario = {0}", CveUsuario) If CveEmpresa <> -1 Then Str.AppendFormat(" {0} CveEmpresa = {1}", If(Str.Length > 0, "AND", ""), CveEmpresa) If CveCliente <> -1 Then Str.AppendFormat(" {0} CveCliente = {1}", If(Str.Length > 0, "AND", ""), CveCliente) If CveProveedor <> -1 Then Str.AppendFormat(" {0} CveProveedor = {1}", If(Str.Length > 0, "AND", ""), CveProveedor) If CveUsuario <> -1 OrElse CveEmpresa <> -1 Then Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTUsuarios"), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) GlobalDTUsuariosE140 = Dv.ToTable Dv.Dispose() Else GlobalDTUsuariosE140 = DirectCast(HttpContext.Current.Application("GlobalDTUsuarios"), DataTable) End If End Get End Property Public Shared ReadOnly Property GlobalDTSubProyectosE140(CveProyecto As Integer, Optional CveSubProyecto As Integer = -1, Optional Estatus As Integer = 1) As DataTable Get Dim CveEmpresa As Integer = 140 Dim AppNombre As String = String.Format("GlobalDTSubProyectos-{0}", CveEmpresa) 'sino existe, recarga los datos If DirectCast(HttpContext.Current.Application(AppNombre), DataTable) Is Nothing Or (DirectCast(HttpContext.Current.Application(AppNombre), DataTable) IsNot Nothing AndAlso DirectCast(HttpContext.Current.Application(AppNombre), DataTable).Rows.Count = 0) Then Dim P As New ClsSubProyectos If P.GetSubProyectos(CveEmpresa:=CveEmpresa) Then HttpContext.Current.Application(AppNombre) = P.DtResultados P.Dispose() End If If CveProyecto <> -1 OrElse CveSubProyecto <> -1 OrElse CveEmpresa <> -1 OrElse Estatus <> -1 Then Dim StrSQL As New StringBuilder If CveProyecto <> -1 Then StrSQL.AppendFormat(" AND CveProyecto = {0}", CveProyecto) If CveSubProyecto <> -1 Then StrSQL.AppendFormat(" AND CveSubProyecto = {0}", CveSubProyecto) If Estatus <> -1 Then StrSQL.AppendFormat(" AND CveEstatus = {0}", Estatus) If CveEmpresa <> -1 Then StrSQL.AppendFormat(" AND CveEmpresa = {0}", CveEmpresa) Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), StrSQL.ToString.Trim.TrimStart("A"c, "N"c, "D"c), "", DataViewRowState.CurrentRows) GlobalDTSubProyectosE140 = Dv.ToTable Dv.Dispose() Else GlobalDTSubProyectosE140 = DirectCast(HttpContext.Current.Application(AppNombre), DataTable) End If End Get End Property Private currentcontext As HttpContext Private URLParametros As New Hashtable Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest context.Response.ContentType = "text/plain" currentcontext = context Dim retorno As String = "no se encontro la variable" Try Dim metodo As String = "" Dim FechaActual As DateTime = ClsPaginas.NowADS() Dim FechaEnvio As DateTime = FechaActual If context.Request("var") IsNot Nothing Then URLParametros = Parametros(context.Request("var")) metodo = URLParametros("metodo").ToString 'SI TRAE UN JSON COMO PARAMETRO ElseIf context.Request("metodo") IsNot Nothing Then metodo = context.Request("metodo").ToString() If context.Request("FechaEnvio") IsNot Nothing Then FechaEnvio = context.Request("FechaEnvio").ToString().ToDateTime() End If End If Select Case metodo Case "TimbrarNomina" retorno = "Error Timbrado Nomina" retorno = timbrarNomina() retorno = "" context.Response.Write(retorno) Case "EstadosCuenta" 'CargaEstadosCuenta(context, 119, 227774) CargaEstadosCuenta(context, 119, -1, FechaEnvio, FechaActual) Case "ScoreCard" CargaScoreCard(context, 140, FechaEnvio) End Select Catch ex As Exception ex.GuardaLog(ex.ToString()) context.Response.Write(retorno) End Try End Sub Public Sub timbrarNominab() Dim cveEmpresa As Integer = 5 Dim Dv As New DataView(DirectCast(currentcontext.Application("GlobalDTUsuarios"), DataTable), $"CveUsuario = 100 AND CveEmpresa ={cveEmpresa}", "", DataViewRowState.CurrentRows) Dim GlobalDTUsuarios As DataTable = Dv.ToTable Dv.Dispose() Dim usuario As Usuario = Nothing 'Dim UsuarioAsignaciones As Usuario If GlobalDTUsuarios.Rows.Count > 0 Then Dim dtrow As DataRow = GlobalDTUsuarios.Rows(0) Dim ObjUsuario As New ClsSisUsuarios usuario = ObjUsuario.ValidaUsuario(dtrow("Usuario").ToString, dtrow("Contraseña").ToString, IMEI, cveEmpresa) ObjUsuario.Dispose() Dim ObjEmpresa As New ClsSisEmpresas() If ObjEmpresa.GetEmpresas(cveEmpresa, "-1", "-1", "-1", "-1") Then If ObjEmpresa.GetEmpresasFuncionalidades(cveEmpresa) Then Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados Dim EmpresasFuncionalidades As New HybridDictionary For Each Row As Data.DataRow In dttmp.Rows EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) Next ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) End If usuario.Empresa = ObjEmpresa.Empresa usuario.CveEmpresa = ObjEmpresa.Empresa.CveEmpresa ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CambiarEmpresa, Nothing, ObjEmpresa.Empresa.CveEmpresa) Else End If ObjEmpresa.Dispose() Dim StrErrores As New StringBuilder Dim Msg As String = String.Empty Dim CvePeriodo As Integer Dim CveNomina As Integer Dim CvePersonal As Integer Dim SerieFolio As String Dim DtNominas As New DataTable Dim objnom As New ClsNominas objnom.GetNom_porTimbrar(usuario.CveEmpresa) DtNominas = objnom.DtResultados 'DtNominas = New DataTable Dim noCiclos As Integer = 0 Dim noTotal As Integer = DtNominas.Rows.Count Dim lognom As New LogicNominas For Each Row As DataRow In DtNominas.Rows 'If noCiclos < 4 Then noCiclos = noCiclos + 1 CveNomina = Row("CveNomina").ToString().ToEntero() CvePersonal = Row("CvePersonal").ToString().ToEntero() SerieFolio = Row("SerieFolio").ToString() CvePeriodo = Row("CvePeriodo").ToString.ToEntero If CveNomina > 0 Then Msg = lognom.TimbrarNomina(CveNomina, CvePersonal, CvePeriodo, usuario) If Msg.Trim <> String.Empty Then StrErrores.Append(Msg & "
") End If 'Else ' Exit For 'End If Next GC.Collect() StrErrores.ToString().GuardaLog() If StrErrores.ToString().Length > 0 And CvePeriodo > 0 Then Dim ObjPeriodo As New ClsNominas() ObjPeriodo.CambiaEstatusPeriodo(CvePeriodo, enumNominasEstatus.Timbrada, usuario.CveUsuario, usuario.CveEmpresa) ObjPeriodo.Dispose() 'EnvioMasivoCorreo() 'Dim temp As String = DdlPeriodo.SelectedValue 'CargaPeriodos() 'BtnEmitir.Visible = False 'DdlPeriodo.SelectedValue = temp End If End If End Sub Private Function GetUsuario(CveEmpresa As Integer, Optional CveUsuario As Integer = -1, Optional username As String = "", Optional pass As String = "") As Usuario Dim usuario As Usuario = Nothing #Region "Valido que los campos usuario contraseña no sean nulos" If IsNothing(username) Then username = "" End If If IsNothing(pass) Then pass = "" End If #End Region #Region "Si el CveUsuario es mayor que cero asigno el username y pass la de la CveUsuario" If CveUsuario > 0 Then Using Dv As New DataView(DirectCast(currentcontext.Application("GlobalDTUsuarios"), DataTable), $"CveUsuario = 100 AND CveEmpresa ={CveEmpresa}", "", DataViewRowState.CurrentRows) Using GlobalDTUsuarios As DataTable = Dv.ToTable() If GlobalDTUsuarios.Rows.Count > 0 Then Dim dtrow As DataRow = GlobalDTUsuarios.Rows(0) username = dtrow("Usuario").ToString pass = dtrow("Contraseña").ToString End If End Using End Using End If #End Region #Region "obtengo el usuario con el username y la pass" Using ObjUsuario As New ClsSisUsuarios() usuario = ObjUsuario.ValidaUsuario(username, pass, IMEI, CveEmpresa) End Using #End Region #Region "Asigno la empresa al usuario" If Not IsNothing(usuario) Then Using ObjEmpresa As New ClsSisEmpresas() If ObjEmpresa.GetEmpresas(CveEmpresa, "-1", "-1", "-1", "-1") Then If ObjEmpresa.GetEmpresasFuncionalidades(CveEmpresa) Then Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados Dim EmpresasFuncionalidades As New HybridDictionary For Each Row As Data.DataRow In dttmp.Rows EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) Next ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) End If usuario.Empresa = ObjEmpresa.Empresa usuario.CveEmpresa = ObjEmpresa.Empresa.CveEmpresa Else End If End Using End If #End Region Return usuario End Function Public Function timbrarNomina() As String Dim retorno As String = "" Dim cveEmpresa As Integer = URLParametros("CveEmpresa").ToString().ToEntero() Dim CvePeriodo As Integer = URLParametros("CvePeriodo").ToString().ToEntero() Dim CveNomina As Integer = URLParametros("CveNomina").ToString().ToEntero() Dim CvePersonal As Integer = URLParametros("CvePersonal").ToString().ToEntero() Dim usuario As Usuario = GetUsuario(cveEmpresa, 100) If Not IsNothing(usuario) Then Dim StrErrores As New StringBuilder Dim Msg As String = String.Empty Dim lognom As New LogicNominas If CveNomina > 0 Then Msg = lognom.TimbrarNomina(CveNomina, CvePersonal, CvePeriodo, usuario) If Msg.Trim() <> String.Empty Then StrErrores.Append(Msg) retorno = Msg.Trim() Else retorno = "Nomina invalida periodo timbrar" End If 'Using ObjPeriodo As New ClsNominas() ' If StrErrores.ToString().Length > 0 Then ' ObjPeriodo.CambiaEstatusPeriodo(CvePeriodo, enumNominasEstatus.ErrorEnTimbrado, usuario.CveUsuario, usuario.CveEmpresa) ' Else ' ObjPeriodo.CambiaEstatusPeriodo(CvePeriodo, enumNominasEstatus.Timbrada, usuario.CveUsuario, usuario.CveEmpresa) ' End If 'End Using Else retorno = "No se encontro el usuario" Me.GuardaLog(String.Format("Error Timbrado Nomina CveEmpresa:{0} ", usuario.CveEmpresa)) End If Return retorno End Function Private Function Parametros(Cadena As String) As Hashtable Cadena = Decripta(Cadena) Dim P1() As String = Cadena.Split("&"c) Dim Tmp As String Dim P2() As String Dim URLParametros As New Hashtable For Each Tmp In P1 P2 = Tmp.Replace("%26%", "&").Split("="c) URLParametros.Add(P2(0).ToString(), P2(1)) Next Return URLParametros End Function Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End Property #Region "E S T A D O S D E C U E N T A" Private Sub CargaEstadosCuenta(ByVal context As HttpContext, pCveEmpresa As Integer, pCveCliente As Integer, FechaEnvio As DateTime, FechaActual As DateTime) Dim Retorno As New JArray() Dim DtEmpresas As DataTable = Nothing Using ObjEmpresas As New ClsSisEmpresas() If ObjEmpresas.GetEmpresas(pCveEmpresa, "-1", "-1", "-1", "-1") Then DtEmpresas = ObjEmpresas.DtResultados.FiltraParametros("", "", {"CveEmpresa"}) End If End Using If DtEmpresas IsNot Nothing Then For Each Row As DataRow In DtEmpresas.Rows Dim Usuario = ValidaUsuarioSistema(Row("CveEmpresa").ToString().ToEntero()) Dim obj = EjecutarEnvioEstadoCuenta(Usuario, FechaEnvio, FechaActual, pCveCliente:=pCveCliente) Retorno.Add(obj) Next DtEmpresas.Dispose() End If GuardaLogEdoCuenta(Retorno.ToString()) context.Response.Write("True") End Sub Private Function ValidaUsuarioSistema(CveEmpresa As Integer) As Usuario Dim UsuarioActual As Usuario = Nothing Dim ObjUsuarios As New ClsSisUsuarios If ObjUsuarios.GetUsuarios(100) Then If ObjUsuarios.DtResultados.Rows.Count > 0 Then Dim Usuario = ObjUsuarios.DtResultados.Rows(0)("Usuario").ToString() Dim Contrasenia = ObjUsuarios.DtResultados.Rows(0)("Contraseña").ToString() UsuarioActual = ObjUsuarios.ValidaUsuario(Usuario, Contrasenia, IMEI, CveEmpresa) UsuarioActual.CveEmpresa = CveEmpresa CreaObjetoEmpresa(UsuarioActual) End If End If ObjUsuarios.Dispose() Return UsuarioActual End Function Private Sub CreaObjetoEmpresa(ByRef UsuarioActual As Usuario) Dim ObjEmpresa As New ClsSisEmpresas() If ObjEmpresa.GetEmpresas(UsuarioActual.CveEmpresa, "-1", "-1", "-1", "-1") Then If ObjEmpresa.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados Dim EmpresasFuncionalidades As New HybridDictionary For Each Row As Data.DataRow In dttmp.Rows EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) Next ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) End If UsuarioActual.Empresa = ObjEmpresa.Empresa End If ObjEmpresa.Dispose() End Sub Private Function EjecutarEnvioEstadoCuenta(UsuarioActual As Usuario, FechaEnvio As DateTime, FechaActual As DateTime, Optional pCveCliente As Integer = -1) As JObject Dim ClientesSinEnviar As New JArray() Dim ClientesEdoEnviado As New JArray() Dim Json As New JObject( New JProperty("Empresa", UsuarioActual.Empresa.Empresa), New JProperty("Usuario", UsuarioActual.Usuario), New JProperty("Fecha", ClsPaginas.NowADS().ToString("dd/MM/yyy HH:mm:ss")) ) Dim DTClientes As DataTable = Nothing Dim EnviarPendientes As Boolean = False If FechaActual <> FechaEnvio Then EnviarPendientes = True End If If Not EnviarPendientes Then Using ObjMov As New ClsMovimientos Dim FechaI As String = "-1" Dim FechaF As String = "-1" Dim FechaVI As String = "-1" Dim FechaVF As String = "-1" Dim TCEspecifico = -1 Dim CveCobranzaEstatus As Integer = -1 Dim CveClienteClasificacion As Integer = -1 Dim CveCliente As Integer = -1 Dim AplicaAnticipos As Integer = 0 Dim CveSubProyecto As Integer = -1 Dim CveVendedor As Integer = -1 Dim Grupo As Integer = 5 Dim TipoCambio As Integer = 1 Dim TipoDocto As String = "Ing" Dim FechaCorte As DateTime = New DateTime(ClsPaginas.NowADS().Year, 12, 31) If ObjMov.GetCxC(FechaI, FechaF, CveCliente, CveSubProyecto, CveVendedor, -1, -1, "-1", UsuarioActual.CveEmpresa, Grupo, -1, TipoCambio, TCEspecifico, TipoDocto, FechaVI, FechaVF, FechaCorte:=FechaCorte, EstatusCliente:=1, CveUsuarioConsulta:=UsuarioActual.CveUsuario, CveCobranzaEstatus:=CveCobranzaEstatus, CveClienteClasificacion:=-1, TipoCliente:=-1, AplicaAnticiposPagados:=AplicaAnticipos) Then DTClientes = ObjMov.DtResultados.FiltraParametros("CveCliente > 0", DistinctColumns:={"CveCliente"}) End If End Using End If If DTClientes IsNot Nothing OrElse EnviarPendientes Then DTClientes = DTClientes.FiltraParametros("CveCliente NOT IN (228080,228565,228910,233126,231465,232730,232697,227338)") Dim DtNotificaciones As DataTable = Nothing Dim TieneErrorRegistro As Boolean = False Dim ObjMovimientos As New ClsMovimientos ObjMovimientos.IniciaTransacSQL() If Not EnviarPendientes Then Try For Each RowCliente As DataRow In DTClientes.Rows If Not ObjMovimientos.AddNotificacionEdoCuentaCliente(RowCliente("CveCliente").ToString().ToEntero(), FechaEnvio) Then GuardaLog("Ocurrio un error al agregar las notificaciones de edo cuenta. CveCliente: " + RowCliente("CveCliente").ToString()) TieneErrorRegistro = True Exit For End If Next Catch ex As Exception GuardaLog("Ocurrio un error al agregar las notificaciones de edo cuenta" + ex.ToString()) TieneErrorRegistro = True End Try End If If Not TieneErrorRegistro Then If ObjMovimientos.GetNotificacionEdoCuentaCliente(UsuarioActual.CveEmpresa, -1, FechaEnvio) Then DtNotificaciones = ObjMovimientos.DtResultados.Copy() Else TieneErrorRegistro = True End If End If If Not TieneErrorRegistro Then ObjMovimientos.Commit() Else ObjMovimientos.RollBack() If DtNotificaciones IsNot Nothing Then DtNotificaciones.Clear() DtNotificaciones = Nothing End If End If ObjMovimientos.Dispose() If DTClientes IsNot Nothing Then DTClientes.Dispose() End If Try If DtNotificaciones IsNot Nothing Then For Each Row As DataRow In DtNotificaciones.Rows Dim CveCliente As Integer = Row("CveCliente").ToString().ToEntero() Dim Cliente As New Modelos.ClienteModel(CveCliente, UsuarioActual.CveEmpresa) If Cliente IsNot Nothing Then Dim Correo As String = Cliente.CobranzaCorreo Dim Envio As Boolean = False If Not String.IsNullOrEmpty(Correo) Then Envio = EnviarEstadoCuenta(UsuarioActual, Correo, Cliente) End If If Envio Then Using ObjMov As New ClsMovimientos ObjMov.UpdateNotificacionEdoCuentaCliente(Row("CveNotificacionBitacora").ToString().ToEntero(), Notifico:=True) End Using ClientesEdoEnviado.Add(New JObject( New JProperty("CveCliente", Cliente.CveCliente), New JProperty("Cliente", Cliente.Nombre) )) Using ObjBitacora As New ClsOIEventos ObjBitacora.AddEventoBitacora("Se envió correo con el estado de cuenta del cliente", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCliente:=Cliente.CveCliente) End Using Else ClientesSinEnviar.Add(New JObject( New JProperty("CveCliente", Cliente.CveCliente), New JProperty("Cliente", Cliente.Nombre) )) End If End If Next End If Catch ex As Exception GuardaLog("Ocurrio un error al agregar las notificaciones de edo cuenta. " + ex.ToString()) End Try If DtNotificaciones IsNot Nothing Then DtNotificaciones.Dispose() End If End If Json.Add(New JProperty("ClientesSinEnviar", ClientesSinEnviar)) Json.Add(New JProperty("ClientesEdoEnviado", ClientesEdoEnviado)) Return Json End Function Private Function EnviarEstadoCuenta(UsuarioActual As Usuario, Correo As String, Cliente As Modelos.ClienteModel) As Boolean Dim Retorno As Boolean = True Try Dim ArchivoPDF As Byte() = Nothing Dim Formato As String = "PDF" Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/RepClientesCxC.rpt", UsuarioActual.Empresa.Ruta)) Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) 'OBTENEMOS LOS DATOS Dim DtCxCFact As DataTable = Nothing Dim SaldoIngDolares As Double = 0 Dim SaldoIngPesos As Double = 0 Dim SaldoIngDolaresPesos As Double = 0 Dim TotalIng As Double = 0 Dim SaldoAntDolares As Double = 0 Dim SaldoAntPesos As Double = 0 Dim SaldoAntDolaresPesos As Double = 0 Dim TotalAnt As Double = 0 Dim ContaIng As Integer = 0 Dim ContaAnt As Integer = 0 Dim FechaCorte As Date = ("9999/01/01").ToDate Dim TipoDocto2 As String = "'Ing'" Dim FechaVencimientoI As String = "-1" Dim FechaVencimientoF As String = "-1" Dim FI As String = "-1" Dim FF As String = "-1" Dim dtt As DataTable = Nothing Try Using ObjMovtos As New ClsMovimientos() If ObjMovtos.GetCxCClienteDetalle(Cliente.CveCliente, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa, CveClienteSucursal:=-1) Then DtCxCFact = ObjMovtos.DtResultados.FiltraParametros("Tipo = 'Act'", "TipoDocto") 'cargo los anticipos NC DtCxCFact.Columns.Add("SaldoAnticipo", GetType(Decimal)) If ObjMovtos.GetAnticiposNCIxCCliente(Cliente.CveCliente, -1, -1) Then dtt = ObjMovtos.DtResultados.FiltraParametros("Saldo > 0 AND SaldoVentaAnticipo = 0 AND ((Tipo = 'IxC' AND CveIE > 0) OR (Tipo = 'Ant' AND CveVenta > 0) OR (Tipo = 'NC' AND CveVenta > 0) OR (Tipo = 'Egs' AND CveVenta > 0) )") End If End If End Using Catch ex As Exception Retorno = False dtt = Nothing GuardaLog("Ocurrió un erro al obtener el CxC. " + ex.ToString()) End Try If Not Retorno Then Return Retorno End If Try If dtt IsNot Nothing AndAlso dtt.Rows.Count > 0 Then For Each drt As DataRow In dtt.Rows Dim drr As DataRow = DtCxCFact.NewRow drr("TipoDocto") = drt("Tipo") drr("SerieFolio") = drt("Folio") drr("Original") = drt("Original") drr("TipoCambio") = drt("TipoCambio") drr("Saldo") = 0 drr("SaldoAnticipo") = drt("Saldo") drr("Fecha") = drt("Fecha") drr("Moneda") = drt("Moneda") drr("CveMoneda") = drt("CveMoneda") DtCxCFact.Rows.Add(drr) Next End If If DtCxCFact IsNot Nothing Then For Each Row As DataRow In DtCxCFact.FiltraParametros($"TipoDocto IN ({TipoDocto2})").Rows If Row("TipoDocto").ToString = "Ing" Or Row("TipoDocto").ToString = "Rem" Or (Row("TipoDocto").ToString = "Ant" And Row("Saldo").ToString.ToDouble > 0) Then 'Ingresos ContaIng = ContaIng + 1 If Row("CveMoneda").ToString.ToEntero = 1 Then SaldoIngPesos = SaldoIngPesos + Row("Saldo").ToString.ToDouble ElseIf Row("CveMoneda").ToString.ToEntero = 2 Then SaldoIngDolares = SaldoIngDolares + Row("Saldo").ToString.ToDouble SaldoIngDolaresPesos = SaldoIngDolaresPesos + (Row("Saldo").ToString.ToDouble * Row("TipoCambio").ToString.ToDouble) End If ElseIf (Row("TipoDocto").ToString = "Ant" And Row("Saldo").ToString.ToDouble = 0) Or Row("TipoDocto").ToString = "IxC" Or Row("TipoDocto").ToString = "NC" Or Row("TipoDocto").ToString = "Dev" Then 'Anticipos, NC, IxC ContaAnt = ContaAnt + 1 If Row("CveMoneda").ToString.ToEntero = 1 Then If Row("TipoDocto").ToString = "Dev" Then SaldoAntPesos = SaldoAntPesos + Row("Saldo").ToString.ToDouble Else SaldoAntPesos = SaldoAntPesos + Row("SaldoAnticipo").ToString.ToDouble End If ElseIf Row("CveMoneda").ToString.ToEntero = 2 Then SaldoAntDolares = SaldoAntDolares + Row("Saldo").ToString.ToDouble SaldoAntDolaresPesos = SaldoAntDolaresPesos + (Row("SaldoAnticipo").ToString.ToDouble * Row("TipoCambio").ToString.ToDouble) End If End If Next End If TotalIng = SaldoIngPesos + SaldoIngDolaresPesos TotalAnt = SaldoAntPesos + SaldoAntDolaresPesos If TotalIng.RoundSQL(2) = 0 AndAlso TotalAnt.RoundSQL(2) = 0 Then Retorno = False Return Retorno End If Dim DtCxCFact2 As DataTable = DtCxCFact.FiltraParametros($"TipoDocto IN ({TipoDocto2})") 'INGRESOS If SaldoIngPesos > 0 Then Dim drr As DataRow = DtCxCFact2.NewRow drr("SerieFolio") = "Total Ing Pesos" drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") drr("Saldo") = SaldoIngPesos drr("CveMoneda") = 1 DtCxCFact2.Rows.Add(drr) End If If SaldoIngDolares > 0 Then Dim drr As DataRow = DtCxCFact2.NewRow drr("SerieFolio") = "Total Ing Dólares" drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 2").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 2").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") drr("Saldo") = SaldoIngDolares drr("CveMoneda") = 2 DtCxCFact2.Rows.Add(drr) End If 'ANTICIPOS If SaldoAntPesos > 0 Then Dim drr As DataRow = DtCxCFact2.NewRow drr("SerieFolio") = "Total Pesos" drr("SaldoAnticipo") = SaldoAntPesos drr("CveMoneda") = 1 DtCxCFact2.Rows.Add(drr) End If If SaldoAntDolares > 0 Then Dim drr As DataRow = DtCxCFact2.NewRow drr("SerieFolio") = "Total Dólares" drr("SaldoAnticipo") = SaldoAntDolares drr("CveMoneda") = 2 DtCxCFact2.Rows.Add(drr) End If If DtCxCFact2 IsNot Nothing AndAlso DtCxCFact2.Rows.Count > 0 Then Dim dr As DataRow = DtCxCFact2.Rows(0) Dim lista = New List(Of CrystalParametro) lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) lista.Add(New CrystalParametro("TipoCuentas", "Con Saldo")) lista.Add(New CrystalParametro("NombreCliente", Cliente.Nombre)) lista.Add(New CrystalParametro("FechaInicio", If(FI = "-1", "-", FI))) lista.Add(New CrystalParametro("FechaFin", If(FF = "-1", ClsPaginas.NowADS().ToShortDateString, FF))) lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) lista.Add(New CrystalParametro("DireccionCliente", String.Format("Calle {0} #{1} Colonia {2}", Cliente.Direccion, If(Cliente.NoExt = "", "S/N", Cliente.NoExt), Cliente.Colonia))) lista.Add(New CrystalParametro("ClienteCP", Cliente.CP)) lista.Add(New CrystalParametro("ClienteCiudad", Cliente.Ciudad)) lista.Add(New CrystalParametro("ClienteRFC", Cliente.RFC)) lista.Add(New CrystalParametro("ClienteTelefono", Cliente.Telefono)) lista.Add(New CrystalParametro("DiasCredito", Cliente.PlazoCobranza)) lista.Add(New CrystalParametro("LimiteCredito", Cliente.LimiteCredito)) lista.Add(New CrystalParametro("SaldoDisponible", (Cliente.LimiteCredito - DtCxCFact2(0)("Saldo").ToString.ToDouble).FormatoNumero)) lista.Add(New CrystalParametro("SaldoIngDolares", SaldoIngDolares.FormatoNumero)) lista.Add(New CrystalParametro("SaldoIngPesos", SaldoIngPesos.FormatoNumero)) lista.Add(New CrystalParametro("TotalIng", TotalIng.FormatoNumero)) lista.Add(New CrystalParametro("SaldoAntDolares", SaldoAntDolares.FormatoNumero)) lista.Add(New CrystalParametro("SaldoAntPesos", SaldoAntPesos.FormatoNumero)) lista.Add(New CrystalParametro("TotalAnt", TotalAnt.FormatoNumero)) lista.Add(New CrystalParametro("ContaIng", ContaIng)) lista.Add(New CrystalParametro("ContaAnt", ContaAnt)) If Imagen.Exists Then lista.Add(New CrystalParametro("LogoPath", logouri)) Else lista.Add(New CrystalParametro("LogoPath", "")) End If Try If Archivo.Exists Then ArchivoPDF = ImprimirPDFCrystal($"{UsuarioActual.Empresa.Ruta}Formatos/RepClientesCxC.rpt", DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) Else ArchivoPDF = ImprimirPDFCrystal(HttpContext.Current.Server.MapPath("~/Empresas/Grales/Formatos/RepClientesCxC.rpt"), DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) End If Catch ex As Exception ArchivoPDF = Nothing GuardaLog("Ocurrió un erro al obtener el CxC" + ex.ToString()) End Try Else Dim lista = New List(Of CrystalParametro) lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) lista.Add(New CrystalParametro("TipoCuentas", "Con Saldo")) lista.Add(New CrystalParametro("NombreCliente", Cliente.Nombre)) lista.Add(New CrystalParametro("FechaInicio", If(FI = "-1", "-", FI))) lista.Add(New CrystalParametro("FechaFin", If(FF = "-1", ClsPaginas.NowADS().ToShortDateString, FF))) lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) lista.Add(New CrystalParametro("DireccionCliente", String.Format("Calle {0} #{1} Colonia {2}", Cliente.Direccion, If(Cliente.NoExt = "", "S/N", Cliente.NoExt), Cliente.Colonia))) lista.Add(New CrystalParametro("ClienteCP", Cliente.CP)) lista.Add(New CrystalParametro("ClienteCiudad", Cliente.Ciudad)) lista.Add(New CrystalParametro("ClienteRFC", Cliente.RFC)) lista.Add(New CrystalParametro("ClienteTelefono", Cliente.Telefono)) lista.Add(New CrystalParametro("DiasCredito", Cliente.PlazoCobranza)) lista.Add(New CrystalParametro("LimiteCredito", Cliente.LimiteCredito)) lista.Add(New CrystalParametro("SaldoDisponible", (Cliente.LimiteCredito).FormatoNumero)) lista.Add(New CrystalParametro("SaldoIngDolares", SaldoIngDolares.FormatoNumero)) lista.Add(New CrystalParametro("SaldoIngPesos", SaldoIngPesos.FormatoNumero)) lista.Add(New CrystalParametro("TotalIng", TotalIng.FormatoNumero)) lista.Add(New CrystalParametro("SaldoAntDolares", SaldoAntDolares.FormatoNumero)) lista.Add(New CrystalParametro("SaldoAntPesos", SaldoAntPesos.FormatoNumero)) lista.Add(New CrystalParametro("TotalAnt", TotalAnt.FormatoNumero)) lista.Add(New CrystalParametro("ContaIng", ContaIng)) lista.Add(New CrystalParametro("ContaAnt", ContaAnt)) If Imagen.Exists Then lista.Add(New CrystalParametro("LogoPath", logouri)) Else lista.Add(New CrystalParametro("LogoPath", "")) End If Dim drr As DataRow = DtCxCFact2.NewRow drr("SerieFolio") = "Total Ing Pesos" drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") drr("Saldo") = 0 drr("SaldoAnticipo") = 0 drr("CveMoneda") = 1 DtCxCFact2.Rows.Add(drr) If Archivo.Exists Then ArchivoPDF = ImprimirPDFCrystal($"{UsuarioActual.Empresa.Ruta}Formatos/RepClientesCxC.rpt", DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) Else ArchivoPDF = ImprimirPDFCrystal(HttpContext.Current.Server.MapPath("~/Empresas/Grales/Formatos/RepClientesCxC.rpt"), DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) End If End If Catch ex As Exception GuardaLog("Ocurrió un error al generar el pdf" + ex.ToString()) ArchivoPDF = Nothing End Try If ArchivoPDF IsNot Nothing Then Try Dim Cuerpo As String = String.Format("Estimado cliente {0}, al presente del correo se anexa su estado actual de cartera en {1}.

Quedamos a sus ordenes para cualquier duda o aclaración con su agente de Ventas.


Gracias por la atención brindada al presente.
Reciba un cordial saludo.

ESTE CORREO SE GENERO EN FORMA AUTOMATICA.", Cliente.NombreComercial, UsuarioActual.Empresa.Empresa) Retorno = MandaCorreo(ArchivoPDF, Correo, $"Estado Actual de Cartera {UsuarioActual.Empresa.Empresa}", Cuerpo) Catch ex As Exception Retorno = False GuardaLog("Ocurrió error al mandar el correo de estado de cuenta. " + ex.ToString()) End Try Else Retorno = False End If Catch ex As Exception Retorno = False GuardaLog("Ocurrió error al mandar el correo de estado de cuenta" + ex.ToString()) End Try Return Retorno End Function Public Function ImprimirPDFCrystal(RutaReporte As String, DataSource As DataTable, Parametros As List(Of CrystalParametro), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportDocument = Nothing) As Byte() 'limpio ReportViwer Dim sw As New System.Diagnostics.Stopwatch() sw.Start() If IsNothing(MR) Then MR = New ReportDocument() Dim Bytes As Byte() = Nothing Dim formatType As ExportFormatType = ExportFormatType.NoFormat Try MR.Load(RutaReporte) MR.SetDataSource(DataSource) For Each item As CrystalParametro In Parametros MR.SetParameterValue(item.Nombre, item.Valor) Next Select Case Formato Case "PDF" formatType = ExportFormatType.PortableDocFormat 'Format = "Application/pdf" Case "EXCEL" formatType = ExportFormatType.Excel 'Format = "application/ms-excel" End Select Dim Stream As IO.Stream = MR.ExportToStream(formatType) Dim BD As New BinaryReader(MR.ExportToStream(formatType)) Bytes = BD.ReadBytes(CInt(MR.ExportToStream(formatType).Length)) BD.Dispose() Stream.Dispose() 'Dim Buffer(CInt(Stream.Length)) As Byte 'Bytes = Buffer 'MR.ExportToHttpResponse(formatType, Response, True, NombreArchivo) Catch ex As CrystalReportsException GuardaLog(If(ex.InnerException IsNot Nothing AndAlso ex.Message IsNot Nothing, $"Error: {If(ex.InnerException.Message, ex.Message)} | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} Ruta {RutaReporte}", $"Sin descripción - Ruta {RutaReporte}")) 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") Catch ex As Exception GuardaLog(If(ex.InnerException IsNot Nothing AndAlso ex.Message IsNot Nothing, $"Error: {If(ex.InnerException.Message, ex.Message)} | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} Ruta {RutaReporte}", $"Sin descripción - Ruta {RutaReporte}")) 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") End Try sw.Stop() If sw.Elapsed.TotalSeconds > 10 Then GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") End If If MR IsNot Nothing Then MR.Dispose() Return Bytes End Function Private Function MandaCorreo(File As Byte(), Para As String, Asunto As String, Body As String) As Boolean 'Para = "japmx95@gmail.com" Try Dim a As String = String.Format("{0} -- {1} ---- -->", Asunto, Para) 'a.GuardaLog() Dim Mail As New ClsSisMail() Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = File, .NombreArchivo = "EstadoDeCuenta.pdf"}) Return Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, Archivos:=LSRutasMail) Catch ex As Exception GuardaLog("Ocurrió error al mandar el correo de estado de cuenta. " + ex.ToString()) Return False End Try End Function Public Sub GuardaLogEdoCuenta(Str As String) Dim ArchivoW As StreamWriter Dim strLineaTMP As String ' strLineaTMP = Chr(13) & Chr(10) & Day(NowADS()) & "/" & Month(NowADS()) & "/" & Year(NowADS()) & " " & Hour(NowADS()) & ":" & Minuto & ". " & Str & Chr(13) & Chr(10) strLineaTMP = String.Format("{0}{1}Log: {2}{3}:{4}", Chr(13), Chr(10), Str, ClsPaginas.NowADS().ToShortDateString, ClsPaginas.NowADS().ToShortTimeString) Try ArchivoW = New StreamWriter(String.Format("{0}\Log\LogEdoCuenta.txt", ModExtensiones.DirectorioBaseEmpresas), True, System.Text.Encoding.UTF8) Catch ex As UnauthorizedAccessException 'Alert("No hay permisos para guardar en el Log.", Extensiones.TipoMensaje.MsgError) Exit Sub Catch ex As Exception Exit Sub End Try Try ArchivoW.WriteLine(strLineaTMP) Catch End Try ArchivoW.Close() ArchivoW.Dispose() End Sub #End Region #Region "S C O R E C A R D" Private Sub CargaScoreCard(ByVal context As HttpContext, pCveEmpresa As Integer, FechaEnvio As DateTime) Dim Usuario = ValidaUsuarioSistema(pCveEmpresa) Dim obj = EjecutarEnvioScoreCard(Usuario, FechaEnvio) End Sub Private Function EjecutarEnvioScoreCard(UsuarioActual As Usuario, FechaEnvio As DateTime) As Boolean Dim DtGrupoVendedores As DataTable = Nothing Dim DtGrupoSucursales As DataTable = Nothing Dim DtGrupoEmpresa As DataTable = Nothing Using ObjVentas As New ClsVentas 'VENDEDORES If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, -1, -1, GrupoSuperior:=0) Then DtGrupoVendedores = ObjVentas.DtResultados.Copy End If 'SUCURSAL If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, -1, -1, GrupoSuperior:=1) Then DtGrupoSucursales = ObjVentas.DtResultados.Copy End If 'EMPRESA If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, -1, -1, GrupoSuperior:=2) Then DtGrupoEmpresa = ObjVentas.DtResultados.Copy End If End Using Dim DtUsuarios As DataTable = GlobalDTUsuariosE140() Dim ListaDirectivos As New List(Of MUsuarioEnviar) 'OSCAR FERNANDO LOPEZ CARRASCO ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2138}"), TipoUsuarioEnviar.Directivo) With { .SubProyecto = "Todos", .ReporteEnviar = New MReporteEnviar() With { .Empresa = True, .Sucursal = True, .Vendedor = True } }) 'ANA IVETTE LOPEZ CARRASCO ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2292}"), TipoUsuarioEnviar.Directivo) With { .SubProyecto = "Todos", .ReporteEnviar = New MReporteEnviar() With { .Empresa = True, .Sucursal = True, .Vendedor = True } }) 'FERNANDO MENDOZA LAMADRID ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2275}"), TipoUsuarioEnviar.Directivo) With { .SubProyecto = "Todos", .ReporteEnviar = New MReporteEnviar() With { .Empresa = True, .Sucursal = True, .Vendedor = True } }) 'CARLOS ARMANDO MORENO GONZALEZ ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2763}"), TipoUsuarioEnviar.Directivo) With { .SubProyecto = "Todos", .ReporteEnviar = New MReporteEnviar() With { .Empresa = True, .Sucursal = True, .Vendedor = True } }) 'EMMANUEL LOPEZ FIMBRES ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3099}"), TipoUsuarioEnviar.Directivo) With { .SubProyecto = "Todos", .ReporteEnviar = New MReporteEnviar() With { .Empresa = True, .Sucursal = True, .Vendedor = True } }) Dim PDFEmpresa As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoEmpresa) Dim PDFSucursales As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoSucursales) Dim PDFVendedores As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoVendedores) For Each UsuarioEnviar In ListaDirectivos Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) If UsuarioEnviar.ReporteEnviar.Empresa Then LSRutasMail.Add(New ClsSisMail.ArchivoMail With { .ArchivoBinario = PDFEmpresa, .NombreArchivo = "ScoreCardEmpresa.pdf" }) End If If UsuarioEnviar.ReporteEnviar.Sucursal Then LSRutasMail.Add(New ClsSisMail.ArchivoMail With { .ArchivoBinario = PDFSucursales, .NombreArchivo = "ScoreCardSucursales.pdf" }) End If If UsuarioEnviar.ReporteEnviar.Vendedor Then LSRutasMail.Add(New ClsSisMail.ArchivoMail With { .ArchivoBinario = PDFVendedores, .NombreArchivo = "ScoreCardVendedores.pdf" }) End If If LSRutasMail.Count > 0 Then EnviarCorreoFactura(UsuarioActual, UsuarioEnviar, LSRutasMail) End If Next Dim ListaVendedores As New List(Of MUsuarioEnviar) 'LUIS FERNADO GRIJALVA COTA ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3236} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'FERNANDO GRIJALVA ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3293} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'ADRIAN MURRIETA ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3352} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'BRAYAM URIEL CORRALES ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2700} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'DANIEL GASTELUM ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3360} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'ALEJANDRA QUINTERO ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3336} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'RICARDO FUENTES ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3363} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) 'GERMAN LUNA ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3354} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) For Each UsuarioEnviar In ListaVendedores Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) Dim DtReporteVendedor As DataTable = Nothing If UsuarioEnviar.CveSubProyecto > 0 AndAlso UsuarioEnviar.CveVendedor > 0 Then Using ObjVentas As New ClsVentas If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, UsuarioEnviar.CveVendedor, -1, -1, -1, -1, UsuarioEnviar.CveSubProyecto, -1, -1, GrupoSuperior:=1) Then DtReporteVendedor = ObjVentas.DtResultados.Copy End If End Using LSRutasMail.Add(New ClsSisMail.ArchivoMail With { .ArchivoBinario = GenerarScoredCard(UsuarioActual, UsuarioEnviar, DtReporteVendedor), .NombreArchivo = "ScoreCardSucursales.pdf" }) If LSRutasMail.Count > 0 Then EnviarCorreoFactura(UsuarioActual, UsuarioEnviar, LSRutasMail) End If End If Next Return False End Function Private Sub EnviarCorreoFactura(UsuarioActual As Usuario, UsuarioEnviar As MUsuarioEnviar, LSRutasMail As List(Of ClsSisMail.ArchivoMail)) Dim ObjMail As New ClsSisMail() Dim Mail As String = "jonathan.perez@adssistemas.mx" Dim MailCC As String = "rene.molina@adssistemas.mx" Dim ExistePDF As Boolean = False If Not String.IsNullOrEmpty(Mail) Then Try Dim Asunto As String = $"ScoreCard: {ClsPaginas.NowADS().ToString("dd/MM/yyyy")}" Dim Cuerpo As String = String.Empty Dim ResultadoMail As Integer = 0 If ObjMail.SendMail(ClsPaginas.EmpresaNotificaciones, Mail, Asunto, Cuerpo, If(String.IsNullOrEmpty(MailCC), "", MailCC), LSRutasMail) Then ResultadoMail = 1 End If Catch ex As Exception OnError("Ocurrió error al mandar el Mail", ex) End Try End If End Sub Protected Function GenerarScoredCard(UsuarioActual As Usuario, UsuarioEnviar As MUsuarioEnviar, DtDatos As DataTable) As Byte() Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) If Imagen.Exists Then params.Add(New ReportParameter("pImg", logouri)) Else params.Add(New ReportParameter("pImg", "")) End If params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) params.Add(New ReportParameter("FechaImpresion", Today.ToString)) params.Add(New ReportParameter("SubProyecto", UsuarioEnviar.SubProyecto)) params.Add(New ReportParameter("Agente", UsuarioEnviar.Agente)) Dim lrds As New List(Of ReportDataSource) Dim rds As New ReportDataSource rds.Name = "DataSet1" rds.Value = DtDatos lrds.Add(rds) Return StreamPDF(UsuarioActual, "Empresas/Grales/Formatos/MetasVendedores.rdlc", lrds, params, "Rep. Metas por vendedores", "PDF") End Function Protected Function GenerarScoredCardDirectivo(UsuarioActual As Usuario, DtDatos As DataTable) As Byte() Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) If Imagen.Exists Then params.Add(New ReportParameter("pImg", logouri)) Else params.Add(New ReportParameter("pImg", "")) End If params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) params.Add(New ReportParameter("FechaImpresion", Today.ToString)) params.Add(New ReportParameter("SubProyecto", "Todos")) params.Add(New ReportParameter("Agente", "Todos")) Dim lrds As New List(Of ReportDataSource) Dim rds As New ReportDataSource rds.Name = "DataSet1" rds.Value = DtDatos lrds.Add(rds) Return StreamPDF(UsuarioActual, "Empresas/Grales/Formatos/MetasVendedores.rdlc", lrds, params, "Rep. Metas por vendedores", "PDF") End Function Public Enum TipoUsuarioEnviar Directivo Vendedor End Enum Public Class MUsuarioEnviar Sub New(RowUsuario As DataRow, Tipo As TipoUsuarioEnviar) If RowUsuario IsNot Nothing Then Me.CveUsuario = RowUsuario("CveUsuario").ToString().ToEntero() Me.Nombre = RowUsuario("Nombre").ToString() Me.Correo = RowUsuario("Correo").ToString() Me.CveSubProyecto = RowUsuario("CveSubProyecto").ToString().ToEntero() Me.CveVendedor = RowUsuario("CveVendedor").ToString().ToEntero() Me.Tipo = Tipo If Me.Tipo = TipoUsuarioEnviar.Vendedor Then Me.Agente = Me.Nombre Else Me.Agente = "Todos" End If If String.IsNullOrEmpty(SubProyecto) AndAlso CveSubProyecto > 0 Then Me.SubProyecto = GlobalDTSubProyectosE140(-1, CveSubProyecto:=Me.CveSubProyecto).FiltroPrimeroValor("SubProyecto") End If End If End Sub Public Property CveUsuario As Integer Public Property Nombre As String Public Property Tipo As TipoUsuarioEnviar Public Property ReporteEnviar As MReporteEnviar Public Property CveSubProyecto As Integer Public Property SubProyecto As String Public Property Correo As String Public Property CveVendedor As Integer Public Property Agente As String End Class Public Class MReporteEnviar Public Property Empresa As Boolean = False Public Property Sucursal As Boolean = False Public Property Vendedor As Boolean = False End Class Public Function StreamPDF(UsuarioActual As Usuario, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing) As Byte() 'limpio ReportViwer Dim sw As New System.Diagnostics.Stopwatch() sw.Start() Dim Bytes As Byte() = Nothing Dim CveUsuario As Integer = 0 Dim CveEmpresa As Integer = 0 Dim RutaEmpresa As String = "" If UsuarioActual IsNot Nothing Then CveUsuario = UsuarioActual.CveUsuario CveEmpresa = UsuarioActual.CveEmpresa RutaEmpresa = UsuarioActual.Empresa.Ruta End If Dim bdir As String = If(RutaReporte.Contains("Empresas"), ModExtensiones.DirectorioBaseEmpresas, AppDomain.CurrentDomain.BaseDirectory) 'TOMAR LA RUTA BASE PARA EL DIRECTORIO DE LA EMPRESA If Not String.IsNullOrEmpty(RutaEmpresa) AndAlso Not RutaReporte.Contains("Grales") Then bdir = RutaEmpresa.Replace($"{CveEmpresa}/", "") End If RutaReporte.Replace("/", "\") If Not RutaReporte.ToUpper().StartsWith(bdir.ToUpper()) Then RutaReporte = String.Format("{0}{1}", bdir, RutaReporte) End If Dim EsProduccion As Boolean = UsuarioActual.Empresa.FacturaProduccion If EsProduccion Then Dim wsreport As New WSRDLC.WebServiceSoapClient Dim params As New List(Of WSRDLC.ReportParameter) Dim ds As New DataSet For Each rpds As ReportDataSource In DataSource Dim dt As DataTable = DirectCast(rpds.Value, Data.DataTable) If dt Is Nothing Then dt = New DataTable() Else dt = dt.Copy() End If dt.TableName = rpds.Name ds.Tables.Add(dt) Next For Each rpds As ReportParameter In Parametros Dim param As New WSRDLC.ReportParameter param.Name = rpds.Name param.Values = {rpds.Values(0)} params.Add(param) Next Bytes = wsreport.StreamPDFBytes(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) wsreport = Nothing params = Nothing ds.Dispose() : ds = Nothing Else If IsNothing(MR) Then MR = New ReportViewer Try ' MasterReporteador.LocalReport.DataSources.Clear() For Each RDS As ReportDataSource In DataSource MR.LocalReport.DataSources.Add(RDS) Next MR.LocalReport.ReportPath = RutaReporte MR.ProcessingMode = ProcessingMode.Local MR.LocalReport.EnableExternalImages = True MR.LocalReport.SetParameters(Parametros) MR.LocalReport.Refresh() Dim Warnings As Warning() = Nothing Dim StreamIds As String() = Nothing Dim MimeType As String = Nothing Dim Encoding As String = Nothing Dim Extension As String = Nothing Bytes = MR.LocalReport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds, Warnings) Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") Catch ex As Exception GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") End Try MR.Dispose() MR = Nothing 'Dim ruta = wsreport.StreamPDF(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) 'If File.Exists(ruta) Then ' Bytes = File.ReadAllBytes(ruta) ' File.Delete(ruta) 'End If 'Dim setup As AppDomainSetup = New AppDomainSetup 'With setup ' .ApplicationBase = Environment.CurrentDirectory ' .LoaderOptimization = LoaderOptimization.MultiDomainHost 'End With 'setup.SetCompatibilitySwitches({"NetFx40_LegacySecurityPolicy"}) 'Dim _casPolicyEnabledDomain As AppDomain = AppDomain.CreateDomain("Full Trust", Nothing, setup) 'Dim fllreport As ADSReportLib.FullTrustReportviewer = Nothing 'Try ' fllreport = CType(_casPolicyEnabledDomain.CreateInstanceFromAndUnwrap(GetType(ADSReportLib.FullTrustReportviewer).Assembly.CodeBase, GetType(ADSReportLib.FullTrustReportviewer).FullName), ADSReportLib.FullTrustReportviewer) ' fllreport.Initialize("DisplayName", RutaReporte, Parametros.AsEnumerable(), New List(Of String()), True) ' For Each RDS As ReportDataSource In DataSource ' fllreport.AddDataSources(RDS.Name, DirectCast(RDS.Value, DataTable)) ' Next ' Dim Warnings As Warning() = Nothing ' Dim StreamIds As String() = Nothing ' Dim MimeType As String = Nothing ' Dim Encoding As String = Nothing ' Dim Extension As String = Nothing ' Bytes = fllreport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds) ' fllreport = Nothing 'Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException ' GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") ' 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 ' 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") 'Catch ex As Exception ' GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") ' 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 ' 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") 'Finally ' AppDomain.Unload(_casPolicyEnabledDomain) 'End Try 'If fllreport IsNot Nothing Then fllreport.liberarecursos() End If sw.Stop() If sw.Elapsed.TotalSeconds > 5 Then GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") End If Return Bytes End Function #End Region End Class