diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index a23c60cc3..1bd0ca8fa 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -256,13 +256,13 @@ Public Class ClsContabilidad Return Retorno End Function - Public Function UpdatePrepolizasDetalle(CvePrePolizaDetalle As Integer, Concepto As String, CveSubProyecto As Integer, IdCtaContable As Integer, TipoMovto As Boolean, ImporteMN As Decimal, Optional CveTipoGasto As Integer = -1, + Public Function UpdatePrePolizasDetalle(CvePrePolizaDetalle As Integer, Concepto As String, CveSubProyecto As Integer, IdCtaContable As Integer, TipoMovto As Boolean, ImporteMN As Decimal, Optional CveTipoGasto As Integer = -1, Optional CveConceptoContable As Integer = -1, Optional CveProveedor As Integer = -1, Optional CveCompra As Integer = -1, Optional CvePersonal As Integer = -1, Optional CveCliente As Integer = -1, Optional CveVenta As Integer = -1, - Optional Referencia As String = "-1", Optional CveUsuarioModifico As Integer = -1) As Boolean + Optional Referencia As String = "-1", Optional CveUsuarioModifico As Integer = -1, Optional CveCuenta As Integer = -1) As Boolean Dim Retorno As Boolean = False - DataAdapter("PA_PrePolizaDetalleUpdate") + DataAdapter("PA_Conta_PrePolizasDetalleUpdate") With SqlAdapter.SelectCommand.Parameters .Add("@CvePrePolizaDetalle", SqlDbType.Int).Value = CvePrePolizaDetalle @@ -280,6 +280,7 @@ Public Class ClsContabilidad .Add("@CveCliente", SqlDbType.Int).Value = CveCliente .Add("@CveVenta", SqlDbType.Int).Value = CveVenta .Add("@CveUsuarioModifico", SqlDbType.Int).Value = CveUsuarioModifico + .Add("@CveCuenta", SqlDbType.Int).Value = CveCuenta End With Try @@ -5924,7 +5925,11 @@ Public Class ClsContabilidad SqlAdapter.Fill(Data) Retorno = SqlAdapter.SelectCommand.Parameters("@CvePrePoliza").Value.ToString.ToEntero Catch ex As Exception - Me.OnError("Ocurrió un error al eliminar el catálogo de Conta Ejercicios", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + If ex.Message.Contains("50000") Then + Me.OnError("No se puede registrar una prepóliza en un periodo cerrado.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Else + Me.OnError("Ocurrió un error al cerrar el Ejercicio", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End If End Try Return Retorno diff --git a/App_Code/ClsEdocumentacion.vb b/App_Code/ClsEdocumentacion.vb index b06f629cf..dc764e2bb 100644 --- a/App_Code/ClsEdocumentacion.vb +++ b/App_Code/ClsEdocumentacion.vb @@ -237,7 +237,11 @@ Public Class ClsEdocumentacion SqlAdapter.Fill(Data) Retorno = True Catch ex As Exception - OnError("Ocurrió un error al consultar el catalogo de documentación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + If ex.Message.Contains("FK_Edoc_DocumentacionParametros_Edoc_Documentacion") Then + Alert("Este documento tiene parametros registrados", TipoMensaje.MsgAdvertencia) + Else + OnError("Ocurrió un error al eliminar la documentacion", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End If End Try Return Retorno diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb index 78496ee91..4039d1299 100644 --- a/App_Code/ClsNominas.vb +++ b/App_Code/ClsNominas.vb @@ -463,24 +463,24 @@ Public Class ClsNominas Return Retorno End Function - Public Function UpdateProvisionNomina(CvePeriodo As Integer, CvePrePoliza As Integer, CveEmpresa As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_Nom_ProvisionNominaUpdate") + 'Public Function UpdateProvisionNomina(CvePeriodo As Integer, CvePrePoliza As Integer, CveEmpresa As Integer) As Boolean + ' Dim Retorno As Boolean = False + ' DataAdapter("PA_Nom_ProvisionNominaUpdate") - With SqlAdapter.SelectCommand.Parameters - .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo - .Add("@CvePrePoliza", SqlDbType.Int).Value = CvePrePoliza - .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa - End With - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al actualizar el periodo.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) - End Try + ' With SqlAdapter.SelectCommand.Parameters + ' .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo + ' .Add("@CvePrePoliza", SqlDbType.Int).Value = CvePrePoliza + ' .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + ' End With + ' Try + ' SqlAdapter.Fill(Data) + ' Retorno = True + ' Catch ex As Exception + ' OnError("Ocurrió un error al actualizar el periodo.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + ' End Try - Return Retorno - End Function + ' Return Retorno + 'End Function Public Function GetNom_NominasDetalles(CveNomina As Integer, CvePersonal As Integer, CvePeriodo As Integer, Tipo As String) As Boolean Dim Retorno As Boolean = False diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 6dba27799..c50f0c354 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -3,9 +3,12 @@ Option Strict On Imports Extensiones Imports System.IO -Imports System.Linq +Imports Newtonsoft.Json.Linq +Imports System.Net.Http Imports System.Xml Imports System.Data +Imports System.Xml.Serialization + Public Class Timbrado #Region "P R O P I E D A D E S" @@ -2222,41 +2225,26 @@ Public Class Timbrado ' 'Sucursal matriz de la empresa Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey) Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer) - Dim UsuarioServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx") - Dim ClaveServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018") + + Dim UsuarioServicio As String = "rene.molina@adssistemas.mx" + Dim ClaveServicio As String = "Facturacion2021#" + Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey Dim EmisorRFC As String = UsuarioActual.Empresa.RFC - Dim UrlServicio As String = "" ' Produccion + Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto) Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio Dim SubTotal As Decimal = 0 Dim TimbraProduccion As Boolean = True If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo) - Select Case CvePACEspecial - Case 2 - UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" 'productivo - Case 4 - 'UrlServicio = "http://juancalderon-001-site1.ftempurl.com/timbrado.asmx?WSDL" - UrlServicio = "http://alterno.gofac.com.mx/cfdi/timbrado.asmx?WSDL" ' alterno - End Select + If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - - EmisorRFC = "AAA010101AAA" - ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key" - ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer" + EmisorRFC = "ZUÑ920208KL4" + ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" + ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" Clave = "12345678a" TimbraProduccion = False - Select Case CvePACEspecial - Case 2 - UsuarioServicio = "fgomez" - ClaveServicio = "12121212" - UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" '"http://108.60.211.43/rvltimbrado/service1.asmx" - Case 4 - UsuarioServicio = "UserTest" - ClaveServicio = "1234567890" - UrlServicio = "http://juancalderon-001-site1.ftempurl.com/timbrado.asmx?WSDL" - End Select End If #Region "Valida" @@ -2303,19 +2291,15 @@ Public Class Timbrado End Try #End Region - sw.Stop() swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() - ' cfdi.saltarValidacion("bNtMuvZockPVhEjaPj0E") - ' cfdi.Decimales = 4 #Region "Certificado" cfdi.CertificadoArchivo(ArchivoCertificado) #End Region - sw.Stop() swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds @@ -2388,6 +2372,7 @@ Public Class Timbrado cfdi.Impuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados) End If #End Region + #Region " Traslados y Retenciones" @@ -2591,8 +2576,6 @@ Public Class Timbrado End If #End Region - - #Region "Nomina12" If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then @@ -2685,7 +2668,7 @@ Public Class Timbrado Dim ArchivoGenerado As Boolean = False Try cfdi.GenerarXMLB64(llaveBase64, Clave) - ArchivoGenerado = True + If cfdi.Xml <> "" Then ArchivoGenerado = True Catch ex As Exception Retorno = cfdi.MensajeError If Retorno = "" OrElse IsNothing(Retorno) Then @@ -2703,111 +2686,131 @@ Public Class Timbrado #Region "Timbra" If ArchivoGenerado Then - Dim opciones As String() = New String(0) {"CALCULAR_SELLO"} - Dim pade = New PADE33.PadeTimbradoServiceClient - Dim Respuesta As String = pade.timbradoPrueba("72330711-cac6-4106-8051-cbcda1aef495", "rene.molina@adssistemas.mx", "Facturacion2021#", cfdi.Xml, opciones) + 'Dim opciones As String() = New String(0) {""} + 'Dim pade = New PADETimbrado.PadeTimbradoServiceClient + + 'Dim Respuesta As String = pade.timbradoConCSD("72330711-cac6-4106-8051-cbcda1aef495", UsuarioServicio, ClaveServicio, cfdi.Xml, certByte, llaveByte, Clave, Not TimbraProduccion, opciones) + + Dim TokenAuth As String = $"{UsuarioServicio}:{ClaveServicio}".ToBase64Encode() + + Dim payload As New JObject( + New JProperty("contrato", "72330711-cac6-4106-8051-cbcda1aef495"), + New JProperty("certBase64", certBase64), + New JProperty("keyBase64", llaveBase64), + New JProperty("keyPass", Clave), + New JProperty("xmlBase64", cfdi.Xml.ToBase64Encode()), + New JProperty("prueba", (Not TimbraProduccion).ToString().ToLower), + New JProperty("opciones", New String(0) {""}) + ) + + Dim Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth) + ' Aumentamos el timeout de la operación + If Not String.IsNullOrEmpty(Respuesta) Then - Dim FolioFiscal As String - FolioFiscal = obtenerAtributo(Respuesta, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText + Dim result As PADEServicioTimbradoResp = Nothing + Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioTimbradoResp)) + Try + Using reader As TextReader = New StringReader(Respuesta) + result = CType(serializer.Deserialize(reader), PADEServicioTimbradoResp) + End Using + Catch ex As Exception + OnError("Ocurrió un error al obtener los resultados", ex) + End Try - 'cfdi.TimbrarCfdi(UsuarioServicio, ClaveServicio, UrlServicio, TimbraProduccion) + If result IsNot Nothing Then + If result.timbradoOk Then + Dim FolioFiscal As String = result.UUID - 'sw.Stop() - 'swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - 'swmili = sw.ElapsedMilliseconds - 'sw.Start() - ''Verifica el error - 'If cfdi.CodigoError = 0 Then + cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - ' Dim FolioFiscal As String + If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then - ' UUID = cfdi.UUID - ' FolioFiscal = cfdi.UUID 'obtenerAtributo(cfdi.XmlTimbrado, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText + 'Actualiza Estatus Factura + If Ventas.CveVenta > 0 Then - ' If FolioFiscal <> "" Then + Using ObjVentas As New ClsVentas() - ' cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) + If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=CvePACEspecial, RFCReceptor:=ObjCFDITimbre.Receptor.RFC) Then + Retorno = "" + Else + Retorno = "Error" + End If + End Using - ' sw.Stop() - ' swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - ' swmili = sw.ElapsedMilliseconds - ' sw.Start() + 'Genero la addenda Ford + If Ventas.Cliente.Ford_GSDB <> "" Then - ' If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then + Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - ' 'Actualiza Estatus Factura - ' If Ventas.CveVenta > 0 Then + Dim FolioFactura As String = "" + If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura + GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) - ' Using ObjVentas As New ClsVentas() + End If - ' If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=CvePACEspecial) Then - ' Retorno = "" - ' Else - ' Retorno = "Error" - ' End If - ' End Using + End If - ' 'Genero la addenda Ford - ' If Ventas.Cliente.Ford_GSDB <> "" Then + If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then + Using ObjNomina2 As New ClsNominas() - ' Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) + If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, "", ("01/01/2000").ToDate, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0) Then + Retorno = "" + Else + Retorno = "Error" + End If + End Using + End If - ' Dim FolioFactura As String = "" - ' If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura - ' GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) + If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then + Using ObjInv As New ClsInventarios() + If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then + Retorno = "" + Else + Retorno = "Error" + End If + End Using + End If + End If - ' End If + If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\") - ' End If + Try + Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" + Dim b As Byte() = cfdi.QrCode($"?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}") + File.WriteAllBytes(RutaCBB, b) + Catch ex As Exception + OnError("Ocurrió un error al generar el QR", ex) + End Try + Retorno = "" + Else + If String.IsNullOrEmpty(result.mensaje) Then + Retorno = Respuesta + MensajeErrorCFDI = "" + Else + Retorno = result.mensaje + MensajeErrorCFDI = result.codigo + If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) + End If - ' If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - ' Using ObjNomina2 As New ClsNominas() - - ' If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, "", ("01/01/2000").ToDate, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0) Then - ' Retorno = "" - ' Else - ' Retorno = "Error" - ' End If - ' End Using - ' End If - - ' If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then - ' Using ObjInv As New ClsInventarios() - ' If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then - ' Retorno = "" - ' Else - ' Retorno = "Error" - ' End If - ' End Using - ' End If - ' End If - - ' If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\") - - ' Try - ' Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" - ' Dim b As Byte() = cfdi.QrCode($"?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}") - ' File.WriteAllBytes(RutaCBB, b) - ' Catch ex As Exception - ' OnError("Ocurrió un error al generar el QR", ex) - ' End Try - ' Retorno = "" - ' Else - ' Retorno = "No se pudo timbrar ante el SAT. UUID no generado." - ' End If - ' sw.Stop() - ' swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - ' swmili = sw.ElapsedMilliseconds - ' sw.Start() - - 'Else - ' Retorno = cfdi.MensajeError - ' MensajeErrorCFDI = cfdi.MensajeError - ' If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - - ' End If + End If + Else + If String.IsNullOrEmpty(Respuesta) Then + Retorno = "Ocurrió un error al obtener la respuesta" + MensajeErrorCFDI = "" + Else + Retorno = Respuesta + MensajeErrorCFDI = "" + End If + End If + Else + Retorno = "Ocurrió un error al obtener la respuesta" + MensajeErrorCFDI = "" + End If + Else + Retorno = "Ocurrió un error al generar el xml" + MensajeErrorCFDI = "" End If #End Region @@ -2815,6 +2818,45 @@ Public Class Timbrado Return Retorno End Function + Private Function EnviarInformacionPADE(url As String, payload As String, tokenAuth As String) As String + Dim Retorno As String = "" + Try + Using httpClient = New HttpClient() + httpClient.Timeout = New TimeSpan(0, 1, 0) + Using request = New HttpRequestMessage(HttpMethod.Post, New Uri(url)) + request.Headers.Add("Authorization", $"Basic {tokenAuth}") + Using content = New StringContent(payload, Encoding.UTF8, "application/json") + request.Content = content + Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result + + Retorno = response.Content.ReadAsStringAsync().Result + End Using + End Using + End Using + Catch ex As Exception + Retorno = "" + OnError("Ocurrió un error al enviar la informacion", ex) + End Try + Return Retorno + End Function + + + Public Class PADEServicioTimbradoResp + + Public Property id As String + + Public Property timbradoOk As Boolean + + Public Property contrato As String + + Public Property codigo As String + + Public Property mensaje As String + + Public Property UUID As String + End Class + + Public Sub GuardaLogTimbrado(Str As String, CvePAC As Integer) Dim ArchivoW As StreamWriter Dim strLineaTMP As String diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index 95db7694d..24e6e11b6 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -2805,6 +2805,18 @@ Namespace Extensiones Return img End Function + + + Public Function ToBase64Encode(ByVal plainText As String) As String + Dim plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText) + Return System.Convert.ToBase64String(plainTextBytes) + End Function + + + Public Function ToBase64Decode(ByVal base64EncodedData As String) As String + Dim base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData) + Return System.Text.Encoding.UTF8.GetString(base64EncodedBytes) + End Function Public Function DecriptaConexion() As String Dim Salida As String Dim stringtodecrypt As String = ConfigurationManager.ConnectionStrings("Conexion").ConnectionString diff --git a/Ashx/SIGPolizaVirtual.ashx b/Ashx/SIGPolizaVirtual.ashx index 10eab84ae..1ea9302b0 100644 --- a/Ashx/SIGPolizaVirtual.ashx +++ b/Ashx/SIGPolizaVirtual.ashx @@ -57,12 +57,77 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest context.Response.ContentType = "application/json" - Dim usuario = ValidaUsuarioSistema(140, 100) - Dim ObjFactura As New Modelos.Factura(usuario, 898028, 140) - GeneraPolizaVentaWS(context, ObjFactura) - 'GeneraPolizaVentaLTHWSD(context) - 'GeneraIndicadores(context) + Dim UsuarioActual = ValidaUsuarioSistema(1, 100) + 'Dim ObjFactura As New Modelos.Factura(usuario, 898028, 140) + + Dim UsuarioServicio As String = "rene.molina@adssistemas.mx" + Dim ClaveServicio As String = "Facturacion2021#" + + Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, "Ing") + Dim NombreArchivoXML As String = "test" + + If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo) + + Dim EmisorRFC As String = "ZUÑ920208KL4" + Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" + Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" + Dim Clave = "12345678a" + Dim TimbraProduccion = False + + If Not File.Exists(ArchivoCertificado) Then + context.Response.Write("El archivo de llave privada no existe") + Exit Sub + End If + If Not File.Exists(ArchivoLLave) Then + context.Response.Write("El archivo de llave privada no existe") + Exit Sub + End If + If UsuarioActual.Empresa.ContraseñaKey = "" Then + context.Response.Write("La clave no puede ser vacía") + Exit Sub + End If + + Dim llaveByte As Byte(), certByte As Byte() + Dim llaveBase64 As String = "", certBase64 As String = "" + Dim cfdi As New GoFac.GoCfdi() + Dim complemento As String = "" + Dim complementoConcepto As String = "" + + + Try + llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave) + llaveBase64 = Convert.ToBase64String(llaveByte) + Catch ex As Exception + context.Response.Write($"Error al leer la llave privada: {ex.Message}") + Exit Sub + End Try + + + Try + certByte = System.IO.File.ReadAllBytes(ArchivoCertificado) + certBase64 = Convert.ToBase64String(certByte) + Catch ex As Exception + context.Response.Write($"Error al leer el certificado: {ex.Message}") + Exit Sub + End Try + + Dim TokenAuth As String = ToBase64Encode($"{UsuarioServicio}:{ClaveServicio}") + Dim XmlBase64 As String = ToBase64Encode(XMLPrueba) + + Dim payload As New JObject( + New JProperty("contrato", "72330711-cac6-4106-8051-cbcda1aef495"), + New JProperty("certBase64", certBase64), + New JProperty("keyBase64", llaveBase64), + New JProperty("keyPass", Clave), + New JProperty("xmlBase64", XmlBase64), + New JProperty("prueba", (Not TimbraProduccion).ToString().ToLower), + New JProperty("opciones", New String(0) {""}) + ) + + Dim resp = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth) + + context.Response.Write(resp) End Sub @@ -72,6 +137,44 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState End Get End Property + Private Function EnviarInformacionPADE(url As String, payload As String, tokenAuth As String) As String + Dim Retorno As String = "{}" + Try + Using httpClient = New HttpClient() + httpClient.Timeout = New TimeSpan(0, 5, 0) + Using request = New HttpRequestMessage(HttpMethod.Post, New Uri(url)) + request.Headers.Add("Authorization", $"Basic {tokenAuth}") + Using content = New StringContent(payload, Encoding.UTF8, "application/json") + request.Content = content + + Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result + Retorno = response.Content.ReadAsStringAsync().Result + End Using + End Using + End Using + Catch ex As Exception + OnError("Ocurrió un error al enviar la informacion", ex) + End Try + Return Retorno + End Function + + + Public Function ToBase64Encode(ByVal plainText As String) As String + Dim plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText) + Return System.Convert.ToBase64String(plainTextBytes) + End Function + + + Public Function ToBase64Decode(ByVal base64EncodedData As String) As String + Dim base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData) + Return System.Text.Encoding.UTF8.GetString(base64EncodedBytes) + End Function + + Public Property XMLPrueba As String = "" + + + +#Region "P O L I Z A - V I R T U A L" Protected Sub GeneraPolizaVentaWS(ByVal context As HttpContext, ObjFactura As Modelos.Factura) Dim obj As New MPolizaVentaWS 'DATOS DEL CLIENTE @@ -320,6 +423,7 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState context.Response.Write(Retorno) End Sub +#End Region End Class diff --git a/Bancos/DepositosCaja.aspx b/Bancos/DepositosCaja.aspx index df3cbc36c..f294cf4bf 100644 --- a/Bancos/DepositosCaja.aspx +++ b/Bancos/DepositosCaja.aspx @@ -4,6 +4,33 @@ + @@ -95,22 +122,22 @@ - - - +
+ + -
+
- +
@@ -136,23 +163,23 @@
-
-
- +
+
+
-