diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb
index 7bf565dd8..19a607751 100644
--- a/Compras/PopUpVerFactura.aspx.vb
+++ b/Compras/PopUpVerFactura.aspx.vb
@@ -376,6 +376,12 @@ Partial Class PopUpVerFactura
If UrlParametros("CVEMOV") IsNot Nothing AndAlso UrlParametros("CVEMOV").ToString.ToEntero > 0 Then
ImprimeFormatoCartaPorte(UrlParametros("CVEMOV").ToString.ToEntero)
End If
+ End If
+
+ If UrlParametros("OP").ToString = "CARPOTIMBRE" Then
+ If UrlParametros("CVEMOV") IsNot Nothing AndAlso UrlParametros("CVEMOV").ToString.ToEntero > 0 Then
+ ImprimeFormatoCartaPorteTimbrado(UrlParametros("CVEMOV").ToString.ToEntero)
+ End If
End If
@@ -747,7 +753,7 @@ Partial Class PopUpVerFactura
#End Region
-#Region "OP = 'CARPO' - IMPRIME FORMATO CARTA PORTE"
+#Region "OP = 'CARPO' - IMPRIME FORMATO CARTA PORTE TIMBRADO"
Private Sub ImprimeFormatoCartaPorte(CveMovimiento As Integer)
If CveMovimiento > 0 Then
Dim ObjInv As New ClsInventarios
@@ -873,6 +879,345 @@ Partial Class PopUpVerFactura
End If
End Sub
+ Private Function ValorXML(n As XmlNode, Campo As String, Optional Retorno As String = "") As String
+ Dim o As XmlNode = n.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, Campo, True) = 0)
+ If o Is Nothing Then
+ Return Retorno
+ Else
+ Return o.Value
+ End If
+ End Function
+
+ Private Sub ImprimeFormatoCartaPorteTimbrado(CveMovimiento As Integer)
+ If CveMovimiento > 0 Then
+
+ '01 Autotransporte Federal
+ '02 Transporte Marítimo
+ '03 Transporte Aéreo
+ '04 Transporte Ferroviario
+ '05 Ducto
+ Dim HtTransporte As New Hashtable()
+ HtTransporte.Add("01", "Autotransporte Federal")
+ HtTransporte.Add("02", "Transporte Marítimo")
+ HtTransporte.Add("03", "Transporte Aéreo")
+ HtTransporte.Add("04", "Transporte Ferroviario")
+ HtTransporte.Add("05", "Ducto")
+
+ 'EMISOR
+ Dim LugarExpedicion As String = ""
+ Dim ImgCBB As String = ""
+ 'COMPROBANTE
+ Dim SerieFolio As String = ""
+ Dim Telefono As String = ""
+ Dim SubTotal As Decimal = 0
+ Dim Descuentos As Decimal = 0
+ Dim Total As Decimal = 0
+ 'DATOS DEL CLIENTE
+ Dim ClienteRFC As String = ""
+ Dim ClienteNombre As String = ""
+ Dim ClienteUsoCFDi As String = ""
+
+ 'TRANSPORTE
+ Dim MedioTransporte As String = ""
+ Dim TransporteInternacional As String = ""
+ Dim PermisoSTCC As String = ""
+ Dim NumPermiso As String = ""
+ Dim Aseguradora As String = ""
+ Dim NumPolizaSeguro As String = ""
+ Dim PlacaVM As String = ""
+ Dim AnioModeloVM As String = ""
+ 'TIMBRADO
+ Dim FolioFiscal As String = ""
+ Dim NoCertificadoSAT As String = ""
+ Dim CadenaOriginal As String = ""
+ Dim NoSerieCertificado As String = ""
+ Dim FechaCertificacion As DateTime = Nothing
+ Dim SelloCFDi As String = ""
+ Dim SelloSAT As String = ""
+
+ Dim ObjInv As New ClsInventarios
+ If ObjInv.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) Then
+ If ObjInv.DtResultados.Rows.Count > 0 Then
+ Dim Dr As DataRow = ObjInv.DtResultados.Rows(0)
+ If Dr IsNot Nothing Then
+ SerieFolio = Dr("Folio").ToString
+ Telefono = Dr("Telefono1").ToString
+ End If
+ End If
+ End If
+ ObjInv.Dispose()
+
+ Dim DtConceptos As New DataTable()
+ DtConceptos.Columns.Add(New DataColumn("Cantidad", GetType(Decimal)))
+ DtConceptos.Columns.Add(New DataColumn("Unidad", GetType(String)))
+ DtConceptos.Columns.Add(New DataColumn("Descripcion", GetType(String)))
+ DtConceptos.Columns.Add(New DataColumn("ValorUnitario", GetType(Decimal)))
+ DtConceptos.Columns.Add(New DataColumn("Importe", GetType(Decimal)))
+
+ Dim DtUbicaciones As New DataTable()
+ DtUbicaciones.Columns.Add(New DataColumn("Distancia", GetType(String)))
+ DtUbicaciones.Columns.Add(New DataColumn("RFC", GetType(String)))
+ DtUbicaciones.Columns.Add(New DataColumn("Nombre", GetType(String)))
+ DtUbicaciones.Columns.Add(New DataColumn("FechaHoraSalida", GetType(DateTime)))
+ DtUbicaciones.Columns.Add(New DataColumn("Direccion", GetType(String)))
+
+ Dim DtMercancias As New DataTable()
+ DtMercancias.Columns.Add(New DataColumn("Cantidad", GetType(Decimal)))
+ DtMercancias.Columns.Add(New DataColumn("UnidadMedida", GetType(String)))
+ DtMercancias.Columns.Add(New DataColumn("Descripcion", GetType(String)))
+ DtMercancias.Columns.Add(New DataColumn("PesoEnKg", GetType(String)))
+
+ Dim DtOperadores As New DataTable()
+ DtOperadores.Columns.Add(New DataColumn("RFC", GetType(String)))
+ DtOperadores.Columns.Add(New DataColumn("NumLicencia", GetType(String)))
+ DtOperadores.Columns.Add(New DataColumn("NombreOperador", GetType(String)))
+
+ Dim XMLDoc As New XmlDocument
+ Dim Path As String = String.Format("{0}\{1}\{2}\{3}.{4}", UsuarioActual.Empresa.Ruta, "XML", "Tra", String.Format("Tra-{0}", SerieFolio), "xml")
+ Dim Archivo As New System.IO.FileInfo(Path)
+
+ If Archivo.Exists Then
+ Try
+ XMLDoc.Load(Path)
+ Catch ex As Exception
+ Try
+ Dim oReader = New StreamReader(Path, Encoding.GetEncoding("ISO-8859-1"))
+ XMLDoc.Load(oReader)
+ oReader.Dispose()
+ Catch ex2 As Exception
+ GuardaLog("Error al intentar leer el XML del SAT. Error:" & ex2.ToString())
+ End Try
+ End Try
+ End If
+
+ If XMLDoc IsNot Nothing AndAlso Archivo.Exists Then
+
+ Dim RutaCBB As String = String.Format("{0}\CBB\Tra-{1}.jpg", UsuarioActual.Empresa.Ruta, SerieFolio)
+ Dim ImagenCBB As New System.IO.FileInfo(RutaCBB)
+
+ Dim nodo As XmlNode = XMLDoc.DocumentElement
+
+ Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix)
+ Dim cfdVer As String = "http://www.sat.gob.mx/cfd/3"
+ Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable)
+
+ If Prefijo.ToLower <> "cfdi" Then cfdVer = "http://www.sat.gob.mx/cfd/2"
+ namespaces.AddNamespace(Prefijo, cfdVer)
+ namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital")
+ namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal")
+ namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal")
+ namespaces.AddNamespace("cartaporte", "http://www.sat.gob.mx/CartaPorte")
+
+ Dim nodeComprobante As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Comprobante", Prefijo), namespaces)
+ If nodeComprobante IsNot Nothing Then
+ LugarExpedicion = ValorXML(nodeComprobante, "LugarExpedicion")
+ SubTotal = ValorXML(nodeComprobante, "SubTotal").ToDecimal()
+ Total = ValorXML(nodeComprobante, "Total").ToDecimal()
+ End If
+
+ Dim nodeCliente As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Receptor", Prefijo), namespaces)
+
+ If nodeCliente IsNot Nothing Then
+ ClienteRFC = ValorXML(nodeCliente, "RFC")
+ ClienteNombre = ValorXML(nodeCliente, "Nombre")
+ Dim UsoCFDI = ValorXML(nodeCliente, "UsoCFDI")
+ ClienteUsoCFDi = String.Format("{0} - {1}", UsoCFDI, GlobalDTSATUsosCFDI().FiltroPrimeroValor("Descripcion", String.Format("UsoCFDI = '{0}'", UsoCFDI)))
+ End If
+
+ Dim nodeConceptos As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Conceptos", Prefijo), namespaces)
+
+ If nodeConceptos IsNot Nothing Then
+ For Each node As XmlNode In nodeConceptos.ChildNodes
+ Dim Row As DataRow = DtConceptos.NewRow
+
+ Row("Cantidad") = ValorXML(node, "Cantidad", "")
+ Row("Unidad") = ValorXML(node, "Unidad", "")
+ Row("Descripcion") = ValorXML(node, "Descripcion", "")
+ Row("ValorUnitario") = ValorXML(node, "ValorUnitario", "")
+ Row("Importe") = ValorXML(node, "Importe", "")
+
+ DtConceptos.Rows.Add(Row)
+ Next
+ End If
+
+
+ Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces)
+
+ Dim nodeCartaPorte As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:CartaPorte", "cartaporte"), namespaces)
+ If nodeCartaPorte IsNot Nothing Then
+ TransporteInternacional = ValorXML(nodeCartaPorte, "TranspInternac", "")
+ End If
+
+ Dim nodeAutotransporteFederal As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:AutotransporteFederal", "cartaporte"), namespaces)
+ If nodeAutotransporteFederal IsNot Nothing Then
+ PermisoSTCC = ValorXML(nodeAutotransporteFederal, "PermSCT", "")
+ NumPermiso = ValorXML(nodeAutotransporteFederal, "NumPermisoSCT", "")
+ Aseguradora = ValorXML(nodeAutotransporteFederal, "NombreAseg", "")
+ NumPolizaSeguro = ValorXML(nodeAutotransporteFederal, "NumPolizaSeguro", "")
+ End If
+
+ Dim nodeIdentificacionVehicular As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:IdentificacionVehicular", "cartaporte"), namespaces)
+ If nodeIdentificacionVehicular IsNot Nothing Then
+ PlacaVM = ValorXML(nodeIdentificacionVehicular, "PlacaVM", "")
+ AnioModeloVM = ValorXML(nodeIdentificacionVehicular, "AnioModeloVM", "")
+ End If
+
+ Dim nodeFiguraTransporte As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:FiguraTransporte", "cartaporte"), namespaces)
+ If nodeFiguraTransporte IsNot Nothing Then
+ Dim CveTransporte As String = ValorXML(nodeFiguraTransporte, "CveTransporte", "")
+ MedioTransporte = String.Format("{0} - {1}", CveTransporte, HtTransporte(CveTransporte).ToString())
+ End If
+
+ Dim nodeMercancias As XmlNodeList = nodeComp.SelectNodes(String.Format("//{0}:Mercancia", "cartaporte"), namespaces)
+ For Each node As XmlNode In nodeMercancias
+ Dim Row As DataRow = DtMercancias.NewRow
+
+ Row("Cantidad") = ValorXML(node, "Cantidad", "")
+ Row("UnidadMedida") = ValorXML(node, "Unidad", "")
+ Row("Descripcion") = ValorXML(node, "Descripcion", "")
+ Row("PesoEnKg") = ValorXML(node, "PesoEnKg", "")
+
+ DtMercancias.Rows.Add(Row)
+ Next
+
+ Dim nodeOperadores As XmlNodeList = nodeComp.SelectNodes(String.Format("//{0}:Operador", "cartaporte"), namespaces)
+ For Each node As XmlNode In nodeOperadores
+ Dim Row As DataRow = DtOperadores.NewRow
+
+ Row("RFC") = ValorXML(node, "RFCOperador", "")
+ Row("NumLicencia") = ValorXML(node, "NumLicencia", "")
+ Row("NombreOperador") = ValorXML(node, "NombreOperador", "")
+
+ DtOperadores.Rows.Add(Row)
+ Next
+
+
+ Dim nodeUbicaciones As XmlNodeList = nodeComp.SelectNodes(String.Format("//{0}:Ubicacion", "cartaporte"), namespaces)
+ For Each node As XmlNode In nodeUbicaciones
+ Dim Row As DataRow = DtUbicaciones.NewRow
+
+ Row("Distancia") = ValorXML(node, "DistanciaRecorrida", "")
+ Dim nodeOrigen = node.ChildNodes.Cast(Of XmlNode).FirstOrDefault(Function(x) x.Name = "cartaporte:Origen")
+ If nodeOrigen IsNot Nothing Then
+ Row("RFC") = ValorXML(nodeOrigen, "RFCRemitente", "")
+ Row("Nombre") = ValorXML(nodeOrigen, "NombreRemitente", "")
+ Row("FechaHoraSalida") = ValorXML(nodeOrigen, "FechaHoraSalida", "").ToDateTime()
+ End If
+
+ Dim nodeDestino = node.ChildNodes.Cast(Of XmlNode).FirstOrDefault(Function(x) x.Name = "cartaporte:Destino") 'node.SelectSingleNode(String.Format("//{0}:Destino", "cartaporte"), namespaces)
+ If nodeDestino IsNot Nothing Then
+ Row("RFC") = ValorXML(nodeDestino, "RFCDestinatario", "")
+ Row("Nombre") = ValorXML(nodeDestino, "NombreDestinatario", "")
+ Row("FechaHoraSalida") = ValorXML(nodeDestino, "FechaHoraProgLlegada", "").ToDateTime()
+ End If
+
+ Dim nodeDomicilio = node.ChildNodes.Cast(Of XmlNode).FirstOrDefault(Function(x) x.Name = "cartaporte:Domicilio") 'node.SelectSingleNode(String.Format("//{0}:Domicilio", "cartaporte"), namespaces)
+ If nodeDomicilio IsNot Nothing Then
+ Dim calle = ValorXML(nodeDomicilio, "Calle", "")
+ Dim Estado = ValorXML(nodeDomicilio, "Estado", "")
+ Dim Pais = ValorXML(nodeDomicilio, "MEX", "")
+ Dim CP = ValorXML(nodeDomicilio, "CodigoPostal", "")
+
+ Row("Direccion") = String.Format("{0} ,{1},{2}. CP {3}", calle, Estado, Pais, CP)
+ End If
+
+ DtUbicaciones.Rows.Add(Row)
+ Next
+
+ Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces)
+ If nodeTFD IsNot Nothing Then
+ FolioFiscal = ValorXML(nodeTFD, "UUID", "")
+ NoSerieCertificado = ValorXML(nodeTFD, "NoCertificadoSAT", "")
+ FechaCertificacion = ValorXML(nodeTFD, "FechaTimbrado", "").ToDateTime
+ SelloCFDi = ValorXML(nodeTFD, "SelloCFD", "")
+ SelloSAT = ValorXML(nodeTFD, "SelloSAT", "")
+ NoCertificadoSAT = ValorXML(nodeTFD, "NoCertificadoSAT", "")
+
+ CadenaOriginal = "||1.0|" + FolioFiscal + "|" + FechaCertificacion.ToString("yyyy-MM-dd") + "T" + FechaCertificacion.ToString("HH:mm:ss") + "|" + SelloCFDi + "|" + NoSerieCertificado + "||"
+ End If
+
+ If Not ImagenCBB.Exists Then
+ Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar()
+ CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ClienteRFC, Total, FolioFiscal, RutaCBB)
+ End If
+
+ ImgCBB = String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/Tra-{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, SerieFolio)
+ End If
+
+ If DtConceptos.Rows.Count > 0 Then
+ Dim params As New List(Of ReportParameter)
+ Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta))
+ Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa)
+ If Imagen.Exists Then
+ params.Add(New ReportParameter("LogoPath", logouri))
+ Else
+ params.Add(New ReportParameter("LogoPath", ""))
+ End If
+ 'EMPRESA
+ params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa))
+ params.Add(New ReportParameter("RegimenFiscal", UsuarioActual.Empresa.Regimen))
+ params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre))
+ params.Add(New ReportParameter("FechaImpresion", Now.ToDateTime.ToShortDateString))
+ params.Add(New ReportParameter("DomicilioFiscal", $"{UsuarioActual.Empresa.Direccion}, {UsuarioActual.Empresa.Colonia}, {UsuarioActual.Empresa.Localidad}, {UsuarioActual.Empresa.Estado}, Tel. {Telefono}"))
+ params.Add(New ReportParameter("SerieFolio", SerieFolio))
+ params.Add(New ReportParameter("RFC", UsuarioActual.Empresa.RFC))
+ params.Add(New ReportParameter("DomicilioExpedicion", LugarExpedicion))
+ 'CLIENTE
+ params.Add(New ReportParameter("ClienteNombre", ClienteNombre))
+ params.Add(New ReportParameter("ClienteRFC", ClienteRFC))
+ params.Add(New ReportParameter("UsoCFDi", ClienteUsoCFDi))
+ 'TRANSPORTE
+ params.Add(New ReportParameter("MedioTransporte", MedioTransporte))
+ params.Add(New ReportParameter("TransporteInternacional", TransporteInternacional))
+ params.Add(New ReportParameter("PermisoSTCC", PermisoSTCC))
+ params.Add(New ReportParameter("NumPermiso", NumPermiso))
+ params.Add(New ReportParameter("Aseguradora", Aseguradora))
+ params.Add(New ReportParameter("NumPoliza", NumPolizaSeguro))
+ params.Add(New ReportParameter("PlacaVM", PlacaVM))
+ params.Add(New ReportParameter("AnioVM", AnioModeloVM))
+ 'TIMBRADO
+ params.Add(New ReportParameter("FolioFiscal", FolioFiscal))
+ params.Add(New ReportParameter("QR", ImgCBB))
+ params.Add(New ReportParameter("SelloCFDI", SelloCFDi))
+ params.Add(New ReportParameter("CertificadoContribuyente", NoCertificadoSAT))
+ params.Add(New ReportParameter("CadenaOriginal", CadenaOriginal))
+ params.Add(New ReportParameter("SerieCertificadoSAT", NoSerieCertificado))
+ params.Add(New ReportParameter("FechaCertificacion", FechaCertificacion.ToString("dd/MM/yyyy HH:mm:ss")))
+ params.Add(New ReportParameter("SelloSAT", SelloSAT))
+ 'TOTALES
+ params.Add(New ReportParameter("SubTotal", SubTotal.ToString()))
+ params.Add(New ReportParameter("Descuentos", Descuentos.ToString()))
+ params.Add(New ReportParameter("Total", Total.ToString()))
+ ' [@CertificadoContribuyente]
+ '[@CadenaOriginal]
+
+ Dim lrds As New List(Of ReportDataSource)
+
+ Dim rds As New ReportDataSource
+ rds.Name = "DataSet1"
+ rds.Value = DtConceptos
+ lrds.Add(rds)
+
+ Dim rds2 As New ReportDataSource
+ rds2.Name = "DataSet2"
+ rds2.Value = DtUbicaciones
+ lrds.Add(rds2)
+
+ Dim rds3 As New ReportDataSource
+ rds3.Name = "DataSet3"
+ rds3.Value = DtMercancias
+ lrds.Add(rds3)
+
+ Dim rds4 As New ReportDataSource
+ rds4.Name = "DataSet4"
+ rds4.Value = DtOperadores
+ lrds.Add(rds4)
+
+ ImprimirPDF("Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc", lrds, params, String.Format("Carta Porte -{0}", Now.ToDateTime.ToShortDateString))
+ End If
+ End If
+ End Sub
+
#End Region
#Region "OP = 'DesXmlTra' - IMPRIME XML TRASLADO"
diff --git a/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc b/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc
new file mode 100644
index 000000000..24d09caea
--- /dev/null
+++ b/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc
@@ -0,0 +1,3627 @@
+
+