From c2feddcb55af3e121cb86211090d31d60e996213 Mon Sep 17 00:00:00 2001 From: rrene Date: Sun, 5 Jun 2022 17:27:55 -0700 Subject: [PATCH 1/4] =?UTF-8?q?--=20comentar=20pyme=20--=20impresi=C3=B3n?= =?UTF-8?q?=20pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsPaginas.vb | 1244 +++++++++++++++++++--------------------- 1 file changed, 603 insertions(+), 641 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 85674a0cd..6ef8dab01 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -6255,44 +6255,44 @@ Public Class ClsPaginas Return Bytes End Function - Public Function ImprimirPDFPyME(RutaReporte As String, DataSource As DataSet, Parametros As List(Of CrystalParametro), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As StiReport = Nothing) As Byte() + 'Public Function ImprimirPDFPyME(RutaReporte As String, DataSource As DataSet, Parametros As List(Of CrystalParametro), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As StiReport = Nothing) As Byte() - If IsNothing(MR) Then MR = New Stimulsoft.Report.StiReport() - Dim Bytes As Byte() = Nothing - Try - MR.Load(RutaReporte) - MR.Dictionary.DataSources.Clear() - MR.RegData(DataSource) - Dim Lista = MR.Dictionary.Variables.ToList() - For Each item As CrystalParametro In Parametros - If Lista.Exists(Function(a) a.Name = item.Nombre) Then - MR.Dictionary.Variables(item.Nombre).Value = item.Valor.ToString - End If - Next + ' If IsNothing(MR) Then MR = New Stimulsoft.Report.StiReport() + ' Dim Bytes As Byte() = Nothing + ' Try + ' MR.Load(RutaReporte) + ' MR.Dictionary.DataSources.Clear() + ' MR.RegData(DataSource) + ' Dim Lista = MR.Dictionary.Variables.ToList() + ' For Each item As CrystalParametro In Parametros + ' If Lista.Exists(Function(a) a.Name = item.Nombre) Then + ' MR.Dictionary.Variables(item.Nombre).Value = item.Valor.ToString + ' End If + ' Next - MR.Dictionary.Synchronize() - MR.IsRendered = False - MR.Render(False) - Dim pdfSettings As New Stimulsoft.Report.Export.StiPdfExportSettings() - Dim MemoryStream As New MemoryStream - Select Case Formato - Case "PDF" - MR.ExportDocument(Stimulsoft.Report.StiExportFormat.Pdf, MemoryStream, pdfSettings) - Case "EXCEL" - MR.ExportDocument(Stimulsoft.Report.StiExportFormat.Excel2007, MemoryStream, pdfSettings) - End Select + ' MR.Dictionary.Synchronize() + ' MR.IsRendered = False + ' MR.Render(False) + ' Dim pdfSettings As New Stimulsoft.Report.Export.StiPdfExportSettings() + ' Dim MemoryStream As New MemoryStream + ' Select Case Formato + ' Case "PDF" + ' MR.ExportDocument(Stimulsoft.Report.StiExportFormat.Pdf, MemoryStream, pdfSettings) + ' Case "EXCEL" + ' MR.ExportDocument(Stimulsoft.Report.StiExportFormat.Excel2007, MemoryStream, pdfSettings) + ' End Select - Bytes = MemoryStream.ToArray - MR.RenderedPages.Clear() - MR.Dispose() - MemoryStream.Dispose() - Catch ex As Exception - GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") - 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 - 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") - End Try - Return Bytes - End Function + ' Bytes = MemoryStream.ToArray + ' MR.RenderedPages.Clear() + ' MR.Dispose() + ' MemoryStream.Dispose() + ' Catch ex As Exception + ' GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + ' 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + ' 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + ' End Try + ' Return Bytes + 'End Function Public Function StreamPDFTest(RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing) As Byte() 'limpio ReportViwer @@ -6422,533 +6422,533 @@ Public Class ClsPaginas #End Region #Region "IMPRIMIR FACTURA" - Public Sub PdfFacturaPyME(ByRef Vta As Modelos.Factura, DT As DataTable, Optional Guardar As Boolean = True) - Dim retorno As Byte() = Nothing - - 'DATOS GENERALES - Dim Ruta As String = UsuarioActual.Empresa.Ruta - Dim PathXML As String = $"{Ruta}XML\{Vta.TipoDocto}\{Vta.SerieFolio}.xml" - Dim NombreArchivo As String = "" - Dim NombreArchivoDescarga As String = "" - Dim TipoDocumento As String = "" - Dim TipoDocumentoRef As String = "" - Dim AplicaPagare As String = "1" - - Dim RFCReceptor As String = "" - - If String.IsNullOrEmpty(Vta.RFCReceptor) Then - RFCReceptor = Vta.Cliente.RFC - If Vta.FacturarSucursal Then - If Vta.ClienteSucursal IsNot Nothing Then - RFCReceptor = Vta.ClienteSucursal.RFC - End If - End If - Else - RFCReceptor = Vta.RFCReceptor - End If - - Dim RutaCBB As String = String.Format("{0}CBB\{1}.jpg", Ruta, Vta.SerieFolio) - Dim ImagenCBB As New System.IO.FileInfo(RutaCBB) - Dim ImgCBB As String '= String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, Vta.SerieFolio) - - Dim ImagenPath = String.Format("{0}Formatos\Suc{1}\logo.png", UsuarioActual.Empresa.Ruta, Vta.CveSucursal) - Dim Logo As New System.IO.FileInfo(ImagenPath) - Dim ImgLogo = New Uri(String.Format("{0}Empresas/{1}/Formatos/Suc{2}.png", UrlSitio, UsuarioActual.CveEmpresa, Vta.CveSucursal)).AbsoluteUri - - Dim SBDomicilioSucursal As New StringBuilder() - Dim CiudadSucursal As String = String.Format("{0},{1}", Vta.SubProyecto.Municipio, Vta.SubProyecto.Estado) - Dim DomicilioSucursal As String = "" - - SBDomicilioSucursal.AppendFormat("{0}", Vta.SubProyecto.Calle) - If Vta.SubProyecto.NoExt.ToEntero > 0 Then SBDomicilioSucursal.AppendFormat(" No.Ext: {0}", Vta.SubProyecto.NoExt) - If Vta.SubProyecto.NoInt.ToEntero > 0 Then SBDomicilioSucursal.AppendFormat(", No.Int: {0}", Vta.SubProyecto.NoInt) - If Vta.SubProyecto.Colonia.Length > 0 Then SBDomicilioSucursal.AppendFormat(", Col: {0}", Vta.SubProyecto.Colonia) - If Vta.SubProyecto.CP.ToEntero > 0 Then SBDomicilioSucursal.AppendFormat(", CP: {0}", Vta.SubProyecto.CP) - If CiudadSucursal.Length > 0 Then SBDomicilioSucursal.AppendFormat(", {0}", CiudadSucursal) - If Vta.SubProyecto.Pais.Length > 0 Then SBDomicilioSucursal.AppendFormat(", {0}", Vta.SubProyecto.Pais) - - DomicilioSucursal = SBDomicilioSucursal.ToString - - Dim Fecha As String = Vta.Fecha.ToShortDateString - - Dim SBDireccion As New StringBuilder() - Dim SBLugar As New StringBuilder() - Dim ClienteDireccion As String - Dim ClienteLugar As String - - 'SI ESTA TIMBRADA - CON XML - If File.Exists(PathXML) AndAlso Vta.Serie <> "VistaPrevia" Then 'Cuando es vista previe y coincide la serie y folio se ponen los datos fiscales - Dim XmlDoc As New System.Xml.XmlDocument - XmlDoc.Load(PathXML) - - Dim TC As Decimal = 1 - Try - TC = XmlDoc.DocumentElement.Attributes("TipoCambio").InnerText.ToDecimal - Catch ex As Exception - TC = 1 - End Try - - Vta.FechaEmision = XmlDoc.DocumentElement.Attributes("fecha").InnerText.ToDate - Vta.NoSerieCertificadoContribuyente = XmlDoc.DocumentElement.Attributes("noCertificado").InnerText - - Dim validaElemento = XmlDoc.DocumentElement("cfdi:Complemento") - - If Not IsNothing(validaElemento) Then - For i As Integer = 0 To XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes.Count - 1 - If XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Name = "tfd:TimbreFiscalDigital" Then - Vta.FolioFiscal = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("UUID").InnerText - Vta.NoSerieCertificado = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("noCertificadoSAT").InnerText - Vta.FechaCertificacion = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("FechaTimbrado").InnerText.ToDate - Vta.SelloCFDi = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloCFD").InnerText - Vta.SelloSAT = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloSAT").InnerText - - End If - Next - Else - Vta.FolioFiscal = "Sin Timbrar" - Vta.NoSerieCertificado = "Sin Timbrar" - Vta.SelloCFDi = "Sin Timbrar" - Vta.SelloSAT = "Sin Timbrar" - End If - - 'SIN TIMBRAR - SIN XML - Else - Vta.FolioFiscal = "Sin Timbrar" - Vta.NoSerieCertificado = "Sin Timbrar" - Vta.SelloCFDi = "Sin Timbrar" - Vta.SelloSAT = "Sin Timbrar" - End If - - 'DIRECCION CLIENTE - If Vta.CveClienteSucursal.ToEntero > 0 Then - 'Si cliente tiene Noint, NoExt, CP - SBDireccion.AppendFormat("{0}", Vta.ClienteSucursal.Direccion) - If Vta.ClienteSucursal.NoExt.Length > 0 Then SBDireccion.AppendFormat(", No.Ext: {0}", Vta.ClienteSucursal.NoExt) - If Vta.ClienteSucursal.NoInt.Length > 0 Then SBDireccion.AppendFormat(", No.Int: {0}", Vta.ClienteSucursal.NoInt) - If UsuarioActual.CveEmpresa <> 66 Then SBDireccion.AppendFormat(", Col: {0}", Vta.ClienteSucursal.Colonia) - - If Not (UsuarioActual.CveEmpresa.Contiene(66, 81, 109) AndAlso Vta.TipoDocto = "Cot") Then - If Vta.ClienteSucursal.CP.Length > 0 Then SBDireccion.AppendFormat(", CP: {0} ", Vta.ClienteSucursal.CP.Trim) - End If - - 'Si cliente tiene Local, CD, Edo, Pais - If Vta.ClienteSucursal.Localidad IsNot Nothing AndAlso Vta.ClienteSucursal.Localidad.Length > 0 Then SBLugar.AppendFormat("Loc: {0}, ", Vta.ClienteSucursal.Localidad) - If Vta.ClienteSucursal.Municipio IsNot Nothing AndAlso Vta.ClienteSucursal.Municipio.Length > 0 Then SBLugar.AppendFormat("Cd: {0}, ", Vta.ClienteSucursal.Municipio) - If Vta.ClienteSucursal.Estado IsNot Nothing AndAlso Vta.ClienteSucursal.Estado.Length > 0 Then SBLugar.AppendFormat(" Edo: {0}, ", Vta.ClienteSucursal.Estado) - If Vta.ClienteSucursal.Pais IsNot Nothing AndAlso Vta.ClienteSucursal.Pais.Length > 0 Then SBLugar.AppendFormat(" País: {0} ", Vta.ClienteSucursal.Pais) - Else - SBDireccion.AppendFormat("{0}", Vta.Cliente.Direccion) - If Vta.Cliente.NoExt.Length > 0 Then SBDireccion.AppendFormat(", No.Ext: {0}", Vta.Cliente.NoExt) - If Vta.Cliente.NoInt.Length > 0 Then SBDireccion.AppendFormat(", No.Int: {0}", Vta.Cliente.NoInt) - If UsuarioActual.CveEmpresa <> 66 Then SBDireccion.AppendFormat(", Col: {0}", Vta.Cliente.Colonia) - - If Not (UsuarioActual.CveEmpresa.Contiene(66, 81, 109) AndAlso Vta.TipoDocto = "Cot") Then - If Vta.Cliente.CP.Length > 0 Then SBDireccion.AppendFormat(", CP: {0} ", Vta.Cliente.CP.Trim) - End If - - 'Si cliente tiene Local, CD, Edo, Pais - If Vta.Cliente.Localidad IsNot Nothing AndAlso Vta.Cliente.Localidad.Length > 0 Then SBLugar.AppendFormat("Loc: {0}, ", Vta.Cliente.Localidad) - If Vta.Cliente.Ciudad IsNot Nothing AndAlso Vta.Cliente.Ciudad.Length > 0 Then SBLugar.AppendFormat("Cd: {0}, ", Vta.Cliente.Ciudad) - If Vta.Cliente.Estado IsNot Nothing AndAlso Vta.Cliente.Estado.Length > 0 Then SBLugar.AppendFormat(" Edo: {0}, ", Vta.Cliente.Estado) - If Vta.Cliente.Pais IsNot Nothing AndAlso Vta.Cliente.Pais.Length > 0 Then SBLugar.AppendFormat(" País: {0} ", Vta.Cliente.Pais) - - End If - - ClienteDireccion = SBDireccion.ToString - ClienteLugar = SBLugar.ToString - SBDireccion.Clear() - SBLugar.Clear() - - 'LOGO - Dim LogoRuta As String = "" - 'POR SUCURSAL - LogoRuta = String.Format("{0}Formatos\Suc{1}.png", UsuarioActual.Empresa.Ruta, Vta.CveSucursal) - If File.Exists(LogoRuta) Then - LogoRuta = String.Format("file://{0}Formatos\Suc{1}.png", UsuarioActual.Empresa.Ruta, Vta.CveSucursal) - 'POR EMPRESA - Else - LogoRuta = String.Format("{0}Formatos\Logo.png", UsuarioActual.Empresa.Ruta) - If File.Exists(LogoRuta) Then - 'LogoRuta = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) - LogoRuta = String.Format("{0}", LogoRuta) - End If - End If - 'LogoRuta = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) - LogoRuta = String.Format("{0}", LogoRuta) - 'Si no tiene CBB, SE GENERA - If Not ImagenCBB.Exists Then - Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar() - CBB.GenerarCBB(UsuarioActual.Empresa.RFC, RFCReceptor, Vta.Total.ToString.ToDecimal, Vta.FolioFiscal, RutaCBB) - End If - ImgCBB = String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, Vta.SerieFolio) - - Dim CadenaOriginals As String = "||1.0|" + Vta.FolioFiscal + "|" + Vta.FechaCertificacion.ToString("yyyy-MM-dd") + "T" + Vta.FechaCertificacion.ToString("HH:mm:ss") + "|" + Vta.SelloCFDi + "|" + Vta.NoSerieCertificado + "||" - If Not ImagenCBB.Exists Then ImgCBB = "" - Dim RutaFormato As String = "" - - - 'AQUI EMPIEZA LOS PARAMETROS - Try - Dim params = New List(Of CrystalParametro) - - 'CLIENTE - params.Add(New CrystalParametro("ClienteCodigo", Vta.Cliente.Codigo)) - params.Add(New CrystalParametro("ClienteNombre", If(Vta.ClienteSucursal.ImprimeNombreSucursal = "True", If(Vta.CveClienteSucursal > 0, Vta.ClienteSucursal.Sucursal, Vta.Cliente.Nombre), If(Vta.AtencionA <> "" AndAlso Vta.TipoDocto.Contiene("Ing", "Rem") AndAlso RFCReceptor = "XAXX010101000", $"{Vta.Cliente.Nombre}({Vta.AtencionA})", Vta.Cliente.Nombre)))) - params.Add(New CrystalParametro("ClienteDireccion", ClienteDireccion)) - params.Add(New CrystalParametro("ClienteLugar", ClienteLugar)) - - - 'TOTALES - params.Add(New CrystalParametro("SubTotal", Vta.SubTotal.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("Descuento", Vta.Descuento.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("Amortizacion", Vta.Amortizacion.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("SubTotal2", (Vta.SubTotal - Vta.Descuento - Vta.Amortizacion).ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("IVA", Vta.IVA.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("RetIVA", Vta.RetIVA.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("RetISR", Vta.RetISR.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("Total", Vta.Total.ToString.FormatoNumero(2))) - params.Add(New CrystalParametro("ImporteLetra", Vta.Total.ToString.ToDouble.Texto2Letras(Vta.CveMoneda))) - - 'DATOS GENERALES - params.Add(New CrystalParametro("Observaciones", Vta.Observaciones)) - params.Add(New CrystalParametro("CveVendedor", Vta.CveVendedor.ToString)) - 'params.Add(New CrystalParametro("Status", Vta.EstatusFactura)) - params.Add(New CrystalParametro("FechaSolicitud", Vta.Fecha.ToString("dd/MMMM/yyyy"))) ' se puede omitir - params.Add(New CrystalParametro("Serie", Vta.Serie)) - params.Add(New CrystalParametro("Folio", Vta.Folio.ToString)) - params.Add(New CrystalParametro("DomicilioSucursal", DomicilioSucursal)) - params.Add(New CrystalParametro("Vencimiento", Vta.FechaVencimiento.ToString("dd/MM/yyyy"))) - params.Add(New CrystalParametro("FolioFiscal", Vta.FolioFiscal)) - params.Add(New CrystalParametro("FechaCertificacion", String.Format("{0}T{1}", Vta.FechaCertificacion.ToString("yyyy-MM-dd"), Vta.FechaCertificacion.ToString("HH:mm:ss")))) - params.Add(New CrystalParametro("SelloCFDI", Vta.SelloCFDi)) - params.Add(New CrystalParametro("CadenaSAT", CadenaOriginals)) - params.Add(New CrystalParametro("SelloSAT", Vta.SelloSAT)) - - params.Add(New CrystalParametro("QR", ImgCBB)) - params.Add(New CrystalParametro("ClienteRFC", RFCReceptor)) - params.Add(New CrystalParametro("FormaPago", Vta.FormaPagoText)) - params.Add(New CrystalParametro("Moneda", Vta.Moneda)) - params.Add(New CrystalParametro("TipoCambio", Vta.TipoCambio.ToString)) - params.Add(New CrystalParametro("CondicionPago", Vta.CondicionesPagoText)) - params.Add(New CrystalParametro("CadenaOriginal", CadenaOriginals)) - params.Add(New CrystalParametro("SerieCertificadoSAT", Vta.NoSerieCertificado)) - params.Add(New CrystalParametro("CertificadoContribuyente", Vta.NoSerieCertificadoContribuyente)) - params.Add(New CrystalParametro("NumCta", Vta.NumeroCuenta)) - params.Add(New CrystalParametro("LogoPath", LogoRuta)) - - 'VENDEDOR - Dim RowVendedor As DataRow = GlobalDTVendedores(-1).FiltroPrimero(String.Format("CveVendedor = {0}", Vta.CveVendedor.ToString)) - If Not IsNothing(RowVendedor) Then - params.Add(New CrystalParametro("VendedorNombre", RowVendedor("Vendedor").ToString)) - params.Add(New CrystalParametro("VendedorMail", RowVendedor("Correo").ToString)) - params.Add(New CrystalParametro("VendedorTelefono", RowVendedor("Telefono").ToString)) - params.Add(New CrystalParametro("VendedorCelular", RowVendedor("Celular").ToString)) - - End If - - params.Add(New CrystalParametro("CiudadSucursal", CiudadSucursal)) - params.Add(New CrystalParametro("OC", Vta.Det_OrdenCompra.ToString)) - - If UsuarioActual.Empresa.Funcionalidad(508) = "1" Then - params.Add(New CrystalParametro("IEPS", Vta.IEPS.ToString.FormatoNumero(2))) - End If - - If Vta.CveClienteSucursal > 0 Then - params.Add(New CrystalParametro("ClienteContactoMail", Vta.ClienteSucursal.CorreoSucursal)) - params.Add(New CrystalParametro("ClienteTelefono", Vta.ClienteSucursal.TelefonoSucursal)) - Else - params.Add(New CrystalParametro("ClienteContactoMail", Vta.Cliente.MailCotizacion)) - params.Add(New CrystalParametro("ClienteTelefono", If(Vta.TipoDocto.Contiene("Ing", "Rem") AndAlso Vta.Cliente.Telefono.Length > 6, Vta.Cliente.Telefono, Vta.TelefonoGenerico))) - End If - - If UsuarioActual.CveEmpresa.Contiene(17) Then - params.Add(New CrystalParametro("MetodoPago", Vta.ClaveMetodoPagoSAT.ToString)) - Else - params.Add(New CrystalParametro("MetodoPago", Vta.MetodoPago.ToString)) - End If - - - Select Case Vta.TipoDocto - Case "Ing" - NombreArchivo = "Factura" - NombreArchivoDescarga = "Factura" - TipoDocumento = "INGRESO" - - 'GENERAL - params.Add(New CrystalParametro("TipoDocumento", NombreArchivoDescarga)) - params.Add(New CrystalParametro("Tipo", TipoDocumento)) - params.Add(New CrystalParametro("Ref", TipoDocumentoRef)) - params.Add(New CrystalParametro("AplicaPagare", AplicaPagare)) - - 'VSH - If UsuarioActual.CveEmpresa.Contiene(4, 7, 11, 12, 122, 145) Then - 'DATOS CLIENTES - Dim ClienteRow = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveCliente = {0}", Vta.CveCliente.ToString)) - Dim DatosCliente = "" - If ClienteRow IsNot Nothing Then - DatosCliente = String.Format("{0} | {1} | {2}", Vta.SubProyecto.Municipio, ClienteRow("CuentaContable"), ClienteRow("Codigo")) - End If - params.Add(New CrystalParametro("DatosClientes", DatosCliente)) - params.Add(New CrystalParametro("Sucursal", Vta.SubProyecto.SubProyecto)) - End If - - 'COMPU, DN DIFUSA - If UsuarioActual.CveEmpresa.Contiene(72, 80, 119) Then - params.Add(New CrystalParametro("EstatusFactura", If(Vta.TipoEstatus = 5, Vta.EstatusFactura, ""))) - params.Add(New CrystalParametro("EstatusEntrega", If(Vta.Inv_CveEstatusEntrega = 1, Vta.Inv_EstatusEntrega, ""))) - params.Add(New CrystalParametro("PedidoContrato", Vta.PedidoContrato)) - params.Add(New CrystalParametro("DescripcionContrato", Vta.NumeroDescripcionContrato)) - - params.Add(New CrystalParametro("MonedaAbreviatura", If(Vta.MonedaAbreviatura.ToString IsNot Nothing, Vta.MonedaAbreviatura.ToString, ""))) - params.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) - params.Add(New CrystalParametro("FechaImpresion", Now.ToDateTime.ToString)) - params.Add(New CrystalParametro("Sucursal", Vta.SubProyecto.SubProyecto)) - - 'INE COMPLEMENTOS - If UsuarioActual.CveEmpresa.Contiene(72) Then - Dim INETipoProceso As String = "" - Dim INETipoComite As String = "" - Dim INEIdContabilidad As Integer = 0 - If Vta.ComplementoINE IsNot Nothing Then - INETipoProceso = Vta.ComplementoINE.INETipoProceso - INETipoComite = Vta.ComplementoINE.INETipoComite - INEIdContabilidad = Vta.ComplementoINE.INEIdContabilidad - End If - params.Add(New CrystalParametro("INETipoProceso", INETipoProceso)) - params.Add(New CrystalParametro("INETipoComite", INETipoComite)) - params.Add(New CrystalParametro("INEIdContabilidad", INEIdContabilidad)) - params.Add(New CrystalParametro("Referencia", Vta.Cliente.ReferenciaFiscal)) - params.Add(New CrystalParametro("ClienteContacto", Vta.AtencionA)) - End If - - 'DIRECCION ENVIO - If Vta.EnviarA.CveDireccionEnvio > 0 Then - Dim StrEnvioDi As New StringBuilder - StrEnvioDi.AppendFormat("{0}", Vta.EnviarA.EnvioDireccion) - If Vta.EnviarA.EnvioNoExt IsNot Nothing AndAlso Vta.EnviarA.EnvioNoExt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Ext: {0}", Vta.EnviarA.EnvioNoExt) - If Vta.EnviarA.EnvioNoInt IsNot Nothing AndAlso Vta.EnviarA.EnvioNoInt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Int: {0}", Vta.EnviarA.EnvioNoInt) - - params.Add(New CrystalParametro("EnvioDireccion", StrEnvioDi.ToString)) - params.Add(New CrystalParametro("EnvioNoExt", Vta.EnviarA.EnvioNoExt)) - params.Add(New CrystalParametro("EnvioNoInt", Vta.EnviarA.EnvioNoInt)) - params.Add(New CrystalParametro("EnvioColonia", Vta.EnviarA.EnvioColonia)) - params.Add(New CrystalParametro("EnvioCiudad", Vta.EnviarA.EnvioCiudad)) - params.Add(New CrystalParametro("EnvioEstado", Vta.EnviarA.EnvioEstado)) - params.Add(New CrystalParametro("EnvioContacto", Vta.EnviarA.EnvioContacto)) - params.Add(New CrystalParametro("EnvioDepartamento", Vta.EnviarA.EnvioDepartamento)) - params.Add(New CrystalParametro("EnvioCP", Vta.EnviarA.EnvioCP)) - Else - If Vta.CveClienteSucursal.ToEntero > 0 Then - Dim StrEnvioDi As New StringBuilder - StrEnvioDi.AppendFormat("{0}", Vta.ClienteSucursal.Direccion) - If Vta.ClienteSucursal.NoExt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Ext: {0}", Vta.ClienteSucursal.NoExt) - If Vta.ClienteSucursal.NoInt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Int: {0}", Vta.ClienteSucursal.NoInt) - params.Add(New CrystalParametro("EnvioDireccion", StrEnvioDi.ToString)) - params.Add(New CrystalParametro("EnvioColonia", If(Vta.ClienteSucursal.Colonia.Length > 0, Vta.ClienteSucursal.Colonia, ""))) - params.Add(New CrystalParametro("EnvioCiudad", If(Vta.ClienteSucursal.Municipio.Length > 0, Vta.ClienteSucursal.Municipio, ""))) - params.Add(New CrystalParametro("EnvioEstado", If(Vta.ClienteSucursal.Estado.Length > 0, Vta.ClienteSucursal.Estado, ""))) - params.Add(New CrystalParametro("EnvioCP", If(Vta.ClienteSucursal.CP.Length > 0, Vta.ClienteSucursal.CP, ""))) - Else - Dim StrEnvioDi As New StringBuilder - StrEnvioDi.AppendFormat("{0}", If(Vta.Cliente.Direccion.Length > 0, Vta.Cliente.Direccion, "")) - If Vta.Cliente.NoExt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Ext: {0}", Vta.Cliente.NoExt) - If Vta.Cliente.NoInt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Int: {0}", Vta.Cliente.NoInt) - params.Add(New CrystalParametro("EnvioDireccion", StrEnvioDi.ToString)) - params.Add(New CrystalParametro("EnvioColonia", If(Vta.Cliente.Colonia.Length > 0, Vta.Cliente.Colonia, ""))) - params.Add(New CrystalParametro("EnvioCiudad", If(Vta.Cliente.Localidad IsNot Nothing And Vta.Cliente.Localidad.Length > 0, Vta.Cliente.Localidad, ""))) - params.Add(New CrystalParametro("EnvioEstado", If(Vta.Cliente.Estado.Length > 0, Vta.Cliente.Estado, ""))) - params.Add(New CrystalParametro("EnvioCP", If(Vta.Cliente.CP.Length > 0, Vta.Cliente.CP, ""))) - End If - - End If - - 'CLIENTE SUCURSAL - If Vta.CveClienteSucursal.ToEntero > 0 Then - params.Add(New CrystalParametro("ClienteCalle", If(Vta.ClienteSucursal.Direccion.Length > 0, Vta.ClienteSucursal.Direccion, ""))) - params.Add(New CrystalParametro("ClienteColonia", If(Vta.ClienteSucursal.Colonia.Length > 0, Vta.ClienteSucursal.Colonia, ""))) - params.Add(New CrystalParametro("ClienteCiudad", If(Vta.ClienteSucursal.Localidad IsNot Nothing And Vta.ClienteSucursal.Localidad.Length > 0, Vta.ClienteSucursal.Localidad, ""))) - params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.ClienteSucursal.Municipio.Length > 0, Vta.ClienteSucursal.Municipio, ""))) - params.Add(New CrystalParametro("ClienteEstado", If(Vta.ClienteSucursal.Estado.Length > 0, Vta.ClienteSucursal.Estado, ""))) - params.Add(New CrystalParametro("ClienteCP", If(Vta.ClienteSucursal.CP.Length > 0, Vta.ClienteSucursal.CP, ""))) - params.Add(New CrystalParametro("ClienteNoInt", If(Vta.ClienteSucursal.NoInt.Length > 0, Vta.ClienteSucursal.NoInt, ""))) - params.Add(New CrystalParametro("ClienteNoExt", If(Vta.ClienteSucursal.NoExt.Length > 0, Vta.ClienteSucursal.NoExt, ""))) - params.Add(New CrystalParametro("ClientePais", If(Vta.ClienteSucursal.Pais.Length > 0, Vta.ClienteSucursal.Pais, ""))) - Else - params.Add(New CrystalParametro("ClienteCalle", If(Vta.Cliente.Direccion.Length > 0, Vta.Cliente.Direccion, ""))) - params.Add(New CrystalParametro("ClienteColonia", If(Vta.Cliente.Colonia.Length > 0, Vta.Cliente.Colonia, ""))) - params.Add(New CrystalParametro("ClienteCiudad", If(Vta.Cliente.Localidad IsNot Nothing And Vta.Cliente.Localidad.Length > 0, Vta.Cliente.Localidad, ""))) - params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.Cliente.Ciudad.Length > 0, Vta.Cliente.Ciudad, ""))) - params.Add(New CrystalParametro("ClienteEstado", If(Vta.Cliente.Estado.Length > 0, Vta.Cliente.Estado, ""))) - params.Add(New CrystalParametro("ClienteCP", If(Vta.Cliente.CP.Length > 0, Vta.Cliente.CP, ""))) - params.Add(New CrystalParametro("ClienteNoInt", If(Vta.Cliente.NoInt.Length > 0, Vta.Cliente.NoInt, ""))) - params.Add(New CrystalParametro("ClienteNoExt", If(Vta.Cliente.NoExt.Length > 0, Vta.Cliente.NoExt, ""))) - params.Add(New CrystalParametro("ClientePais", If(Vta.Cliente.Pais.Length > 0, Vta.Cliente.Pais, ""))) - End If - End If - - RutaFormato = String.Format("{0}Formatos\{1}.mrt", UsuarioActual.Empresa.Ruta, NombreArchivo) - - Case "Egs" - If UsuarioActual.CveEmpresa.Contiene(72, 80) Then - NombreArchivo = "NotaCredito" - Else - NombreArchivo = "Factura" - End If - NombreArchivoDescarga = "Nota de Crédito" - TipoDocumento = "EGRESO" - TipoDocumentoRef = String.Format(": Ref.:{0}", Vta.RefDocto) - AplicaPagare = "0" - - 'GENERAL - params.Add(New CrystalParametro("TipoDocumento", NombreArchivoDescarga)) - params.Add(New CrystalParametro("Tipo", TipoDocumento)) - params.Add(New CrystalParametro("Ref", TipoDocumentoRef)) - params.Add(New CrystalParametro("AplicaPagare", AplicaPagare)) - params.Add(New CrystalParametro("Fecha", String.Format("{0}T{1}", Vta.Fecha.ToString("yyyy-MM-dd"), Vta.Fecha.ToString("HH:mm:ss")))) - - 'ALAN YEPIZ - If UsuarioActual.CveEmpresa.Contiene(123) Then - params.Add(New CrystalParametro("DiaExpedicion", String.Format("{0}", Vta.Fecha.ToDate.Day))) - params.Add(New CrystalParametro("MesExpedicion", String.Format("{0}", Vta.Fecha.ToDate.Month))) - params.Add(New CrystalParametro("AñoExpedicion", String.Format("{0}", Vta.Fecha.ToDate.Year))) - End If - - 'COMPU, DN DIFUSA - If UsuarioActual.CveEmpresa.Contiene(72, 80, 119) Then - params.Add(New CrystalParametro("EstatusFactura", If(Vta.TipoEstatus = 5, Vta.EstatusFactura, ""))) - params.Add(New CrystalParametro("EstatusEntrega", If(Vta.Inv_CveEstatusEntrega = 1, Vta.Inv_EstatusEntrega, ""))) - params.Add(New CrystalParametro("PedidoContrato", Vta.PedidoContrato)) - - params.Add(New CrystalParametro("MonedaAbreviatura", If(Vta.MonedaAbreviatura.ToString IsNot Nothing, Vta.MonedaAbreviatura.ToString, ""))) - params.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) - params.Add(New CrystalParametro("FechaImpresion", Now.ToDateTime.ToString)) - params.Add(New CrystalParametro("Sucursal", Vta.SubProyecto.SubProyecto)) - - 'CLIENTE SUCURSAL - If Vta.CveClienteSucursal.ToEntero > 0 Then - params.Add(New CrystalParametro("ClienteCalle", If(Vta.ClienteSucursal.Direccion.Length > 0, Vta.ClienteSucursal.Direccion, ""))) - params.Add(New CrystalParametro("ClienteColonia", If(Vta.ClienteSucursal.Colonia.Length > 0, Vta.ClienteSucursal.Colonia, ""))) - params.Add(New CrystalParametro("ClienteCiudad", If(Vta.ClienteSucursal.Localidad IsNot Nothing And Vta.ClienteSucursal.Localidad.Length > 0, Vta.ClienteSucursal.Localidad, ""))) - params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.ClienteSucursal.Municipio.Length > 0, Vta.ClienteSucursal.Municipio, ""))) - params.Add(New CrystalParametro("ClienteEstado", If(Vta.ClienteSucursal.Estado.Length > 0, Vta.ClienteSucursal.Estado, ""))) - params.Add(New CrystalParametro("ClienteCP", If(Vta.ClienteSucursal.CP.Length > 0, Vta.ClienteSucursal.CP, ""))) - params.Add(New CrystalParametro("ClienteNoInt", If(Vta.ClienteSucursal.NoInt.Length > 0, Vta.ClienteSucursal.NoInt, ""))) - params.Add(New CrystalParametro("ClienteNoExt", If(Vta.ClienteSucursal.NoExt.Length > 0, Vta.ClienteSucursal.NoExt, ""))) - params.Add(New CrystalParametro("ClientePais", If(Vta.ClienteSucursal.Pais.Length > 0, Vta.ClienteSucursal.Pais, ""))) - Else - params.Add(New CrystalParametro("ClienteCalle", If(Vta.Cliente.Direccion.Length > 0, Vta.Cliente.Direccion, ""))) - params.Add(New CrystalParametro("ClienteColonia", If(Vta.Cliente.Colonia.Length > 0, Vta.Cliente.Colonia, ""))) - params.Add(New CrystalParametro("ClienteCiudad", If(Vta.Cliente.Localidad IsNot Nothing And Vta.Cliente.Localidad.Length > 0, Vta.Cliente.Localidad, ""))) - params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.Cliente.Ciudad.Length > 0, Vta.Cliente.Ciudad, ""))) - params.Add(New CrystalParametro("ClienteEstado", If(Vta.Cliente.Estado.Length > 0, Vta.Cliente.Estado, ""))) - params.Add(New CrystalParametro("ClienteCP", If(Vta.Cliente.CP.Length > 0, Vta.Cliente.CP, ""))) - params.Add(New CrystalParametro("ClienteNoInt", If(Vta.Cliente.NoInt.Length > 0, Vta.Cliente.NoInt, ""))) - params.Add(New CrystalParametro("ClienteNoExt", If(Vta.Cliente.NoExt.Length > 0, Vta.Cliente.NoExt, ""))) - params.Add(New CrystalParametro("ClientePais", If(Vta.Cliente.Pais.Length > 0, Vta.Cliente.Pais, ""))) - End If - End If - - - RutaFormato = String.Format("{0}Formatos\{1}.mrt", UsuarioActual.Empresa.Ruta, "Factura") - Case Else - NombreArchivo = "" - TipoDocumento = "" - End Select - If NombreArchivo = "" Then - GuardaLog("No se especifico el tipo de Impresion de venta (Venta, Remision, Cotización, Nota de Crédito).") - Exit Sub - End If - 'TERMINA REGION PARAMETROS - - Dim lrds As New List(Of ReportDataSource) - 'Si es ECLIPSE CREAR COLUMAS PARA FIRMAS EN DtDetalle. - If UsuarioActual.CveEmpresa.Contiene(1, 15, 17, 71, 76, 125) Then - Dim DtDetalleFirmas As New DataTable - DtDetalleFirmas.TableName = "DetalleFirma" - DtDetalleFirmas = Vta.DtDetalle.Copy() - - 'SI NO TIENE LAS COLUMNAS DE FIRMAS LAS CREA. - If Not DtDetalleFirmas.Columns.Contains("Titulo") Then - DtDetalleFirmas.Columns.Add("Titulo", GetType(String)) - DtDetalleFirmas.Columns.Add("Nombre", GetType(String)) - DtDetalleFirmas.Columns.Add("Puesto", GetType(String)) - DtDetalleFirmas.Columns.Add("Lado", GetType(Integer)) - End If - - 'Se llenan los Rows de las columnas con los datos del DtFirmas - For i As Integer = 0 To Vta.DtFirmas.Rows.Count - 1 - 'Si DtDetalle es menor al DtFirmas, crea un nuevo Row en DtDetalle y le asigna valor, Si no solo asigna valor - If DtDetalleFirmas.Rows.Count < i + 1 Then - Dim Dr = DtDetalleFirmas.NewRow - Dr("Titulo") = Vta.DtFirmas(i)("Titulo").ToString - Dr("Nombre") = Vta.DtFirmas(i)("Nombre").ToString - Dr("Puesto") = Vta.DtFirmas(i)("Puesto").ToString - Dr("Lado") = Vta.DtFirmas(i)("Lado").ToString.ToEntero - DtDetalleFirmas.Rows.Add(Dr) - Else - DtDetalleFirmas(i)("Titulo") = Vta.DtFirmas(i)("Titulo").ToString - DtDetalleFirmas(i)("Nombre") = Vta.DtFirmas(i)("Nombre").ToString - DtDetalleFirmas(i)("Puesto") = Vta.DtFirmas(i)("Puesto").ToString - DtDetalleFirmas(i)("Lado") = Vta.DtFirmas(i)("Lado").ToString.ToEntero - End If - Next i - - Dim rds As New ReportDataSource With {.Name = "DsOC", .Value = DtDetalleFirmas} - lrds.Add(rds) - Else - Dim rds As New ReportDataSource With {.Name = "DsOC", .Value = Vta.DtDetalle} - lrds.Add(rds) - End If - - Dim rds1 As New ReportDataSource With {.Name = "DataSet1", .Value = If(Vta.DtDeduccion IsNot Nothing, Vta.DtDeduccion, New DataTable)} ' sino esta creado el objeto, lo creamos, para que no truene el reporte - lrds.Add(rds1) - - 'DETALLE FIRMAS - - Dim rds2 As New ReportDataSource With {.Name = "DataSet2", .Value = If(Vta.DtFirmas IsNot Nothing, Vta.DtFirmas, New DataTable)} ' sino esta creado el objeto, lo creamos, para que no truene el reporte - lrds.Add(rds2) - - Dim Archivo As New System.IO.FileInfo(RutaFormato) - - Dim DataSet As New DataSet - Vta.DtDetalle.TableName = "Datos" - Vta.DtDeduccion.TableName = "Deduccion" - DataSet.Tables.Add(Vta.DtDetalle.Copy) - DataSet.Tables.Add(Vta.DtDeduccion.Copy) - - If Archivo.Exists Then - ImprimirbytesPDF(ImprimirPDFPyME(RutaFormato, DataSet, params, NombreArchivo, "PDF", MR:=Nothing), "Factura") - If Guardar Then - Dim ArchivoPDF As New System.IO.FileInfo(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio)) - If Not ArchivoPDF.Exists Then - Try - DirectoryExistsCreate(String.Format("{0}PDF", UsuarioActual.Empresa.Ruta)) - DirectoryExistsCreate(String.Format("{0}PDF\{1}", UsuarioActual.Empresa.Ruta, Vta.TipoDocto)) - File.WriteAllBytes(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio), retorno) - Catch ex As Exception - Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia) - End Try - Else - Try - ArchivoPDF.Delete() - File.WriteAllBytes(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio), retorno) - Catch ex As Exception - Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia) - End Try - End If - End If - - Else - params.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) - params.Add(New CrystalParametro("RFC", UsuarioActual.Empresa.RFC)) - ImprimirbytesPDF(ImprimirPDFPyME(RutaFormato, DataSet, params, NombreArchivo, "PDF", MR:=Nothing), "Factura") - End If - - - Catch ex As Exception - GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) - End Try - End Sub + 'Public Sub PdfFacturaPyME(ByRef Vta As Modelos.Factura, DT As DataTable, Optional Guardar As Boolean = True) + ' Dim retorno As Byte() = Nothing + + ' 'DATOS GENERALES + ' Dim Ruta As String = UsuarioActual.Empresa.Ruta + ' Dim PathXML As String = $"{Ruta}XML\{Vta.TipoDocto}\{Vta.SerieFolio}.xml" + ' Dim NombreArchivo As String = "" + ' Dim NombreArchivoDescarga As String = "" + ' Dim TipoDocumento As String = "" + ' Dim TipoDocumentoRef As String = "" + ' Dim AplicaPagare As String = "1" + + ' Dim RFCReceptor As String = "" + + ' If String.IsNullOrEmpty(Vta.RFCReceptor) Then + ' RFCReceptor = Vta.Cliente.RFC + ' If Vta.FacturarSucursal Then + ' If Vta.ClienteSucursal IsNot Nothing Then + ' RFCReceptor = Vta.ClienteSucursal.RFC + ' End If + ' End If + ' Else + ' RFCReceptor = Vta.RFCReceptor + ' End If + + ' Dim RutaCBB As String = String.Format("{0}CBB\{1}.jpg", Ruta, Vta.SerieFolio) + ' Dim ImagenCBB As New System.IO.FileInfo(RutaCBB) + ' Dim ImgCBB As String '= String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, Vta.SerieFolio) + + ' Dim ImagenPath = String.Format("{0}Formatos\Suc{1}\logo.png", UsuarioActual.Empresa.Ruta, Vta.CveSucursal) + ' Dim Logo As New System.IO.FileInfo(ImagenPath) + ' Dim ImgLogo = New Uri(String.Format("{0}Empresas/{1}/Formatos/Suc{2}.png", UrlSitio, UsuarioActual.CveEmpresa, Vta.CveSucursal)).AbsoluteUri + + ' Dim SBDomicilioSucursal As New StringBuilder() + ' Dim CiudadSucursal As String = String.Format("{0},{1}", Vta.SubProyecto.Municipio, Vta.SubProyecto.Estado) + ' Dim DomicilioSucursal As String = "" + + ' SBDomicilioSucursal.AppendFormat("{0}", Vta.SubProyecto.Calle) + ' If Vta.SubProyecto.NoExt.ToEntero > 0 Then SBDomicilioSucursal.AppendFormat(" No.Ext: {0}", Vta.SubProyecto.NoExt) + ' If Vta.SubProyecto.NoInt.ToEntero > 0 Then SBDomicilioSucursal.AppendFormat(", No.Int: {0}", Vta.SubProyecto.NoInt) + ' If Vta.SubProyecto.Colonia.Length > 0 Then SBDomicilioSucursal.AppendFormat(", Col: {0}", Vta.SubProyecto.Colonia) + ' If Vta.SubProyecto.CP.ToEntero > 0 Then SBDomicilioSucursal.AppendFormat(", CP: {0}", Vta.SubProyecto.CP) + ' If CiudadSucursal.Length > 0 Then SBDomicilioSucursal.AppendFormat(", {0}", CiudadSucursal) + ' If Vta.SubProyecto.Pais.Length > 0 Then SBDomicilioSucursal.AppendFormat(", {0}", Vta.SubProyecto.Pais) + + ' DomicilioSucursal = SBDomicilioSucursal.ToString + + ' Dim Fecha As String = Vta.Fecha.ToShortDateString + + ' Dim SBDireccion As New StringBuilder() + ' Dim SBLugar As New StringBuilder() + ' Dim ClienteDireccion As String + ' Dim ClienteLugar As String + + ' 'SI ESTA TIMBRADA - CON XML + ' If File.Exists(PathXML) AndAlso Vta.Serie <> "VistaPrevia" Then 'Cuando es vista previe y coincide la serie y folio se ponen los datos fiscales + ' Dim XmlDoc As New System.Xml.XmlDocument + ' XmlDoc.Load(PathXML) + + ' Dim TC As Decimal = 1 + ' Try + ' TC = XmlDoc.DocumentElement.Attributes("TipoCambio").InnerText.ToDecimal + ' Catch ex As Exception + ' TC = 1 + ' End Try + + ' Vta.FechaEmision = XmlDoc.DocumentElement.Attributes("fecha").InnerText.ToDate + ' Vta.NoSerieCertificadoContribuyente = XmlDoc.DocumentElement.Attributes("noCertificado").InnerText + + ' Dim validaElemento = XmlDoc.DocumentElement("cfdi:Complemento") + + ' If Not IsNothing(validaElemento) Then + ' For i As Integer = 0 To XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes.Count - 1 + ' If XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Name = "tfd:TimbreFiscalDigital" Then + ' Vta.FolioFiscal = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("UUID").InnerText + ' Vta.NoSerieCertificado = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("noCertificadoSAT").InnerText + ' Vta.FechaCertificacion = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("FechaTimbrado").InnerText.ToDate + ' Vta.SelloCFDi = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloCFD").InnerText + ' Vta.SelloSAT = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloSAT").InnerText + + ' End If + ' Next + ' Else + ' Vta.FolioFiscal = "Sin Timbrar" + ' Vta.NoSerieCertificado = "Sin Timbrar" + ' Vta.SelloCFDi = "Sin Timbrar" + ' Vta.SelloSAT = "Sin Timbrar" + ' End If + + ' 'SIN TIMBRAR - SIN XML + ' Else + ' Vta.FolioFiscal = "Sin Timbrar" + ' Vta.NoSerieCertificado = "Sin Timbrar" + ' Vta.SelloCFDi = "Sin Timbrar" + ' Vta.SelloSAT = "Sin Timbrar" + ' End If + + ' 'DIRECCION CLIENTE + ' If Vta.CveClienteSucursal.ToEntero > 0 Then + ' 'Si cliente tiene Noint, NoExt, CP + ' SBDireccion.AppendFormat("{0}", Vta.ClienteSucursal.Direccion) + ' If Vta.ClienteSucursal.NoExt.Length > 0 Then SBDireccion.AppendFormat(", No.Ext: {0}", Vta.ClienteSucursal.NoExt) + ' If Vta.ClienteSucursal.NoInt.Length > 0 Then SBDireccion.AppendFormat(", No.Int: {0}", Vta.ClienteSucursal.NoInt) + ' If UsuarioActual.CveEmpresa <> 66 Then SBDireccion.AppendFormat(", Col: {0}", Vta.ClienteSucursal.Colonia) + + ' If Not (UsuarioActual.CveEmpresa.Contiene(66, 81, 109) AndAlso Vta.TipoDocto = "Cot") Then + ' If Vta.ClienteSucursal.CP.Length > 0 Then SBDireccion.AppendFormat(", CP: {0} ", Vta.ClienteSucursal.CP.Trim) + ' End If + + ' 'Si cliente tiene Local, CD, Edo, Pais + ' If Vta.ClienteSucursal.Localidad IsNot Nothing AndAlso Vta.ClienteSucursal.Localidad.Length > 0 Then SBLugar.AppendFormat("Loc: {0}, ", Vta.ClienteSucursal.Localidad) + ' If Vta.ClienteSucursal.Municipio IsNot Nothing AndAlso Vta.ClienteSucursal.Municipio.Length > 0 Then SBLugar.AppendFormat("Cd: {0}, ", Vta.ClienteSucursal.Municipio) + ' If Vta.ClienteSucursal.Estado IsNot Nothing AndAlso Vta.ClienteSucursal.Estado.Length > 0 Then SBLugar.AppendFormat(" Edo: {0}, ", Vta.ClienteSucursal.Estado) + ' If Vta.ClienteSucursal.Pais IsNot Nothing AndAlso Vta.ClienteSucursal.Pais.Length > 0 Then SBLugar.AppendFormat(" País: {0} ", Vta.ClienteSucursal.Pais) + ' Else + ' SBDireccion.AppendFormat("{0}", Vta.Cliente.Direccion) + ' If Vta.Cliente.NoExt.Length > 0 Then SBDireccion.AppendFormat(", No.Ext: {0}", Vta.Cliente.NoExt) + ' If Vta.Cliente.NoInt.Length > 0 Then SBDireccion.AppendFormat(", No.Int: {0}", Vta.Cliente.NoInt) + ' If UsuarioActual.CveEmpresa <> 66 Then SBDireccion.AppendFormat(", Col: {0}", Vta.Cliente.Colonia) + + ' If Not (UsuarioActual.CveEmpresa.Contiene(66, 81, 109) AndAlso Vta.TipoDocto = "Cot") Then + ' If Vta.Cliente.CP.Length > 0 Then SBDireccion.AppendFormat(", CP: {0} ", Vta.Cliente.CP.Trim) + ' End If + + ' 'Si cliente tiene Local, CD, Edo, Pais + ' If Vta.Cliente.Localidad IsNot Nothing AndAlso Vta.Cliente.Localidad.Length > 0 Then SBLugar.AppendFormat("Loc: {0}, ", Vta.Cliente.Localidad) + ' If Vta.Cliente.Ciudad IsNot Nothing AndAlso Vta.Cliente.Ciudad.Length > 0 Then SBLugar.AppendFormat("Cd: {0}, ", Vta.Cliente.Ciudad) + ' If Vta.Cliente.Estado IsNot Nothing AndAlso Vta.Cliente.Estado.Length > 0 Then SBLugar.AppendFormat(" Edo: {0}, ", Vta.Cliente.Estado) + ' If Vta.Cliente.Pais IsNot Nothing AndAlso Vta.Cliente.Pais.Length > 0 Then SBLugar.AppendFormat(" País: {0} ", Vta.Cliente.Pais) + + ' End If + + ' ClienteDireccion = SBDireccion.ToString + ' ClienteLugar = SBLugar.ToString + ' SBDireccion.Clear() + ' SBLugar.Clear() + + ' 'LOGO + ' Dim LogoRuta As String = "" + ' 'POR SUCURSAL + ' LogoRuta = String.Format("{0}Formatos\Suc{1}.png", UsuarioActual.Empresa.Ruta, Vta.CveSucursal) + ' If File.Exists(LogoRuta) Then + ' LogoRuta = String.Format("file://{0}Formatos\Suc{1}.png", UsuarioActual.Empresa.Ruta, Vta.CveSucursal) + ' 'POR EMPRESA + ' Else + ' LogoRuta = String.Format("{0}Formatos\Logo.png", UsuarioActual.Empresa.Ruta) + ' If File.Exists(LogoRuta) Then + ' 'LogoRuta = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) + ' LogoRuta = String.Format("{0}", LogoRuta) + ' End If + ' End If + ' 'LogoRuta = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) + ' LogoRuta = String.Format("{0}", LogoRuta) + ' 'Si no tiene CBB, SE GENERA + ' If Not ImagenCBB.Exists Then + ' Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar() + ' CBB.GenerarCBB(UsuarioActual.Empresa.RFC, RFCReceptor, Vta.Total.ToString.ToDecimal, Vta.FolioFiscal, RutaCBB) + ' End If + ' ImgCBB = String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, Vta.SerieFolio) + + ' Dim CadenaOriginals As String = "||1.0|" + Vta.FolioFiscal + "|" + Vta.FechaCertificacion.ToString("yyyy-MM-dd") + "T" + Vta.FechaCertificacion.ToString("HH:mm:ss") + "|" + Vta.SelloCFDi + "|" + Vta.NoSerieCertificado + "||" + ' If Not ImagenCBB.Exists Then ImgCBB = "" + ' Dim RutaFormato As String = "" + + + ' 'AQUI EMPIEZA LOS PARAMETROS + ' Try + ' Dim params = New List(Of CrystalParametro) + + ' 'CLIENTE + ' params.Add(New CrystalParametro("ClienteCodigo", Vta.Cliente.Codigo)) + ' params.Add(New CrystalParametro("ClienteNombre", If(Vta.ClienteSucursal.ImprimeNombreSucursal = "True", If(Vta.CveClienteSucursal > 0, Vta.ClienteSucursal.Sucursal, Vta.Cliente.Nombre), If(Vta.AtencionA <> "" AndAlso Vta.TipoDocto.Contiene("Ing", "Rem") AndAlso RFCReceptor = "XAXX010101000", $"{Vta.Cliente.Nombre}({Vta.AtencionA})", Vta.Cliente.Nombre)))) + ' params.Add(New CrystalParametro("ClienteDireccion", ClienteDireccion)) + ' params.Add(New CrystalParametro("ClienteLugar", ClienteLugar)) + + + ' 'TOTALES + ' params.Add(New CrystalParametro("SubTotal", Vta.SubTotal.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("Descuento", Vta.Descuento.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("Amortizacion", Vta.Amortizacion.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("SubTotal2", (Vta.SubTotal - Vta.Descuento - Vta.Amortizacion).ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("IVA", Vta.IVA.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("RetIVA", Vta.RetIVA.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("RetISR", Vta.RetISR.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("Total", Vta.Total.ToString.FormatoNumero(2))) + ' params.Add(New CrystalParametro("ImporteLetra", Vta.Total.ToString.ToDouble.Texto2Letras(Vta.CveMoneda))) + + ' 'DATOS GENERALES + ' params.Add(New CrystalParametro("Observaciones", Vta.Observaciones)) + ' params.Add(New CrystalParametro("CveVendedor", Vta.CveVendedor.ToString)) + ' 'params.Add(New CrystalParametro("Status", Vta.EstatusFactura)) + ' params.Add(New CrystalParametro("FechaSolicitud", Vta.Fecha.ToString("dd/MMMM/yyyy"))) ' se puede omitir + ' params.Add(New CrystalParametro("Serie", Vta.Serie)) + ' params.Add(New CrystalParametro("Folio", Vta.Folio.ToString)) + ' params.Add(New CrystalParametro("DomicilioSucursal", DomicilioSucursal)) + ' params.Add(New CrystalParametro("Vencimiento", Vta.FechaVencimiento.ToString("dd/MM/yyyy"))) + ' params.Add(New CrystalParametro("FolioFiscal", Vta.FolioFiscal)) + ' params.Add(New CrystalParametro("FechaCertificacion", String.Format("{0}T{1}", Vta.FechaCertificacion.ToString("yyyy-MM-dd"), Vta.FechaCertificacion.ToString("HH:mm:ss")))) + ' params.Add(New CrystalParametro("SelloCFDI", Vta.SelloCFDi)) + ' params.Add(New CrystalParametro("CadenaSAT", CadenaOriginals)) + ' params.Add(New CrystalParametro("SelloSAT", Vta.SelloSAT)) + + ' params.Add(New CrystalParametro("QR", ImgCBB)) + ' params.Add(New CrystalParametro("ClienteRFC", RFCReceptor)) + ' params.Add(New CrystalParametro("FormaPago", Vta.FormaPagoText)) + ' params.Add(New CrystalParametro("Moneda", Vta.Moneda)) + ' params.Add(New CrystalParametro("TipoCambio", Vta.TipoCambio.ToString)) + ' params.Add(New CrystalParametro("CondicionPago", Vta.CondicionesPagoText)) + ' params.Add(New CrystalParametro("CadenaOriginal", CadenaOriginals)) + ' params.Add(New CrystalParametro("SerieCertificadoSAT", Vta.NoSerieCertificado)) + ' params.Add(New CrystalParametro("CertificadoContribuyente", Vta.NoSerieCertificadoContribuyente)) + ' params.Add(New CrystalParametro("NumCta", Vta.NumeroCuenta)) + ' params.Add(New CrystalParametro("LogoPath", LogoRuta)) + + ' 'VENDEDOR + ' Dim RowVendedor As DataRow = GlobalDTVendedores(-1).FiltroPrimero(String.Format("CveVendedor = {0}", Vta.CveVendedor.ToString)) + ' If Not IsNothing(RowVendedor) Then + ' params.Add(New CrystalParametro("VendedorNombre", RowVendedor("Vendedor").ToString)) + ' params.Add(New CrystalParametro("VendedorMail", RowVendedor("Correo").ToString)) + ' params.Add(New CrystalParametro("VendedorTelefono", RowVendedor("Telefono").ToString)) + ' params.Add(New CrystalParametro("VendedorCelular", RowVendedor("Celular").ToString)) + + ' End If + + ' params.Add(New CrystalParametro("CiudadSucursal", CiudadSucursal)) + ' params.Add(New CrystalParametro("OC", Vta.Det_OrdenCompra.ToString)) + + ' If UsuarioActual.Empresa.Funcionalidad(508) = "1" Then + ' params.Add(New CrystalParametro("IEPS", Vta.IEPS.ToString.FormatoNumero(2))) + ' End If + + ' If Vta.CveClienteSucursal > 0 Then + ' params.Add(New CrystalParametro("ClienteContactoMail", Vta.ClienteSucursal.CorreoSucursal)) + ' params.Add(New CrystalParametro("ClienteTelefono", Vta.ClienteSucursal.TelefonoSucursal)) + ' Else + ' params.Add(New CrystalParametro("ClienteContactoMail", Vta.Cliente.MailCotizacion)) + ' params.Add(New CrystalParametro("ClienteTelefono", If(Vta.TipoDocto.Contiene("Ing", "Rem") AndAlso Vta.Cliente.Telefono.Length > 6, Vta.Cliente.Telefono, Vta.TelefonoGenerico))) + ' End If + + ' If UsuarioActual.CveEmpresa.Contiene(17) Then + ' params.Add(New CrystalParametro("MetodoPago", Vta.ClaveMetodoPagoSAT.ToString)) + ' Else + ' params.Add(New CrystalParametro("MetodoPago", Vta.MetodoPago.ToString)) + ' End If + + + ' Select Case Vta.TipoDocto + ' Case "Ing" + ' NombreArchivo = "Factura" + ' NombreArchivoDescarga = "Factura" + ' TipoDocumento = "INGRESO" + + ' 'GENERAL + ' params.Add(New CrystalParametro("TipoDocumento", NombreArchivoDescarga)) + ' params.Add(New CrystalParametro("Tipo", TipoDocumento)) + ' params.Add(New CrystalParametro("Ref", TipoDocumentoRef)) + ' params.Add(New CrystalParametro("AplicaPagare", AplicaPagare)) + + ' 'VSH + ' If UsuarioActual.CveEmpresa.Contiene(4, 7, 11, 12, 122, 145) Then + ' 'DATOS CLIENTES + ' Dim ClienteRow = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveCliente = {0}", Vta.CveCliente.ToString)) + ' Dim DatosCliente = "" + ' If ClienteRow IsNot Nothing Then + ' DatosCliente = String.Format("{0} | {1} | {2}", Vta.SubProyecto.Municipio, ClienteRow("CuentaContable"), ClienteRow("Codigo")) + ' End If + ' params.Add(New CrystalParametro("DatosClientes", DatosCliente)) + ' params.Add(New CrystalParametro("Sucursal", Vta.SubProyecto.SubProyecto)) + ' End If + + ' 'COMPU, DN DIFUSA + ' If UsuarioActual.CveEmpresa.Contiene(72, 80, 119) Then + ' params.Add(New CrystalParametro("EstatusFactura", If(Vta.TipoEstatus = 5, Vta.EstatusFactura, ""))) + ' params.Add(New CrystalParametro("EstatusEntrega", If(Vta.Inv_CveEstatusEntrega = 1, Vta.Inv_EstatusEntrega, ""))) + ' params.Add(New CrystalParametro("PedidoContrato", Vta.PedidoContrato)) + ' params.Add(New CrystalParametro("DescripcionContrato", Vta.NumeroDescripcionContrato)) + + ' params.Add(New CrystalParametro("MonedaAbreviatura", If(Vta.MonedaAbreviatura.ToString IsNot Nothing, Vta.MonedaAbreviatura.ToString, ""))) + ' params.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) + ' params.Add(New CrystalParametro("FechaImpresion", Now.ToDateTime.ToString)) + ' params.Add(New CrystalParametro("Sucursal", Vta.SubProyecto.SubProyecto)) + + ' 'INE COMPLEMENTOS + ' If UsuarioActual.CveEmpresa.Contiene(72) Then + ' Dim INETipoProceso As String = "" + ' Dim INETipoComite As String = "" + ' Dim INEIdContabilidad As Integer = 0 + ' If Vta.ComplementoINE IsNot Nothing Then + ' INETipoProceso = Vta.ComplementoINE.INETipoProceso + ' INETipoComite = Vta.ComplementoINE.INETipoComite + ' INEIdContabilidad = Vta.ComplementoINE.INEIdContabilidad + ' End If + ' params.Add(New CrystalParametro("INETipoProceso", INETipoProceso)) + ' params.Add(New CrystalParametro("INETipoComite", INETipoComite)) + ' params.Add(New CrystalParametro("INEIdContabilidad", INEIdContabilidad)) + ' params.Add(New CrystalParametro("Referencia", Vta.Cliente.ReferenciaFiscal)) + ' params.Add(New CrystalParametro("ClienteContacto", Vta.AtencionA)) + ' End If + + ' 'DIRECCION ENVIO + ' If Vta.EnviarA.CveDireccionEnvio > 0 Then + ' Dim StrEnvioDi As New StringBuilder + ' StrEnvioDi.AppendFormat("{0}", Vta.EnviarA.EnvioDireccion) + ' If Vta.EnviarA.EnvioNoExt IsNot Nothing AndAlso Vta.EnviarA.EnvioNoExt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Ext: {0}", Vta.EnviarA.EnvioNoExt) + ' If Vta.EnviarA.EnvioNoInt IsNot Nothing AndAlso Vta.EnviarA.EnvioNoInt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Int: {0}", Vta.EnviarA.EnvioNoInt) + + ' params.Add(New CrystalParametro("EnvioDireccion", StrEnvioDi.ToString)) + ' params.Add(New CrystalParametro("EnvioNoExt", Vta.EnviarA.EnvioNoExt)) + ' params.Add(New CrystalParametro("EnvioNoInt", Vta.EnviarA.EnvioNoInt)) + ' params.Add(New CrystalParametro("EnvioColonia", Vta.EnviarA.EnvioColonia)) + ' params.Add(New CrystalParametro("EnvioCiudad", Vta.EnviarA.EnvioCiudad)) + ' params.Add(New CrystalParametro("EnvioEstado", Vta.EnviarA.EnvioEstado)) + ' params.Add(New CrystalParametro("EnvioContacto", Vta.EnviarA.EnvioContacto)) + ' params.Add(New CrystalParametro("EnvioDepartamento", Vta.EnviarA.EnvioDepartamento)) + ' params.Add(New CrystalParametro("EnvioCP", Vta.EnviarA.EnvioCP)) + ' Else + ' If Vta.CveClienteSucursal.ToEntero > 0 Then + ' Dim StrEnvioDi As New StringBuilder + ' StrEnvioDi.AppendFormat("{0}", Vta.ClienteSucursal.Direccion) + ' If Vta.ClienteSucursal.NoExt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Ext: {0}", Vta.ClienteSucursal.NoExt) + ' If Vta.ClienteSucursal.NoInt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Int: {0}", Vta.ClienteSucursal.NoInt) + ' params.Add(New CrystalParametro("EnvioDireccion", StrEnvioDi.ToString)) + ' params.Add(New CrystalParametro("EnvioColonia", If(Vta.ClienteSucursal.Colonia.Length > 0, Vta.ClienteSucursal.Colonia, ""))) + ' params.Add(New CrystalParametro("EnvioCiudad", If(Vta.ClienteSucursal.Municipio.Length > 0, Vta.ClienteSucursal.Municipio, ""))) + ' params.Add(New CrystalParametro("EnvioEstado", If(Vta.ClienteSucursal.Estado.Length > 0, Vta.ClienteSucursal.Estado, ""))) + ' params.Add(New CrystalParametro("EnvioCP", If(Vta.ClienteSucursal.CP.Length > 0, Vta.ClienteSucursal.CP, ""))) + ' Else + ' Dim StrEnvioDi As New StringBuilder + ' StrEnvioDi.AppendFormat("{0}", If(Vta.Cliente.Direccion.Length > 0, Vta.Cliente.Direccion, "")) + ' If Vta.Cliente.NoExt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Ext: {0}", Vta.Cliente.NoExt) + ' If Vta.Cliente.NoInt.Length > 0 Then StrEnvioDi.AppendFormat(", No.Int: {0}", Vta.Cliente.NoInt) + ' params.Add(New CrystalParametro("EnvioDireccion", StrEnvioDi.ToString)) + ' params.Add(New CrystalParametro("EnvioColonia", If(Vta.Cliente.Colonia.Length > 0, Vta.Cliente.Colonia, ""))) + ' params.Add(New CrystalParametro("EnvioCiudad", If(Vta.Cliente.Localidad IsNot Nothing And Vta.Cliente.Localidad.Length > 0, Vta.Cliente.Localidad, ""))) + ' params.Add(New CrystalParametro("EnvioEstado", If(Vta.Cliente.Estado.Length > 0, Vta.Cliente.Estado, ""))) + ' params.Add(New CrystalParametro("EnvioCP", If(Vta.Cliente.CP.Length > 0, Vta.Cliente.CP, ""))) + ' End If + + ' End If + + ' 'CLIENTE SUCURSAL + ' If Vta.CveClienteSucursal.ToEntero > 0 Then + ' params.Add(New CrystalParametro("ClienteCalle", If(Vta.ClienteSucursal.Direccion.Length > 0, Vta.ClienteSucursal.Direccion, ""))) + ' params.Add(New CrystalParametro("ClienteColonia", If(Vta.ClienteSucursal.Colonia.Length > 0, Vta.ClienteSucursal.Colonia, ""))) + ' params.Add(New CrystalParametro("ClienteCiudad", If(Vta.ClienteSucursal.Localidad IsNot Nothing And Vta.ClienteSucursal.Localidad.Length > 0, Vta.ClienteSucursal.Localidad, ""))) + ' params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.ClienteSucursal.Municipio.Length > 0, Vta.ClienteSucursal.Municipio, ""))) + ' params.Add(New CrystalParametro("ClienteEstado", If(Vta.ClienteSucursal.Estado.Length > 0, Vta.ClienteSucursal.Estado, ""))) + ' params.Add(New CrystalParametro("ClienteCP", If(Vta.ClienteSucursal.CP.Length > 0, Vta.ClienteSucursal.CP, ""))) + ' params.Add(New CrystalParametro("ClienteNoInt", If(Vta.ClienteSucursal.NoInt.Length > 0, Vta.ClienteSucursal.NoInt, ""))) + ' params.Add(New CrystalParametro("ClienteNoExt", If(Vta.ClienteSucursal.NoExt.Length > 0, Vta.ClienteSucursal.NoExt, ""))) + ' params.Add(New CrystalParametro("ClientePais", If(Vta.ClienteSucursal.Pais.Length > 0, Vta.ClienteSucursal.Pais, ""))) + ' Else + ' params.Add(New CrystalParametro("ClienteCalle", If(Vta.Cliente.Direccion.Length > 0, Vta.Cliente.Direccion, ""))) + ' params.Add(New CrystalParametro("ClienteColonia", If(Vta.Cliente.Colonia.Length > 0, Vta.Cliente.Colonia, ""))) + ' params.Add(New CrystalParametro("ClienteCiudad", If(Vta.Cliente.Localidad IsNot Nothing And Vta.Cliente.Localidad.Length > 0, Vta.Cliente.Localidad, ""))) + ' params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.Cliente.Ciudad.Length > 0, Vta.Cliente.Ciudad, ""))) + ' params.Add(New CrystalParametro("ClienteEstado", If(Vta.Cliente.Estado.Length > 0, Vta.Cliente.Estado, ""))) + ' params.Add(New CrystalParametro("ClienteCP", If(Vta.Cliente.CP.Length > 0, Vta.Cliente.CP, ""))) + ' params.Add(New CrystalParametro("ClienteNoInt", If(Vta.Cliente.NoInt.Length > 0, Vta.Cliente.NoInt, ""))) + ' params.Add(New CrystalParametro("ClienteNoExt", If(Vta.Cliente.NoExt.Length > 0, Vta.Cliente.NoExt, ""))) + ' params.Add(New CrystalParametro("ClientePais", If(Vta.Cliente.Pais.Length > 0, Vta.Cliente.Pais, ""))) + ' End If + ' End If + + ' RutaFormato = String.Format("{0}Formatos\{1}.mrt", UsuarioActual.Empresa.Ruta, NombreArchivo) + + ' Case "Egs" + ' If UsuarioActual.CveEmpresa.Contiene(72, 80) Then + ' NombreArchivo = "NotaCredito" + ' Else + ' NombreArchivo = "Factura" + ' End If + ' NombreArchivoDescarga = "Nota de Crédito" + ' TipoDocumento = "EGRESO" + ' TipoDocumentoRef = String.Format(": Ref.:{0}", Vta.RefDocto) + ' AplicaPagare = "0" + + ' 'GENERAL + ' params.Add(New CrystalParametro("TipoDocumento", NombreArchivoDescarga)) + ' params.Add(New CrystalParametro("Tipo", TipoDocumento)) + ' params.Add(New CrystalParametro("Ref", TipoDocumentoRef)) + ' params.Add(New CrystalParametro("AplicaPagare", AplicaPagare)) + ' params.Add(New CrystalParametro("Fecha", String.Format("{0}T{1}", Vta.Fecha.ToString("yyyy-MM-dd"), Vta.Fecha.ToString("HH:mm:ss")))) + + ' 'ALAN YEPIZ + ' If UsuarioActual.CveEmpresa.Contiene(123) Then + ' params.Add(New CrystalParametro("DiaExpedicion", String.Format("{0}", Vta.Fecha.ToDate.Day))) + ' params.Add(New CrystalParametro("MesExpedicion", String.Format("{0}", Vta.Fecha.ToDate.Month))) + ' params.Add(New CrystalParametro("AñoExpedicion", String.Format("{0}", Vta.Fecha.ToDate.Year))) + ' End If + + ' 'COMPU, DN DIFUSA + ' If UsuarioActual.CveEmpresa.Contiene(72, 80, 119) Then + ' params.Add(New CrystalParametro("EstatusFactura", If(Vta.TipoEstatus = 5, Vta.EstatusFactura, ""))) + ' params.Add(New CrystalParametro("EstatusEntrega", If(Vta.Inv_CveEstatusEntrega = 1, Vta.Inv_EstatusEntrega, ""))) + ' params.Add(New CrystalParametro("PedidoContrato", Vta.PedidoContrato)) + + ' params.Add(New CrystalParametro("MonedaAbreviatura", If(Vta.MonedaAbreviatura.ToString IsNot Nothing, Vta.MonedaAbreviatura.ToString, ""))) + ' params.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) + ' params.Add(New CrystalParametro("FechaImpresion", Now.ToDateTime.ToString)) + ' params.Add(New CrystalParametro("Sucursal", Vta.SubProyecto.SubProyecto)) + + ' 'CLIENTE SUCURSAL + ' If Vta.CveClienteSucursal.ToEntero > 0 Then + ' params.Add(New CrystalParametro("ClienteCalle", If(Vta.ClienteSucursal.Direccion.Length > 0, Vta.ClienteSucursal.Direccion, ""))) + ' params.Add(New CrystalParametro("ClienteColonia", If(Vta.ClienteSucursal.Colonia.Length > 0, Vta.ClienteSucursal.Colonia, ""))) + ' params.Add(New CrystalParametro("ClienteCiudad", If(Vta.ClienteSucursal.Localidad IsNot Nothing And Vta.ClienteSucursal.Localidad.Length > 0, Vta.ClienteSucursal.Localidad, ""))) + ' params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.ClienteSucursal.Municipio.Length > 0, Vta.ClienteSucursal.Municipio, ""))) + ' params.Add(New CrystalParametro("ClienteEstado", If(Vta.ClienteSucursal.Estado.Length > 0, Vta.ClienteSucursal.Estado, ""))) + ' params.Add(New CrystalParametro("ClienteCP", If(Vta.ClienteSucursal.CP.Length > 0, Vta.ClienteSucursal.CP, ""))) + ' params.Add(New CrystalParametro("ClienteNoInt", If(Vta.ClienteSucursal.NoInt.Length > 0, Vta.ClienteSucursal.NoInt, ""))) + ' params.Add(New CrystalParametro("ClienteNoExt", If(Vta.ClienteSucursal.NoExt.Length > 0, Vta.ClienteSucursal.NoExt, ""))) + ' params.Add(New CrystalParametro("ClientePais", If(Vta.ClienteSucursal.Pais.Length > 0, Vta.ClienteSucursal.Pais, ""))) + ' Else + ' params.Add(New CrystalParametro("ClienteCalle", If(Vta.Cliente.Direccion.Length > 0, Vta.Cliente.Direccion, ""))) + ' params.Add(New CrystalParametro("ClienteColonia", If(Vta.Cliente.Colonia.Length > 0, Vta.Cliente.Colonia, ""))) + ' params.Add(New CrystalParametro("ClienteCiudad", If(Vta.Cliente.Localidad IsNot Nothing And Vta.Cliente.Localidad.Length > 0, Vta.Cliente.Localidad, ""))) + ' params.Add(New CrystalParametro("ClienteMunicipio", If(Vta.Cliente.Ciudad.Length > 0, Vta.Cliente.Ciudad, ""))) + ' params.Add(New CrystalParametro("ClienteEstado", If(Vta.Cliente.Estado.Length > 0, Vta.Cliente.Estado, ""))) + ' params.Add(New CrystalParametro("ClienteCP", If(Vta.Cliente.CP.Length > 0, Vta.Cliente.CP, ""))) + ' params.Add(New CrystalParametro("ClienteNoInt", If(Vta.Cliente.NoInt.Length > 0, Vta.Cliente.NoInt, ""))) + ' params.Add(New CrystalParametro("ClienteNoExt", If(Vta.Cliente.NoExt.Length > 0, Vta.Cliente.NoExt, ""))) + ' params.Add(New CrystalParametro("ClientePais", If(Vta.Cliente.Pais.Length > 0, Vta.Cliente.Pais, ""))) + ' End If + ' End If + + + ' RutaFormato = String.Format("{0}Formatos\{1}.mrt", UsuarioActual.Empresa.Ruta, "Factura") + ' Case Else + ' NombreArchivo = "" + ' TipoDocumento = "" + ' End Select + ' If NombreArchivo = "" Then + ' GuardaLog("No se especifico el tipo de Impresion de venta (Venta, Remision, Cotización, Nota de Crédito).") + ' Exit Sub + ' End If + ' 'TERMINA REGION PARAMETROS + + ' Dim lrds As New List(Of ReportDataSource) + ' 'Si es ECLIPSE CREAR COLUMAS PARA FIRMAS EN DtDetalle. + ' If UsuarioActual.CveEmpresa.Contiene(1, 15, 17, 71, 76, 125) Then + ' Dim DtDetalleFirmas As New DataTable + ' DtDetalleFirmas.TableName = "DetalleFirma" + ' DtDetalleFirmas = Vta.DtDetalle.Copy() + + ' 'SI NO TIENE LAS COLUMNAS DE FIRMAS LAS CREA. + ' If Not DtDetalleFirmas.Columns.Contains("Titulo") Then + ' DtDetalleFirmas.Columns.Add("Titulo", GetType(String)) + ' DtDetalleFirmas.Columns.Add("Nombre", GetType(String)) + ' DtDetalleFirmas.Columns.Add("Puesto", GetType(String)) + ' DtDetalleFirmas.Columns.Add("Lado", GetType(Integer)) + ' End If + + ' 'Se llenan los Rows de las columnas con los datos del DtFirmas + ' For i As Integer = 0 To Vta.DtFirmas.Rows.Count - 1 + ' 'Si DtDetalle es menor al DtFirmas, crea un nuevo Row en DtDetalle y le asigna valor, Si no solo asigna valor + ' If DtDetalleFirmas.Rows.Count < i + 1 Then + ' Dim Dr = DtDetalleFirmas.NewRow + ' Dr("Titulo") = Vta.DtFirmas(i)("Titulo").ToString + ' Dr("Nombre") = Vta.DtFirmas(i)("Nombre").ToString + ' Dr("Puesto") = Vta.DtFirmas(i)("Puesto").ToString + ' Dr("Lado") = Vta.DtFirmas(i)("Lado").ToString.ToEntero + ' DtDetalleFirmas.Rows.Add(Dr) + ' Else + ' DtDetalleFirmas(i)("Titulo") = Vta.DtFirmas(i)("Titulo").ToString + ' DtDetalleFirmas(i)("Nombre") = Vta.DtFirmas(i)("Nombre").ToString + ' DtDetalleFirmas(i)("Puesto") = Vta.DtFirmas(i)("Puesto").ToString + ' DtDetalleFirmas(i)("Lado") = Vta.DtFirmas(i)("Lado").ToString.ToEntero + ' End If + ' Next i + + ' Dim rds As New ReportDataSource With {.Name = "DsOC", .Value = DtDetalleFirmas} + ' lrds.Add(rds) + ' Else + ' Dim rds As New ReportDataSource With {.Name = "DsOC", .Value = Vta.DtDetalle} + ' lrds.Add(rds) + ' End If + + ' Dim rds1 As New ReportDataSource With {.Name = "DataSet1", .Value = If(Vta.DtDeduccion IsNot Nothing, Vta.DtDeduccion, New DataTable)} ' sino esta creado el objeto, lo creamos, para que no truene el reporte + ' lrds.Add(rds1) + + ' 'DETALLE FIRMAS + + ' Dim rds2 As New ReportDataSource With {.Name = "DataSet2", .Value = If(Vta.DtFirmas IsNot Nothing, Vta.DtFirmas, New DataTable)} ' sino esta creado el objeto, lo creamos, para que no truene el reporte + ' lrds.Add(rds2) + + ' Dim Archivo As New System.IO.FileInfo(RutaFormato) + + ' Dim DataSet As New DataSet + ' Vta.DtDetalle.TableName = "Datos" + ' Vta.DtDeduccion.TableName = "Deduccion" + ' DataSet.Tables.Add(Vta.DtDetalle.Copy) + ' DataSet.Tables.Add(Vta.DtDeduccion.Copy) + + ' If Archivo.Exists Then + ' ImprimirbytesPDF(ImprimirPDFPyME(RutaFormato, DataSet, params, NombreArchivo, "PDF", MR:=Nothing), "Factura") + ' If Guardar Then + ' Dim ArchivoPDF As New System.IO.FileInfo(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio)) + ' If Not ArchivoPDF.Exists Then + ' Try + ' DirectoryExistsCreate(String.Format("{0}PDF", UsuarioActual.Empresa.Ruta)) + ' DirectoryExistsCreate(String.Format("{0}PDF\{1}", UsuarioActual.Empresa.Ruta, Vta.TipoDocto)) + ' File.WriteAllBytes(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio), retorno) + ' Catch ex As Exception + ' Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia) + ' End Try + ' Else + ' Try + ' ArchivoPDF.Delete() + ' File.WriteAllBytes(String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, Vta.TipoDocto, Vta.SerieFolio), retorno) + ' Catch ex As Exception + ' Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia) + ' End Try + ' End If + ' End If + + ' Else + ' params.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) + ' params.Add(New CrystalParametro("RFC", UsuarioActual.Empresa.RFC)) + ' ImprimirbytesPDF(ImprimirPDFPyME(RutaFormato, DataSet, params, NombreArchivo, "PDF", MR:=Nothing), "Factura") + ' End If + + + ' Catch ex As Exception + ' GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + ' End Try + 'End Sub Public Function PdfFactura(ByRef Vta As Modelos.Factura, Optional AplicaPagare As String = "0", Optional Guardar As Boolean = True, Optional SubReportData As Modelos.MSubReportData = Nothing) As Byte() Dim retorno As Byte() = Nothing @@ -8834,12 +8834,10 @@ Public Class ClsPaginas End If End Function - Public Sub PDFReciboDePagos(CveVenta As Integer, CveIE As Integer, CveComplementoPago As Integer, Optional imprimir As Boolean = True) - Dim ObjBancos As New ClsBancos - Dim ObjClientes As New ClsClientes - Dim params As New List(Of ReportParameter) - Dim SerieFolio As String + Public Sub PDFReciboDePagos(CveVenta As Integer, CveIE As Integer, CveComplementoPago As Integer, Optional imprimir As Boolean = True, Optional SobreescribirPDF As Boolean = False) + Dim params As New List(Of ReportParameter) + Dim SerieFolio As String = "" Dim Serie = "" Dim Folio = "" Dim CveCliente = -1 @@ -8887,16 +8885,38 @@ Public Class ClsPaginas DTConceptosPagoRelacionado.Columns.Add("TipoCambioDR", GetType(String)) DTConceptosPagoRelacionado.Columns.Add("ObjetoImpDR", GetType(String)) - + Dim ObjBancos As New ClsBancos If ObjBancos.GetComplementoPagos(CveComplementoPago, CveIE, CveVenta, UsuarioActual.CveEmpresa) Then Serie = ObjBancos.DtResultados.FiltroPrimeroValor("Serie") Folio = ObjBancos.DtResultados.FiltroPrimeroValor("Folio") CveCliente = ObjBancos.DtResultados.FiltroPrimeroValor("CveCliente").ToEntero CveMoneda = ObjBancos.DtResultados.FiltroPrimeroValor("CveMoneda").ToEntero FechaComprobante = ObjBancos.DtResultados.FiltroPrimeroValor("Fecha").ToDate + SerieFolio = $"{Serie}-{Folio}" + End If + ObjBancos.Dispose() + + If Not SobreescribirPDF Then + Dim rutapdf As String = $"{UsuarioActual.Empresa.Ruta}\PDF\Pag\{SerieFolio}.pdf" + Dim Archivo As New System.IO.FileInfo(rutapdf) + If (Archivo.Exists) Then + + HttpContext.Current.Response.Clear() + HttpContext.Current.Response.ClearContent() + HttpContext.Current.Response.ContentType = If(IO.Path.GetExtension(Archivo.Name) = ".txt", "text/plain", "application/pdf") + HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment; filename=" & Archivo.Name) + HttpContext.Current.Response.AddHeader("Content-Length", Archivo.Length.ToString()) + HttpContext.Current.Response.TransmitFile(rutapdf) + 'HttpContext.Current.Response.Flush() + HttpContext.Current.Response.End() + Archivo = Nothing + + End If + End If 'CLIENTE + Dim ObjClientes As New ClsClientes If ObjClientes.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, Estatus:=-1) Then RFCOrdenante = ObjClientes.RFC @@ -8909,6 +8929,8 @@ Public Class ClsPaginas params.Add(New ReportParameter("ClienteRFC", ObjClientes.RFC)) End If + ObjClientes.Dispose() + 'DATOS DE EMPRESA params.Add(New ReportParameter("Empresa", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("EmpresaDireccion", UsuarioActual.Empresa.Direccion)) @@ -8928,11 +8950,8 @@ Public Class ClsPaginas Dim Ruta As String = UsuarioActual.Empresa.Ruta Dim PathXML As String = $"{Ruta}XML\Pag\{Serie}-{Folio}.xml" Dim PathPDF As String = $"{Ruta}PDF\Pag\{Serie}-{Folio}.pdf" - SerieFolio = $"{Serie}-{Folio}" - Dim ImagenCBB As String = $"file://{Ruta}CBB\{Serie}-{Folio}.jpg" - If File.Exists(PathXML) Then Dim XmlDoc As New System.Xml.XmlDocument XmlDoc.Load(PathXML) @@ -8961,7 +8980,7 @@ Public Class ClsPaginas 'Datos Fiscales If Not IsNothing(validaElemento) Then Dim nodetfd As XmlNode = XmlDoc.SelectSingleNode(String.Format("{0}:Comprobante/{0}:Complemento/tfd:TimbreFiscalDigital", Prefijo), namespaces) - If nodetfd Is Nothing Then + If nodetfd IsNot Nothing Then FolioFiscal = nodetfd.Attributes("UUID").InnerText NoSerieCertificado = nodetfd.Attributes("NoCertificadoSAT").InnerText FechaCertificacion = nodetfd.Attributes("FechaTimbrado").InnerText @@ -8970,11 +8989,13 @@ Public Class ClsPaginas End If End If - 'Pago10 - If Version = "3.3" AndAlso Not IsNothing(validaElemento) Then - Dim PagosChild = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes.Cast(Of XmlNode).Where(Function(a) a.LocalName.Equals("Pagos", StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault() + Dim nodePagos As XmlNodeList + nodePagos = XmlDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Complemento/pago20:Pagos/pago20:Pago", Prefijo), namespaces) - For Each Pagos As XmlNode In PagosChild.ChildNodes + For Each Pagos As XmlNode In nodePagos + If Version = "4.0" AndAlso Pagos.Name = "pago20:Totales" Then + Dim a As String = "a" + Else Dim Dr As DataRow = DTConceptosPago.NewRow If Not Pagos.Attributes("CtaOrdenante") Is Nothing Then Dr("CtaOrdenante") = Pagos.Attributes("CtaOrdenante").Value Else Dr("CtaOrdenante") = "" @@ -8997,7 +9018,7 @@ Public Class ClsPaginas DTConceptosPago.Rows.Add(Dr) - For Each Relacionado As XmlNode In Pagos.ChildNodes + For Each Relacionado As XmlNode In Pagos.SelectNodes(String.Format("//{0}:DoctoRelacionado", PagoVersion), namespaces) Dim DrRelacionado As DataRow = DTConceptosPagoRelacionado.NewRow If Not Relacionado.Attributes("Folio") Is Nothing Then DrRelacionado("Folio") = Relacionado.Attributes("Folio").Value Else DrRelacionado("Folio") = "" @@ -9008,69 +9029,15 @@ Public Class ClsPaginas DrRelacionado("ImpPagado") = Relacionado.Attributes("ImpPagado").Value DrRelacionado("ImpSaldoAnt") = Relacionado.Attributes("ImpSaldoAnt").Value DrRelacionado("NumParcialidad") = Relacionado.Attributes("NumParcialidad").Value - DrRelacionado("MetodoDePagoDR") = Relacionado.Attributes("MetodoDePagoDR").Value - DrRelacionado("MonedaDR") = Relacionado.Attributes("MonedaDR").Value + If Version = "3.3" Then DrRelacionado("MetodoDePagoDR") = Relacionado.Attributes("MetodoDePagoDR").Value + If Version = "4.0" Then DrRelacionado("ObjetoImpDR") = Relacionado.Attributes("ObjetoImpDR").Value + DrRelacionado("MonedaDR") = Relacionado.Attributes("MonedaDR").Value DTConceptosPagoRelacionado.Rows.Add(DrRelacionado) Next - Next - End If - - 'Pago20 - If Version = "4.0" Then - Dim nodePagos As XmlNodeList - nodePagos = XmlDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Complemento/pago20:Pagos/pago20:Pago", Prefijo), namespaces) - - For Each Pagos As XmlNode In nodePagos - If Version = "4.0" AndAlso Pagos.Name = "pago20:Totales" Then - Dim a As String = "a" - Else - Dim Dr As DataRow = DTConceptosPago.NewRow - - If Not Pagos.Attributes("CtaOrdenante") Is Nothing Then Dr("CtaOrdenante") = Pagos.Attributes("CtaOrdenante").Value Else Dr("CtaOrdenante") = "" - If Not Pagos.Attributes("TipoCambioP") Is Nothing Then Dr("TipoCambioP") = Pagos.Attributes("TipoCambioP").Value Else Dr("TipoCambioP") = "" - - If Not Pagos.Attributes("RfcEmisorCtaOrd") Is Nothing Then - Dr("RfcEmisorCtaOrd") = Pagos.Attributes("RfcEmisorCtaOrd").Value - RFCOrdenante = Pagos.Attributes("RfcEmisorCtaOrd").Value - Else - Dr("RfcEmisorCtaOrd") = "" - End If - - Dr("Monto") = Pagos.Attributes("Monto").Value - Dr("MonedaP") = Pagos.Attributes("MonedaP").Value - Dr("FormaDePagoP") = GlobalDTVtaFormaPago.FiltroPrimeroValor("FormaPagoSAT", $"ClaveFormaPagoSAT= '{Pagos.Attributes("FormaDePagoP").Value}'") - Dr("FechaPago") = Pagos.Attributes("FechaPago").Value - - FechaRecibo = Pagos.Attributes("FechaPago").Value - TotalLetra = Pagos.Attributes("Monto").Value.ToString.ToDouble.Texto2Letras(CveMoneda) - - DTConceptosPago.Rows.Add(Dr) - - For Each Relacionado As XmlNode In Pagos.SelectNodes(String.Format("//{0}:DoctoRelacionado", PagoVersion), namespaces) - Dim DrRelacionado As DataRow = DTConceptosPagoRelacionado.NewRow - - If Not Relacionado.Attributes("Folio") Is Nothing Then DrRelacionado("Folio") = Relacionado.Attributes("Folio").Value Else DrRelacionado("Folio") = "" - If Not Relacionado.Attributes("Serie") Is Nothing Then DrRelacionado("Serie") = Relacionado.Attributes("Serie").Value Else DrRelacionado("Serie") = "" - If Not Relacionado.Attributes("TipoCambioDR") Is Nothing Then DrRelacionado("TipoCambioDR") = Relacionado.Attributes("TipoCambioDR").Value Else DrRelacionado("TipoCambioDR") = "" - - DrRelacionado("IdDocumento") = Relacionado.Attributes("IdDocumento").Value - DrRelacionado("ImpPagado") = Relacionado.Attributes("ImpPagado").Value - DrRelacionado("ImpSaldoAnt") = Relacionado.Attributes("ImpSaldoAnt").Value - DrRelacionado("NumParcialidad") = Relacionado.Attributes("NumParcialidad").Value - ' If Version = "3.3" Then DrRelacionado("MetodoDePagoDR") = Relacionado.Attributes("MetodoDePagoDR").Value - If Version = "4.0" Then DrRelacionado("ObjetoImpDR") = Relacionado.Attributes("ObjetoImpDR").Value - - DrRelacionado("MonedaDR") = Relacionado.Attributes("MonedaDR").Value - - DTConceptosPagoRelacionado.Rows.Add(DrRelacionado) - Next - - End If - Next - - End If + End If + Next If Not IsNothing(validaElementoPago) Then @@ -9090,7 +9057,6 @@ Public Class ClsPaginas Dim CadenaOriginal As String = $"||1.0| {FolioFiscal} | {FechaCertificacion.ToDate.ToShortDateString} T {FechaCertificacion.ToDateTime.ToShortTimeString} | {SelloCFDi} | {NoSerieCertificado} ||" ' PARAMETROS DEL REPORTE - params.Add(New ReportParameter("SerieFolio", SerieFolio)) params.Add(New ReportParameter("RFCOrdenante", RFCOrdenante)) params.Add(New ReportParameter("FechaRecibo", FechaRecibo)) @@ -9119,7 +9085,6 @@ Public Class ClsPaginas lrds.Add(rds2) Dim rutaArchivo As String = "" - 'LOGO Dim LogoRuta As String = "" Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) @@ -9156,9 +9121,6 @@ Public Class ClsPaginas End If - ObjBancos.Dispose() - ObjClientes.Dispose() - End Sub #End Region From df3a27a1ac7e32b8b09f0e34cd5a38951f403e82 Mon Sep 17 00:00:00 2001 From: rrene Date: Sun, 5 Jun 2022 17:29:42 -0700 Subject: [PATCH 2/4] =?UTF-8?q?--=20si=20la=20aplicaci=C3=B3n=20de=20NC,?= =?UTF-8?q?=20tiene=20impuestos,q=20ue=20no=20simplifique=20la=20prep?= =?UTF-8?q?=C3=B3liza?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/Ventas.aspx.vb | 50 ++++++++++++------------------------------- 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 57beb0ade..f111ce803 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -15339,11 +15339,11 @@ Partial Class Ventas Dim ObjCliente As New ClsClientes(ObjConta.IniciaTransacSQL()) Dim ObjContpaq As ClsContPAQi = Nothing - Dim CvePrepoliza As Integer + Dim CvePrePoliza As Integer Dim ErrorConta As Boolean Dim CveIEAnticipo As Integer Dim CvePlantillaPoliza As Integer = 10 - Dim PorcentajeAmortizacion As Decimal = 0 + Dim PorcentajeAmortizacion As Decimal Dim sumaAmorticaciones As Decimal = 0 Dim alertaContabilizacion As String = "Se enviaron correctamente las siguientes pólizas:

