<%@ 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") 'SI TRAE UN JSON COMO PARAMETRO ElseIf context.Request.Headers("Content-Type") IsNot Nothing AndAlso context.Request.Headers("Content-Type").Contains("json") AndAlso context.Request.InputStream IsNot Nothing AndAlso (context.Request("var") Is Nothing AndAlso context.Request("metodo") 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 ElseIf context.Request("metodo") IsNot Nothing Then metodo = context.Request("metodo").ToString() 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 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, 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", 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 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 = "-1" Dim FechaCorte As DateTime = New DateTime(Now.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 If DTClientes IsNot Nothing Then 'DTClientes = DTClientes.FiltraParametros("CveCliente IN (227289,227429,227733,227838,228181,228544,229176,229481,230029,230432,230860,230911,230918,231197,231576,232173,232185,233055,233295,233357,233588,236379,236460,237161,237635,238285,238530,238622,238724,239033,239099,239865,239895,239903,240202,240235,240236,240238,240303,240340,262404,262517,264765,264806,264825,264848,264930,265063,265180,265213,265214,265236,265344,265492,265555,265669,265797,265952,265963,266156,266182,268346,268396,268488,268535,268539,268558,268562,268706,268726,268787,268868,268889,268910,268925,269023,269081,269089,272066,272070,272657,273080,273084,275627,276259,276587,281115,283110,284664,285392,287653,288711,291374,292444,295578,296375,296598,302728,303936,306897,307183,311007,320060,320685,320800,323520,323772,325237,326996,327801,330630,331741,332118,337105,340502,341796,342807,343858,355862,358123,365794,371524,375391,377122,377948,378267,380167,381210,381878,383098,383250,383339,383650,384472,385321,385585,386630,387114,388987,396341,396405,396541,401995,404175,408306,416386,416819,420275,438732,447566,447636,450284,464150,464376,468051,475172,475932,476984,477997,478426)") For Each RowCliente As DataRow In DTClientes.Rows Dim CveCliente As Integer = RowCliente("CveCliente").ToString().ToEntero() Dim Cliente As New Modelos.ClienteModel(CveCliente, UsuarioActual.CveEmpresa) If Cliente IsNot Nothing Then Dim Correo As String = Cliente.CobranzaCorreo '"japmx95@gmail.com" 'RowCliente("CobranzaCorreo").ToString() Dim Envio As Boolean = False If Not String.IsNullOrEmpty(Correo) Then Envio = EnviarEstadoCuenta(UsuarioActual, Correo, Cliente) End If If Envio Then 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 DTClientes.Dispose() 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 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) Dim Hilo As New System.Threading.Thread(Sub() MandaCorreo(ArchivoPDF, Correo, $"Estado Actual de Cartera {UsuarioActual.Empresa.Empresa}", Cuerpo)) Hilo.Start() Retorno = True Catch ex As Exception Retorno = False OnError("Ocurrió error al mandar el correo de estado de cuenta", 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 '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 OnError("Ocurrió un error al enviar el correo de edo cuenta", ex) 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(Now) & "/" & Month(Now) & "/" & Year(Now) & " " & Hour(Now) & ":" & Minuto & ". " & Str & Chr(13) & Chr(10) strLineaTMP = String.Format("{0}{1}Log: {2}{3}:{4}", Chr(13), Chr(10), Str, DateTime.Now.ToShortDateString, DateTime.Now.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 End Class