<%@ 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 Public Class TareasProgramadas : Implements IHttpHandler 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 = "" If context.Request("var") IsNot Nothing Then URLParametros = Parametros(context.Request("var")) metodo = URLParametros("metodo") ElseIf context.Request.Headers("Content-Type") IsNot Nothing AndAlso context.Request.Headers("Content-Type").Contains("json") AndAlso context.Request.InputStream IsNot Nothing Then context.Response.ContentType = "application/json" Using reader As New StreamReader(context.Request.InputStream) Dim json = reader.ReadToEnd() Dim JsonRequest As JObject = JObject.Parse(json) If JsonRequest IsNot Nothing Then metodo = JsonRequest("Metodo").ToString End If End Using 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) End Select Catch ex As Exception ex.GuardaLog(ex.ToString()) context.Response.Write(retorno) End Try End Sub Public Sub timbrarNominab() Dim cveEmpresa As String = "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"), dtrow("Contraseña"), 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") pass = dtrow("Contraseña") 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 String = 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) 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, pCveCliente:=pCveCliente) Retorno.Add(obj) Next End If context.Response.Write(Retorno.ToString()) 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, Optional pCveCliente As Integer = -1) As JObject Dim ClientesSinEnviar As New JArray() Dim Json As New JObject( New JProperty("Empresa", UsuarioActual.Empresa.Empresa), New JProperty("Usuario", UsuarioActual.Usuario), New JProperty("Fecha", DateTime.Now.ToString("dd/MM/yyy HH:mm:ss")) ) Dim DTClientes As DataTable = Nothing Using ObjCliente As New ClsClientes If ObjCliente.GetClientes(pCveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, TipoCliente:=-1, Estatus:=1) Then If ObjCliente.DtResultados.Rows.Count > 0 Then DTClientes = ObjCliente.DtResultados.Copy() End If End If End Using If DTClientes IsNot Nothing Then For Each RowCliente As DataRow In DTClientes.Rows Dim CveCliente As Integer = RowCliente("CveCliente").ToString().ToEntero() Dim Correo As String = RowCliente("CobranzaCorreo").ToString() Dim Cliente As New Modelos.ClienteModel(CveCliente, UsuarioActual.CveEmpresa) Dim Envio = EnviarEstadoCuenta(UsuarioActual, Correo, Cliente) If Envio Then 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 Next DTClientes.Dispose() End If Json.Add(New JProperty("ClientesSinEnviar", ClientesSinEnviar)) Return Json End Function Private Function EnviarEstadoCuenta(UsuarioActual As Usuario, Correo As String, Cliente As Modelos.ClienteModel) As Boolean Dim Retorno As Boolean = True 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','NC','Dev'" 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 OnError("Ocurrió un erro al obtener el CxC", ex) 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", DateTime.Now.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 OnError("Ocurrió error al mandar MAIL de Orden de Compra", ex) 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", DateTime.Now.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 OnError("Ocurrió un error al generar el pdf", ex) 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 OnError("Ocurrió un error al enviar el correo", ex) End Try Else Retorno = False End If 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 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) End Function #End Region End Class