" Dim CveCuentaContabilizacion As Integer = 1 @@ -15351,17 +15351,7 @@ Partial Class Ventas Dim ContaIdPoliza As Integer = 0 Dim ConceptoAmortizacion As Integer = 0 Dim UsaComplementariaClientes As Boolean = True - 'If UsuarioActual.CveEmpresa.Contiene(1, 119) Then UsaComplementariaClientes = True - 'Dim FechaMaxima As Date = MinFecha - - - 'For Each gvr As GridViewRow In GVAnticipos.Rows - ' If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked Then - ' If gvr.FCLiteral("LtlFecha").Text.ToDate > FechaMaxima Then - ' FechaMaxima = gvr.FCLiteral("LtlFecha").Text.ToDate - ' End If - ' End If - 'Next + Dim SimplificaPrePoliza As Boolean = True ''[IPP] PARCHE TEMPORAL PARA ANTICIPOS DE JAM 'If FechaMaxima < "01/01/2018".ToDate And UsuarioActual.CveEmpresa = 119 Then @@ -15385,7 +15375,6 @@ Partial Class Ventas Dim IdCtaIVAXTrasladar As Integer = 0 Dim IdCtaIVATrasladado As Integer = 0 - Dim CveSubProyectoVenta As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim Importe91 As Decimal = 0 @@ -15413,19 +15402,7 @@ Partial Class Ventas End If End If - 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - ' If ObjIE.DtResultados.Rows.Count > 0 Then - ' Dim tFecha As Date = Now 'gvr.DataKey("Fecha").ToDate - ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") - ' If drr IsNot Nothing Then - ' FechaUltimaFluctuacion = drr("Fecha").ToString().ToDate - ' TipoCambioFluctuacion = drr("TipoCambio").ToString().ToDecimal - ' End If - - ' End If - 'End If If DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then 'SI LA VENTA VIENE EN PESOS Y SE VA A PAGAR EN PESOS tipoCambioPago = 1 @@ -15481,8 +15458,8 @@ Partial Class Ventas importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMX = importeMovimiento End If - importeMovimiento = Math.Round(importeMovimiento, 2) - importeMX = Math.Round(importeMX, 2) + importeMovimiento = importeMovimiento.RoundSQL + importeMX = importeMX.RoundSQL TipoCambioGeneral = tipoCambioVentaValuacion If CveMonedaVenta = 1 Then @@ -15549,26 +15526,26 @@ Partial Class Ventas importeMovimiento = 0 Case 91 'Amortizacion Nota de Credito Dim TC As Decimal = 1 - If gvr.DataKey("CveConceptoContable").ToString().ToEntero() = 12 Then - If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToString().ToDecimal = 1 Then + If gvr.DataKey("CveConceptoContable").ToEntero() = 12 Then + If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 1 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMX = importeMovimiento TC = gvr.DataKey("TipoCambio").ToString().ToDecimal - ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToString().ToDecimal = 2 Then + ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 2 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMX = importeMovimiento * gvr.DataKey("TipoCambio").ToString().ToDecimal TC = gvr.DataKey("TipoCambio").ToString().ToDecimal - ElseIf CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToString().ToDecimal = 2 Then + ElseIf CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 2 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal importeMX = importeMovimiento * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal TC = TipoCambioFluctuacion - ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToString().ToDecimal = 1 Then + ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 1 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal importeMX = importeMovimiento TC = gvr.DataKey("TipoCambio").ToString().ToDecimal End If - importeMovimiento = Math.Round(importeMovimiento, 2) - importeMX = Math.Round(importeMX, 2) + importeMovimiento = importeMovimiento.RoundSQL + importeMX = importeMX.RoundSQL If ObjConta.GetRetCuenta(ConceptoContable, CveCliente) Then If ObjConta.DtResultados.Rows.Count > 0 Then @@ -15845,6 +15822,7 @@ Partial Class Ventas Case 39 ' IEPS Trasladado If gvr.DataKey("RegresarImpuesto") = "1" Then + SimplificaPrePoliza = False CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.DataKey("DevolucionImportePagado").ToDecimal PorcentajeImpuesto = 0 @@ -15888,7 +15866,7 @@ Partial Class Ventas ErrorConta = True End If - If Not ErrorConta AndAlso Not ObjConta.PrePolizaSimplificacion(CvePrepoliza, UsuarioActual.CveEmpresa) Then + If Not ErrorConta AndAlso SimplificaPrePoliza AndAlso Not ObjConta.PrePolizaSimplificacion(CvePrepoliza, UsuarioActual.CveEmpresa) Then Alert("No se pudo simplificar los movimientos", TipoMensaje.MsgError) End If From c5035541ed76a5b92d89a822888cf2ac576b2b40 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 6 Jun 2022 12:53:34 -0700 Subject: [PATCH 3/4] -- filtrado de usocfdi --- Ventas/Clientes.aspx | 6 ++---- Ventas/Clientes.aspx.vb | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Ventas/Clientes.aspx b/Ventas/Clientes.aspx index 5dd385ff2..c4494c952 100644 --- a/Ventas/Clientes.aspx +++ b/Ventas/Clientes.aspx @@ -508,10 +508,7 @@ - - - - +
@@ -533,6 +530,7 @@
+
diff --git a/Ventas/Clientes.aspx.vb b/Ventas/Clientes.aspx.vb index b8584eae2..92dc91c89 100644 --- a/Ventas/Clientes.aspx.vb +++ b/Ventas/Clientes.aspx.vb @@ -10231,11 +10231,12 @@ Partial Class Clientes DivRazonSocial2.Attributes.Add("class", "col-md-12") If RdTipoPersona.SelectedValue.ToEntero = 1 And UsuarioActual.Empresa.Funcionalidad(350).Contiene("1", "2") Then - DivRazonSocial2.Attributes.Add("class", "col-md-8") DVRegimenSociedad.Visible = True End If + DdlRegimenFiscal.DataSource = GlobalDTRegimenesFiscales(RdTipoPersona.SelectedValue.ToEntero).FiltraParametros("", "CodigoRegimenFiscal") + DdlRegimenFiscal.DataBind() UpDatos.Update() End Sub From d8d4e7ce6724f77d2e892e411495b9e3efb8d9c4 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 6 Jun 2022 12:55:05 -0700 Subject: [PATCH 4/4] - mejoras en timbrado 4.0 --- App_Code/CFDITimbre.vb | 2 + App_Code/ClsPaginas.vb | 19 ++++- App_Code/Timbrado.vb | 163 +++++++++++++++++------------------------ Bin/GoCfdi.dll | Bin 551936 -> 552448 bytes 4 files changed, 85 insertions(+), 99 deletions(-) diff --git a/App_Code/CFDITimbre.vb b/App_Code/CFDITimbre.vb index e51b8636f..2ce881836 100644 --- a/App_Code/CFDITimbre.vb +++ b/App_Code/CFDITimbre.vb @@ -466,6 +466,8 @@ Public Class CFDIComplementoPagos tRetorno.TotalTrasladosImpuestoIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.Importe).Sum() tRetorno.TotalTrasladosImpuestoIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.Importe).Sum() + tRetorno.TotalRetencionesIEPS = (From c In Retenciones Where c.Impuesto = "003" Select c.Importe).Sum() + Return tRetorno End Get End Property diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 6ef8dab01..1297e28ae 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -730,7 +730,7 @@ Public Class ClsPaginas End Set End Property - Property GlobalDTRegimenesFiscales() As DataTable + Property GlobalDTRegimenesFiscales(Optional TipoPersona As Integer = -1) As DataTable Get Dim AppNombre As String = String.Format("GlobalDTRegimenesFiscales") 'sino existe, recarga los datos @@ -739,7 +739,18 @@ Public Class ClsPaginas If ObjGral.GetRegimenFiscal(-1) Then Application(AppNombre) = ObjGral.DtResultados ObjGral.Dispose() End If - GlobalDTRegimenesFiscales = DirectCast(Application(AppNombre), DataTable) + If TipoPersona <> -1 Then + Dim Str As New StringBuilder + If TipoPersona = 0 Then Str.Append("AplicaPersonaFisica = 1") '0 - Fisica + If TipoPersona = 1 Then Str.Append("AplicaPersonaMoral = 1") '1 - Moral + Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), Str.ToString(), "", DataViewRowState.CurrentRows) + GlobalDTRegimenesFiscales = Dv.ToTable + Dv.Dispose() + Else + GlobalDTRegimenesFiscales = DirectCast(Application(AppNombre), DataTable) + End If + + End Get Set(value As DataTable) Dim AppNombre As String = String.Format("GlobalDTRegimenesFiscales") @@ -8965,7 +8976,7 @@ Public Class ClsPaginas Dim validaElementoPago = XmlDoc.DocumentElement("cfdi:Conceptos") If Version = "3.3" Then cfdVer = "http://www.sat.gob.mx/cfd/3" - namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos10") + namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos") PagoVersion = "pago10" Else ' se considera que es la version 4.0 cfdVer = "http://www.sat.gob.mx/cfd/4" @@ -8990,7 +9001,7 @@ Public Class ClsPaginas End If Dim nodePagos As XmlNodeList - nodePagos = XmlDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Complemento/pago20:Pagos/pago20:Pago", Prefijo), namespaces) + nodePagos = XmlDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Complemento/{1}:Pagos/{1}:Pago", Prefijo, PagoVersion), namespaces) For Each Pagos As XmlNode In nodePagos If Version = "4.0" AndAlso Pagos.Name = "pago20:Totales" Then diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 1b4b48413..f9341507e 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -4113,40 +4113,44 @@ Public Class Timbrado Totales.TotalTrasladosBaseIVA16 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA16.RoundSQL Totales.TotalTrasladosBaseIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0 Totales.TotalTrasladosImpuestoIVA16 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA16.RoundSQL - Totales.TotalTrasladosImpuestoIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0 + Totales.TotalTrasladosImpuestoIVA16Specified = Totales.TotalTrasladosImpuestoIVA16 > 0 Totales.TotalTrasladosBaseIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8.RoundSQL Totales.TotalTrasladosBaseIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0 - Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8.RoundSQL - Totales.TotalTrasladosImpuestoIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0 + Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA8.RoundSQL + Totales.TotalTrasladosImpuestoIVA8Specified = Totales.TotalTrasladosImpuestoIVA8 > 0 Totales.TotalTrasladosBaseIVA0 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA0.RoundSQL Totales.TotalTrasladosBaseIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 Totales.TotalTrasladosImpuestoIVA0 = 0 - Totales.TotalTrasladosImpuestoIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 + Totales.TotalTrasladosImpuestoIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 ' si hay base > 0, debe de ponerse aunque sea en cero + If ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesIEPS > 0 Then + Totales.TotalRetencionesIEPS = ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesIEPS.RoundSQL + Totales.TotalRetencionesIEPSSpecified = True + Else + Totales.TotalRetencionesIEPSSpecified = False + End If - - Totales.TotalRetencionesIEPSSpecified = False ComPag.Totales = Totales - ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado(ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count - 1) {} - Dim i As Integer - For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados - ComPag.Pago(0).DoctoRelacionado(i) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado() - ComPag.Pago(0).DoctoRelacionado(i).IdDocumento = doc.IdDocumento - If Not String.IsNullOrEmpty(doc.Serie) Then - ComPag.Pago(0).DoctoRelacionado(i).Serie = doc.Serie - End If - ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio - ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR - ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.RoundSQL - ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.RoundSQL - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.RoundSQL - ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDR = doc.EquivalenciaDR - ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDRSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto + ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado(ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count - 1) {} + Dim i As Integer + For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados + ComPag.Pago(0).DoctoRelacionado(i) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionado() + ComPag.Pago(0).DoctoRelacionado(i).IdDocumento = doc.IdDocumento + If Not String.IsNullOrEmpty(doc.Serie) Then + ComPag.Pago(0).DoctoRelacionado(i).Serie = doc.Serie + End If + ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio + ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR + ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString + ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.RoundSQL + ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True + ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.RoundSQL + ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.RoundSQL + ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDR = doc.EquivalenciaDR.RoundSQL(6) + ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDRSpecified = True + ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto If doc.Impuestos IsNot Nothing Then ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDR @@ -4154,8 +4158,9 @@ Public Class Timbrado ''retenciones If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then Dim j As Integer = 0 + ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R").Count - 1) {} + For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R") - ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R").Count - 1) {} If docimp.TrasladooRetencion = "R" Then Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR Tra.BaseDR = docimp.Base.RoundSQL(6) @@ -4169,12 +4174,13 @@ Public Class Timbrado Next End If - ''traslados + ''traslados If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then Dim j As Integer = 0 + ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T").Count - 1) {} + For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T") - ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T").Count - 1) {} If docimp.TrasladooRetencion = "T" Then Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR Tra.BaseDR = docimp.Base.RoundSQL(6) @@ -4191,83 +4197,50 @@ Public Class Timbrado End If End If i += 1 - Next - - If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 Then - Dim x As Integer - If ComPag.Pago(0).ImpuestosP(0) Is Nothing Then ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} - ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Retenciones).Count - 1) {} - For Each Ret As CFDIRetenciones In ObjCFDITimbre.ComplementoPagos.Retenciones - ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() - ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto - ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe - x += 1 Next - End If - If ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then - Dim x As Integer + If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 OrElse ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP() - ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Traslados).Count - 1) {} - For Each Tra As CFDITraslados In (ObjCFDITimbre.ComplementoPagos.Traslados) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP() - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota.RoundSQL(6) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe.RoundSQL(6) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base.RoundSQL(6) - x += 1 - Next + + If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 Then + Dim x As Integer + ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Retenciones).Count - 1) {} + For Each Ret As CFDIRetenciones In ObjCFDITimbre.ComplementoPagos.Retenciones + ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() + ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto + ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe + x += 1 + Next + End If + + If ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then + Dim x As Integer + ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Traslados).Count - 1) {} + For Each Tra As CFDITraslados In (ObjCFDITimbre.ComplementoPagos.Traslados) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP() + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota.RoundSQL(6) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe.RoundSQL(6) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base.RoundSQL(6) + x += 1 + Next + End If End If - - - ''Estos impuestos aplicarían para anticipos - 'If ObjCFDITimbre.ComplementoPagos.tota > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then - ' ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} - ' ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP() - - ' If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then - ' Dim x As Integer - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T").Count - 1) {} - ' For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T") - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP() - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe - ' x += 1 - ' Next - ' End If - - ' If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then - ' Dim x As Integer - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R").Count - 1) {} - ' For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R") - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe - ' x += 1 - ' Next - ' End If - - - 'End If - - Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces() - nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20") - Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI40.Complementos.Pagos20.Pagos), nsComp) - Dim docComp As New XmlDocument() - docComp.LoadXml(xmlComp) - 'comprobante.PagosSpecified = True - LXmlComplementos.Add(docComp.DocumentElement) - TieneComplemento = True - End If + nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20") + Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI40.Complementos.Pagos20.Pagos), nsComp) + Dim docComp As New XmlDocument() + docComp.LoadXml(xmlComp) + 'comprobante.PagosSpecified = True + LXmlComplementos.Add(docComp.DocumentElement) + TieneComplemento = True + End If - End If + End If #End Region diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 8375b7d16f033cc02a05a42a7caf06629f53613f..7e2aee54eee6ecd5964a11d414171d09950b4937 100644 GIT binary patch delta 12941 zcmY-03s@CJ{|E4yy$*=7oSTP(DJmg~DF!P2!%K-u21G{6AyGu|78R)_-a4GblPRxx zK@XM^B`F%Fl_i#$7c?r%OIBK_lxSp_c`Ku`Hp(Z}hNGJc>xvcjpH|-H< z%jH{z^Q|VYT0*1g)K%}(9yEW|8QQJK_Jus+|0VH%5>ZKAyhIY6GNEQEAwdtTB)*?4 z_SN&3^w%#J-MbO2-a_irub}1-$l0kxLK?&%i zd*87dG~+)Yt-~&>m8N@^0gnXkvv#CKFM%R^N0Lr7eL1M`q0g+Hsj>oeAt%<_l}4=u zg~UXXD0&n1XV5WgFIrIw+3je9#Lx!RHGbOtXyO{kdMBk=@1?nGJ-}^=-&;q~{8vD6 z{92^b-s?b@2XD2Ep+W0GBNP9&WYBTtAR}{=WgIPh6;vMQu#TsR6`-wL6KVKspt!QZdjkDL7RlUWK>8y+d`VL8M0Y}B8iVS zqb5FPu`Q+%Z$j2_NSN(EG`$+MBWIIkB_&%yc;A%swJ{obm)^J26#Mp0H`fC~9^zx??ld^lAtdu6Qt1v_Tm!qY#`lumqxGou z5xu1MY4I+|-c5-lJLwjXd5B$f2Z(KZ)J=BL!>Ij_W=XqfqbV;N9*|_)MQ@w(_*ixS z6i(X*aBf$b*t9ol#W1m(L{$9{p>d|X?8+peS(ptRcwFB_OHl4HBCAC0N*3CUiszqx z7d-*;u8zBOlNV$cX3tVFqV2^8I1Mqz`G*M{t3sO9t6ZkD{goJYxHZmhFLT>OBV8Lo@b* zo}L;>KBg!3friAp$v$fA2VIwhGEl`@D&0q04nS7r(G0Sm+71E#B&qZOjYGvMskD}+ zqo&YQdXUaC&AImSa>o23h9RRQeUoMqTSS*LH&L zFy$jZPWIZqrn`^BmcyqkwVk2`Cxm=tTF=$C?`fkcFPYqPoyS)HuNHio7JqGS%9Jr# z(rH>^%FAqHC^=16V|IeK?lW{fX6GL@xHe*TWuQUM(ru`p2f9fE-H8$nxPg9*Y8qk? zPXnz(re{*}1HFP;+utBR(pxAWZ+hpb^bMTaoG76{Q(m?t%HXnMwlUUC8fh42J7Nv4 z2+UUU#(kdl#%vwG?azB?e+)Z5;3gO7APl=cU~rAVY&yT4exj+E74r7{6CI1$v-~qP z(FvHnz&}$Hor+mAzkhzF1(@AX4X!zuok?_)i`3)AuqDypT!P_YepCKJS7P=<2ZQSs z%%0$VLNncfnTOv$&9oY`EBCv}CAtGM%Ck%KBg}T?y2-EfAZCYh4X!Ue7=ALsO)k@K zFg!lO;5v(0$XGXNp+8|3G1lN}!K`_ZL9Wo>QT2n|E$a&tE{Fm0CSgJv8(xE5u`PV?-xBX7{)|=-|Dkd64ml98d7V|HLNeO2_ zFYyOwfRu0+v~p~nEl5gl09{BvW($#SpZlNA*j!S{PoVU~a!Yq9=x0#N@N!F(6!Qx{ z|J*?axl2lDhVU-l^7}|Jmq77+EYMeCEg*HsR!cuA;|gdd9}C1v%ddgNSYV)3a~&kc z0{2LzH$Y-6kRTQP1`?yIA(C>Fi$DK}7+xhxdv8G~hF57)+-;B;US&!*{{)HQ)dcCN zIZpHuF}!+8T1+VqeMAhe3Zxd>tf)SBs?#1`@-oB@zh)iQ(09X(&nzuU1Hv?I07QomZsn_8>9Z*&xMr0ExlQ zMyUnlA!4*sB~^!r5Jo#6NH?vpsTl2iB$e4fVzl$I)My8Z(N3)t(Ges@JD*AoC^6dk zTsq-|OpJDpNI@=;80?&o#)W}AVzhHgs_O(4qn+=i+B-mEv~yOp3O8F5WpQ>Abm1aeO=Bf_s?^1J5P^~BPZ_90IcQkN!<{efd zSM>$WPjpxV<@A1_-tD8U?d9FEposRd))4vn0MJ|H7n@VAP5|}e{bP4Ic@XFT|6(F! z+Yr#H2O>!yIesYU;1~}dBFnpxv&ZrwvRr&Wgo_@yWxH2iJ{4Uo4 zbL5goK(V8G+o#AukAk}J#`d^;7}Y+y&XzBijD_q?HO~IDe9{f7A_pku04wF8xgaqISSK5KATb9hm&s(1m;+SE*;7EzWe&Dh z%Dtz9I+GOZHn~0@RF;@+-6Jo467=@O!S*^i=4nt?N}cU%k6bVlczwu2_U~l&jF6Xn zHat%LQBFWL2E@tdd$C2EO zx>t%MSLDOXU@xUwB)KLhyaam*;N#;Pa^iBxh@MJ+lM6k_nJKCCzp`xwgz0=paZ|SO z>5I4)Ge$*{-{qU8e56{cv;868UIkn3(r!_r6qbT=Qg2aN$zBbrof1hjrFlK*c=t%c z6jmwZC1(b_YY9{`Dm}o%c`MX*N|_n@$jc8Mw*)Em8zGxFe1#gUByWP+48c<@YR-)WQiOE@sVti!o zg$-6u+e?%v5bpCHQyw2@B;PdMButN%DK)Su8Oxu4%ap1;aB5>?&e@kM%3hG0xAm1u z9ZF1HN|h#*n7XW1*gn`&OkLI}k)~j(=2tR69&;w+SF-oRrea#PR&myX#6;?4Wt=H5 zY2lNsmz5I-Mdl@sOzS1BQwk1&(nnsjuU9(Nf!^g=xl)4~F!HMXRVDlj$ZF`H_Scl; zFF~HJeA7)z6SDoZi}os|O0Kwfs%y!u5S`oI_e<5P9G}ys4wCTt{ten?Bn`w0{GFV(he#{p$3Y9CjvQi0lN znd~^IoJ4(One1^KQj9ZDG02|p_(VxUb>*s4iclS_GaR2PHK;qeK2usy&shr{pDR&k zVJ~aB4lCKHF1F_!Unpg$fm~lIM^Pg~iyfXL3TuFhS)50ep{ND6rH*4tA!-%Zab-J* zjLuu>_)2L&Z7~dTLTPSQnd56E{s*y7FFD#VIp|wuu_+%Jo>%TTsnnp#c)e2|rM8u2 zj_(xXN2s`sSFBgEP5Fp@O1a~-vK)1hS3IMvYgL)!tkQ(_204?1eo*4inIDOq?b*)u zqf&sn8GMVLSBhFy>1a|sCrx@usUtb4S&3?dir>(cj!Q}gDk+%H)s);;l{qde+f8{% zrad|6io&P0X6MxsTkW{23_{tB1(x5Gv{t?6xTRE^@{%L`cz-LmJs75HdmKa^d;xYd zEx696s%iho5vXoA$7u%xTo`TX1b6c>Zvb7ZJNzd*&= z{D4_%rYRrkW+VrVSEphY91$l^P!B`KUhLr}*=i$dZ4ZO11@(A$H<_riX7jY!yzT~< z4b?dIx+6#J&Bc%JV=ZI<;2Z#<+3ieHhvKGtCuT{L)C|WmaEQ3sX3J7 zs*6$UGP9&SwE|V0NlBhsjhe~pO;&4##QNv+e5aGuqZsB5&yuF7O{jw5luS{tqlWXf zj;U(UCHPE_^0khsYTNbCX{r;mC4A9sni_*z!zbU<)C80`!gMv=6kq=ohnTKrV<-;s zxLSx3hj{#7hsalpG3y)cCi&_*)ct(eov&7*1_rvx6Y5^neSD1ggnAftn=fZPsWyT< zOv^AhTQEG?%T1nA*{|>kn|tvYu4+SxQ!7w=qr|BdsPU-uURl!9Y8q;MFG`;N*J;mC z$6+Scl4hv0P#&?EG(#;yUg6bv|k>zlL+wQq)#{4d<#As35*-JWs7bbqw+toVCb(?c8L(T95j?ox#Q$Gc#5d|yxA@IEDE>*Yt)ns1yO`F0pwb}0$ zg_bMgd|}Hs)F}T}QJC7M@EtYRPg8i|k~W1Os}=r7Md6_~g@@I8|7KojNLT;a=PA{B z)&EzDlo&j?P3Z+S-T!bZuRpg<;Wc%+{|!<2ew#v~9rpju3q4oc6t>scHMq>n^44?= z(PBVm#}uL!VA~gHvQa+g9nMg#47HKVr5#0$wnaF@H1-?Ro6OZo z8w%nppwZ4dv=zVMV`yw}ytBJjh2hxXVa}eK^S`2^mlX2nSBy5*l#kp=9&+~6wxI?D zKjs{u)wU|nd9N0A6YAZ=>)odnn(~pDaRtu%wXLWuqrYvKw)-YNhO&&=&P2`l9V*82 z=hp}=+mw$ScyNJpr1m8XKK4?|FlnM@K0o}s9+vJ44m1O}TOQZK{Q;wSa~;v9uuvQ4 z&k}{tw<%ntmHFQmg?ri*uGCKW)kk>4zSXAiRn7Pl4!taIgL8ux4>B9}2CW1$(XcmY zl_=4$H)zc$(XcBu!!T)pn|!LxLX93^a227( zk8+dGv@+DxQ3h8fs-5g6pKH5O4%y(^;(y~&-trEah0t)n*6RJg^Fog#i_?a}A2p{b zA6u3e7kWV(3Nl;X1+5e_(ef^6)hN;OE@;!2t8BZpP5H033t_Y2jpGiZ6d`be$% zyS^MHy1(xF7XQQy-hy5>3!$;xrEmAYCknr5Q}};+vp>Mi3oY%$S-_Sf^(cQ9FZ86g zDNNUMO^LR)CNx7Y0hw(rLvO%Lw6zTVCQ7um41H)2en8&V+`u5(eiM|JF=?NyeMoz;${`pM^D+rY z`Z|z#NoMLTn2Ad=Q)j_&TyaTe>S-u(`_0m)qQoVcrO!v5vN6{)`VQ0;u4naT4|2CF z*fm>^Fkq)AxC-@gs3BH|YmQ!u%Ho=mhHJi_fcn%K;aZ^2LN#$c zr&pscyP{nly)neR{d~+47VRq1JBin~cyqj9z1!v0(^1rRx9fSm1U1ifk87b`i+Y)> zSicP-6Jv+E7U@Y=b1y_S7FkO4{8pv7R_P~AdC7Ku`@Nz^+3@zWPjS1}>De}@c#%J% zUeya)Rq1$LuQSDG`F!DIqwciBmZ9x(T$}U>sKVf5)~))iRz2x@S3haWOLp>x^no7b zfO@}9&T)OHKgGo#JU+6^IA-0a7h|}~c+&NW-ek&4e&rp^mwJ3hsMvX&+jT@QK#kxh zdR#ARRi)!={iG=`vG97Q^e89P3+Es3J3Sk9i`P4?7YK=ks>-nf{eBtDhzPwdu9XE915?gvn7{8={>1n2XM4mFo^|xM$`iifA=&Y_) zXC1*TK1|f}cu7ZoKqqV4qlL1?W(W^`7i%^JyMv-v1-8+T!)C~+5eVHK!;k!}*s zYEbt_8eFxgClcJGE2~EpCm3A+TaNHw94`$HzF=n12}HBo{(%#C58CYx@j0O|p2ho@ zio)@23Wu{<{->`e^ik*uZ#?=>fIqCtfc+`ph z_tK>-8xLyEBEvk_(RxM>ssHS^`g2JIW^ftGQL3J>d zj#`@`wtN<3e&b7-$J7evJ7Z$oEp7ci#A5nVwmRGcJGJnyd?{OxyXnTi@}+De>K5N= z3406G&TVk*L>1?_$$!|#sMR?JR~@Q`*IUMpqCU+qxK4r0Q+tVZ=!yeUv8whGb99B1 z5vyu1u`VdFs;aTmR9pG4Prr(d=9%c1 zn0UEq6?+Uf6)!iHvPmfMa#JaL93@_EDrK`!;^n5*Y(7f7+_ai4LWw1yHS9kqu>`b+ ztwD(;AU`V?5(|D}4amTFJ z_9*ejR5`Pw#0yj9tTRfyF!d^nM2Q!sUS)kz;)SUSHW1`t;*F^aHWWkg#?)&p2_@c` zdW}7d5^qes&fF;R#?+{ERoGbiI<`(*?g3EDe4VYjPi&#t=?cI zNb#oC8*DYmY^597X3X;WgkvLn8#RwlI5x5mP*J&K!Zxw}sJPs5T%Uu?y;QMFn2DEN ztJn?HIS+3bRqQWhzoaZ_Gt;`mn}#X02iQcLHCGUS!$BIz@tBd2D9bLAD%q zfvb)wJs>+j(PI0YRig%E%nUoq!lNL&@Zj9AuUJq|(BvMG;shOc22PaDA8Sg$391i?&>>s0u?*r`LORe)>Q$;c6Ww7_bk&GR-dcLO^IGG9?{V8591nr|pKu~=SXazO z@_Xc0))SR^KmRp~-3{WW&0iH{i6HWAtV&y$5(Afe!h;9wS6OmDka(@&59VnyxrVfV zusrN9*86S|t|2=H^4CEEa#0iHvxEjzqDFH`0gb4V%~fLzG2?197^)P%aQm3V|H(UVA5#>Y5#OQs*{JDv4SjucgtxNmn#vc93kv_I@_*V+ z=nEx-GSa0;cS%XcW4)QwGd#k)E@_!Uh_ay0 zLGr?f5aMl7{FIWBnY&iEX6|jxq&c6t>sN_06_U`|JN?g-Vh`w4#C*#|VqFcg4_|C) zA~jEfE+#x>X(KUDfgVkH&T@-1tpQ!}-fH=aRIUa2&NhfIO)dhxKm09=LF1kQX+8E^ zEHu`=4tUc0u%#!>dKMHG8AgI=Y%wT*%Ey-8v<20i8EpxnJ{utB7Zpar={eLNKBp`L zX~9N_bwn5>iq@ij=9fK~hHrvcWWr?2aGJ2$4cs07Kg&d#v;`Ey??o~-%0WMl+~q%w zwxK4(|K*=TM{k9gk-F1Aji$W_+8SfG%%tJlK)bjysPYnMDgEA(MeAM$O`LX%=F;Nr zM4Z2n7}_rXM`&CH1RJOQVtJId?GW;iiGJOzt7+V;5L+}Nj1Su7qLXa#AO{CQ{XCEBK5<5_Oht{B82puTBOLO)^?Cr^6 zWG`I@GEcFemVwyr`(0!|-Ge%E{|sqAtuy6e#{Rnan%5Yih=$=l^v>vBXbt2{=gEF$LpU~ouK_9y`@+mF)6tq=y=UP9d zc_)F}=Pa~-MnmgC#c7xPPtsh}n>{Z1pQ0_O)SN{6IgLLBIe#9!)Y?GHOcj!E=Xk7N z&~2w7Hg4`(>sgxIAXG@^4S3G_KU!zXL*@)9cU#Z>s|KH^IbWDrnKEsLbe`s!@-XW( zO3u?I7;E6Q`vUb~?DG8v*V7ogKFlB&X$k84VJ^~0x1dA?Zlv2$Eu#$LZlqPn8EM^a84oSG`NL8MP!_=$a`Hdpg|U`W0h4qFtnk{)MsXXoHJ=2_I<#uiTfZ zVamhG`D=gKO#?94^BxyzrXd&%xyRrdh_MIx>+~JH6Jz<)46flAdz^o!7CIJVPw~&x zLMLIYmA^mV(`1bOq8eN?Fm@r{MXpeHHU`_`4bJ%(Ji%YeAL!#4`=*D%<;K{-=9`mjIrxuT;wV(!x-hUtMny|?ay+NYxGr&eVAo%z4iA&KN{~MKhgsjJU!mv zI*JATrn^WR{RCs7(+#c$jJ1w1$aQ)ib#8=<{6sIKa-&b{KhdkGRnaycyMgK+SET+- z|NIjAKh`I1yY*+Pe+AEJhWBZ`o%*7ddD}=kb)bHUa*6$c_J57^UF&bO;+%PUvMs|Px)gpMw1z(zCIw#rJct?90Q5r)zeaw7f1}RiltC*kQiRAm)3LxiP6p$DZV>MjCQt5jvgQ}*x4a9 zfZRlkb}FS}KM{n{&H?G11+t3K&im4GD@crXK9K5cATiphl~_-Z80{RFYEfde^NF<2 z0WmS!IVrUTfW%;@K^h$ha*NTeQlX? z-hH6xiIKLsa$7R!HeT5tlK0#X>K;*N&6V?}gI-r-Y>&zZU7!k{bFtjQJ2UZCtmirN zP;qFcFQ%nptAUM%ON>;KIqMik+wS7`Y33|qERd(kuh2Y_Vf(O^aVP?sR^s3xp%0s4dU6bRAAV#=;l#5W3H}8(* zdem?!j9i!Ztb?2zwJ`Ft9Q-Vt!HbWNf04tB@hEyCy&qAB$+fKK-fBTQ-C zF61E>hQ96Zt;AKhfhV%ptKF346_EA$DX0B?l$sq7TQ+XJ>Z?TUgjgS+c{W2yKz$Ou zz-CigD;isvI{gU?v!PivIiBIxY;&BiFyNK_0lOzf>N{_bU(kCL}k&Qzg20Qssz0$ zfb*|EgIyw22C0Chr0AfwiM{Nrf_8yn$ z|9+YLlx3N+T###YR=w>>MLB57oXHd^8$sr*u1KjuiCJBdQi~E(wIbylN=(j*ly=le z^}MY}@p-@NF?*SE7xGht@vN~XVS2PqDTl0NI`9A1DMg3i(xyjUvK1>WAAnrEu5VDP zYCvM@vQasK5>uDwlvb3Ox@=Os4~v{IRV!8EKyGs;Q>w%tfy0Pt)n=vRC`e4Co>xZK zLcumZ$$DPdcMNpjyn#}=lKdekdBPRj3kss7_)3($&r-R-X_jbDPkooBaKDfwT4#0+S+asnkk z7-HX}#GHlLp{U#K)k+&`YgUZ?9VO{&h>da2jpK#-Vo}HVeR@wxLVX%*aFwC5(@*OMl|3kTx{VxEYEiP&ooIhw=|DQ2 ziS|QE%sDvWiGXDL2TCrgnX5*rKpk|Z+7Bz|Pz_v16zh2?S7lANA5|uy4s+Ei1*jeV zbL_{IgQ)lY=eX@3D(y%gTdw^hCGr9sCWNa_$wKw8EU+I}%2EBeK2{n~D=qo(#Ywf3$G*k)KX=Njb zOwHb4|6Hj>y=EAsL8%F2*Hj@Hm%Y_~Mkz;?@p5O~N@XX@ z>|ZPGSa3HlcutA`*1Q;Eo4eJ1URi{?!V6wdR&}b(eo;AL%0ostCi#4$1YLr17YB5+ zeyb#-Zu;J$mzAteRoGh;_d$~$ve7=tr&aN3f`VVt4fd-_94f(=&()NKPL^~_Xm+`WV75+Drm`=T8zoitL@{p7Ke19p8ZVV=BhwMb{(+maY z`PNxgHRd1Lz15ATJY+LJp`kWmY;E_`c0V=tJ1Do#x6&4%rgiF~Jw!cW%0tfaas$<% z7RY&5XsbO!O>S`mkMLVFNX^3F5#I{?VD+FWeoOh44pDu+hn!>5Puqv8>8J%prER2I z(5Z{|@oKv%-sSK|I7N-W0_DCOP-Rb2J*X?bEBuqyjeP!Xw)t0l-?68tZD!Cz7V{I% zP)Gg%1^XD2d}gYXOnHcJXpB5d-2*Z9-~KL=uGXP8_cyp2P!IKWkqosJwXCnfbraPz zz1^Ov8m-X(v9{^Ib2>SBLt{2Ov(-=#tI3!l%~s=3^%<1RRufP+c`Qp!N2!^VWU0BR z^3)kpwpxIyN~I)QEk-Tm<>siBLSp^%34YKyYBdJ4$IX!DswYr+<0zS{ohRwGQMnT=gbOTw0!LT!YUfE-g86E0yPEY7K=#>)GXw69$cs{M^V1ivQS-v5{qYx)NLrSc(zEbLWz~F$JAPsSlN0^ ztw)K4t;f|Clvvn$Ty00KagTJ7#j4Mb@R`a-^0|xZKpA{BCtr<1_2nx)`Dz?Wp6nt^ z)MS*656hOQ>8Q>89xhe$QM>p(T&fnJeE6#IGPNAl)5mRaRw55~bCKn04eFC_2GC>LWw8pQP-7zdapFjccq!Qn!l;Nd#+VCmWE8?i3hqQmZ|lnkBP(^ zT@qhWeM*mu#5=Ex3x(ousR^aMCiBGkT@pV~3rZgqiLZ4@JfYT<9^;8dbC<-kYRC0b zXQCAE+vlf$4%)27mOh-w%g^kR__MmG^sq>LzDpv}_LSPDNaNgJc1i56wVEnq>#{fX z^waptTxY}Nr{#c{81wjPt59Oh zAT9KUc@(|^8sX@rJ$3`Tq3OP{j=owE2B-UubqvrtOnFE?@4uq7NxwqDeq@ScuvUT^ z>id9Ws8-pjY{ziT=cdT%A$Rd|cWY^;3Q1I2o@0!*9yP-lVjZh(yNTV<3}dk)UTepK zvAq8puf_icCp>!Z3daPk5H-lCvrf{={*nDZ+D%g)@&oU_rfUhepxhgwg^m<0A9b3K zBwSiSr^@W9T0Ix<26>0c3#MsZ`@I=j@bB;`M87vvD=<~aL<>GkD@Tb2e3n*;60Kyq zR)Z4nRJwKowR-Z$G(&4bJv(`sMr-+3rbY%3atb6cz_=8iWc*yc}(_St{qyg8~I{DkAR(81*)2> zQacACeX?xnCSCrwF(T1F0WSGgA!fdF|7_Iy1Zjr1L{<^i+rfH zqAp|`TsKia@YqM1A;D$efq(aLp1^H|G?Cb2J7MhPudcEd@1osKJ$m znmN%$KGv3_awZyFYf#-}7x_fnhO)~B*SgZf_w$spFli!srCr|9QUqOPUrp+5Kld0lhqaVSyOTzV2}ujN8Os=fyG zDc1vfjT=agbiW*srnjM9;&*$d-qEQt`z$@7yEui1{K>0D#=q`%re20Iakppd9i|Fd z693vVOSkrbOUvY6TW0COsO)hrlC8(~z^r-W49<0>$5Z(&8Dr*wTk?pWf+f~vOU{M* zDv)_g7U~Tc6Sric-ii{pWT778`_C;|q)$SLTe3(`N1e4Y=VN*q>N?lsdc7NY(CO=3 ztTO`+)4-Llk4BBM*quxCeAEoCrTQLJjI)<>ncjk$#PKgU)2-L}nXg|V^AC)0uF{D=6l}KK>GbHaC~Cda`GlT_TIRgVxmvG8J(G{fqRZPEB@}=m$-C$R0k1*rNMb@%6LKbveuRcq#!_2f=f z*k9JGOu@p*4!r|o0o^j4JN2C}AZ+xkIM9OKxA7tBB4*Lpna7B6>RPZkmj%eRaQd!t@u26+R+mxh}34$L~g#}emd zJt+VVvzsrRT-6tK>Z1J@y~&h^1oB(@ryk>kobucy&cF0EsL%QOht8@xbo`Em{D}HG|OUJ6XLc7|#W=7L;hw0$Dpsv}i%hC&)a#*`Nh62TJVj=*6N? zV&_LMhU)=t^X2Nz;xH&)#cKFc%4C<)|@X23IBO z;W!rwVKu0NID_l&<%m*kmNe4$V>1SgKm=Aw8LA74uvp`}j3o6|y6328&9LG{h ze;0`>yChC!8%w98^TY#P5@)gc((NMgMwi4~=2QBsNW8Q6KPOtk5=!sQ;O)}R;!&ZJ zP_C&>?1}88z_qNvZL*L}q%N|SRic{sV%1u90@X5Hs0|fq=ClSw1?XWa7PUD==k?OFCyFb+t?s@k*c7G@QzYR@t`1TIai zsui}P-4T>HWmnSGqGc88w}Qa9nAezBU%0`dseg_6nc{m-c~k!yb7D+v2Yj9N!I;<%_&SS( z7@2y{?7%8k9cmthj2h}bW!cA)`T_qN@udGDM#4Z_9#|N7j4eVnbJejH)a49+>nE(Z zKja*mvM{ioDdC{zdzS`&&e~9O`iGIPSl$4L`Fd;QEb|#CpUM052u+l>;<)z@qvDti1Af&XJQraWxK_%&R|F(z*QId%$TVxzJ9 z96JX=GGRO)EwIW6^GeOz-N-%ynOl?_*-29#bBA&xI|DIte*Ck6-?02a|CDR}S3}dv zip*FuEf}DYR#s-Jmdi$3-R$!&1+TJpka@zZtiu$X@G4X9Fi*iI@OR`I>yAnt!@rGU zb`Za8zEzNggUDCWDs5veraWZUy+>_7v8cgt^ToD;-J5>T_`i-dZuK~3e7yy{RzsapeOui$7Xmy|G>s9uv$Tf%1$&8rDDkyHdSuap?b zc_){*SBo22lU@<%Zcs1CH^b#b(~fdt5G~?z+8JFx#t-rdCaI^*WLG2WV6D5RsO5(jcnF~R!08)Cn4g} zg81@LJpa3oc>X6LQ}2tvZ(7Fc1EKd9-2Gy-_4_+79c|saD2p-bzlNXe@1K{&|AW_u b*y+a7SF+iYdwb-tTe4Igz1MFJyFvdSy{Omt