Files
SIG/Ashx/TareasProgramadas.ashx
2019-12-18 01:54:21 -07:00

699 lines
34 KiB
Plaintext

<%@ 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 & "<br />")
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}.<br />
<br />
Quedamos a sus ordenes para cualquier duda o aclaración con su agente de Ventas.<br />
<br />
<br />
Gracias por la atención brindada al presente.<br /> Reciba un cordial saludo.<br />
<br />
<b>ESTE CORREO SE GENERO EN FORMA AUTOMATICA.</b>", 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