diff --git a/App_Code/ClsPuntoVenta.vb b/App_Code/ClsPuntoVenta.vb
index 6a0112680..79f8f82ed 100644
--- a/App_Code/ClsPuntoVenta.vb
+++ b/App_Code/ClsPuntoVenta.vb
@@ -243,6 +243,29 @@ Public Class ClsPuntoVenta
Return Retorno
End Function
+ Public Function GetCortesPorCuenta(CveCuenta As Integer, CveEmpresa As Integer) As Boolean
+ Dim Retorno As Boolean = False
+
+ DataAdapter("PA_Vta_CuentaCorteGet")
+
+ With SqlAdapter.SelectCommand.Parameters
+ .Add("@CveCuenta", SqlDbType.Int).Value = CveCuenta
+ .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ .Add("@CveCorte", SqlDbType.Int).Direction = ParameterDirection.Output
+ End With
+
+ Try
+ SqlAdapter.Fill(Data)
+ CveCorte = Integer.Parse(SqlAdapter.SelectCommand.Parameters("@CveCorte").Value.ToString)
+ Retorno = True
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener los cuenta de corte", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
+ End Try
+
+ Return Retorno
+ End Function
+
+
Public Function GetVta_ReporteCortes(CveEmpresa As Integer, FechaI As Date, FechaF As Date, Optional CveSubProyecto As Integer = -1) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Vta_ReporteCortesGet")
diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb
index 1dead2777..732c68020 100644
--- a/App_Code/Modelos.vb
+++ b/App_Code/Modelos.vb
@@ -4407,63 +4407,79 @@ Namespace Modelos
If ObjFactura.FolioFiscal <> "" Then
If ObjFactura.TipoDocto.Contiene("Ing", "Ant", "Dev", "Egs") Then
- Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), UsuarioActual.Empresa.FacturaProduccion)
+ 'VERIFICA SI DEBE VALIDAR ANTE EL SAT
+ If Not (UsuarioActual.Empresa.Funcionalidad(529) = "1") Then
- If Vigencia IsNot Nothing Then
- If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
- Retorno.Mensaje = "Esta factura no es cancelable."
+ Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), UsuarioActual.Empresa.FacturaProduccion)
+
+ If Vigencia IsNot Nothing Then
+ If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
+ Retorno.Mensaje = "Esta factura no es cancelable."
+ Retorno.TipoMensaje = TipoMensaje.MsgAdvertencia
+
+ Return Retorno
+ End If
+ If Vigencia.Estado.ToUpper().Contains("CANCELADO") Then
+ ContinuarCancelacion = False
+ ObtenerAcuse = True
+ Dim solicitud = New WSGF.Service1SoapClient()
+ Dim acuse = solicitud.GetAcuse(UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx", "rene2018", FolioFiscal)
+
+ If acuse.Estado = 0 Then
+ Dim xmlAcuse = New System.Xml.XmlDocument()
+ xmlAcuse.LoadXml(DecodeBase64(acuse.CfdiB64))
+ CancelacionAcuse = xmlAcuse.GetElementsByTagName("SignatureValue")(0).InnerText
+ CancelacionFecha = xmlAcuse.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate()
+ CveEstatus = 5
+ Else
+ CancelacionFecha = Now.Date
+ CancelacionAcuse = ""
+ CveEstatus = 5
+ End If
+
+ ElseIf Vigencia.Estado.ToUpper().Contains("VIGENTE") Then
+
+ If Vigencia.EstatusCancelacion.ToUpper() = "EN PROCESO" Then
+ CveEstatus = 20
+ ContinuarCancelacion = False
+ ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then
+ CveEstatus = 20
+ ContinuarCancelacion = True
+ RequiereAceptacion = True
+ ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then
+ ContinuarCancelacion = True
+ CveEstatus = 5
+ End If
+
+ Else
+ If Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then
+ ContinuarCancelacion = True
+ CveEstatus = 5
+ Else
+ CveEstatus = 20
+ ContinuarCancelacion = False
+ CancelacionFecha = Now.Date
+ CancelacionAcuse = ""
+ End If
+ End If
+ Else
+ Retorno.Mensaje = "SAT - No se pudo verificar el estatus de la factura."
Retorno.TipoMensaje = TipoMensaje.MsgAdvertencia
Return Retorno
End If
- If Vigencia.Estado.ToUpper().Contains("CANCELADO") Then
- ContinuarCancelacion = False
- ObtenerAcuse = True
- Dim solicitud = New WSGF.Service1SoapClient()
- Dim acuse = solicitud.GetAcuse(UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx", "rene2018", FolioFiscal)
-
- If acuse.Estado = 0 Then
- Dim xmlAcuse = New System.Xml.XmlDocument()
- xmlAcuse.LoadXml(DecodeBase64(acuse.CfdiB64))
- CancelacionAcuse = xmlAcuse.GetElementsByTagName("SignatureValue")(0).InnerText
- CancelacionFecha = xmlAcuse.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate()
- CveEstatus = 5
- Else
- CancelacionFecha = Now.Date
- CancelacionAcuse = ""
- CveEstatus = 5
- End If
-
- ElseIf Vigencia.Estado.ToUpper().Contains("VIGENTE") Then
-
- If Vigencia.EstatusCancelacion.ToUpper() = "EN PROCESO" Then
- CveEstatus = 20
- ContinuarCancelacion = False
- ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then
- CveEstatus = 20
- ContinuarCancelacion = True
- RequiereAceptacion = True
- ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then
- ContinuarCancelacion = True
- CveEstatus = 5
- End If
-
- Else
- If Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then
- ContinuarCancelacion = True
- CveEstatus = 5
- Else
- CveEstatus = 20
- ContinuarCancelacion = False
- CancelacionFecha = Now.Date
- CancelacionAcuse = ""
- End If
- End If
Else
- Retorno.Mensaje = "SAT - No se pudo verificar el estatus de la factura."
- Retorno.TipoMensaje = TipoMensaje.MsgAdvertencia
+ ObtenerAcuse = False
+ ContinuarCancelacion = True
+ CancelacionFecha = Now.Date
+ CancelacionAcuse = ""
+
+ Dim diasTimbrado As Decimal = DateDiff(DateInterval.Day, ObjFactura.FechaCP, Now)
+
+ If ObjFactura.Total < 5000D OrElse diasTimbrado <= 3 OrElse ObjFactura.Cliente.RFC.Contiene("XAXX010101000", "XEXX010101000") Then
+ RequiereAceptacion = False
+ End If
- Return Retorno
End If
If Not ObtenerAcuse Then
diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb
index e4cda96bc..56fce0da2 100644
--- a/App_Code/Timbrado.vb
+++ b/App_Code/Timbrado.vb
@@ -59,18 +59,20 @@ Public Class Timbrado
Public Function CFDICancelar(Empresa As Empresa, FolioFiscal As String, Total As Decimal, RFCReceptor As String, RFCEmisor As String, Optional CvePACCancelacion As Integer = 2, Optional ValidaFactura As Boolean = True) As Boolean
Dim Retorno As Boolean = False
Dim MsgCancelacion As New StringBuilder
- If ValidaFactura Then
- Dim Vigencia = VerificarVigenciaSAT(FolioFiscal, RFCEmisor, RFCReceptor, Total.ToString(), True)
- If Vigencia IsNot Nothing Then
- If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
+
+ If Not (Empresa.Funcionalidad(529) = "1") Then
+ If ValidaFactura Then
+ Dim Vigencia = VerificarVigenciaSAT(FolioFiscal, RFCEmisor, RFCReceptor, Total.ToString(), True)
+ If Vigencia IsNot Nothing Then
+ If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
+ Return False
+ End If
+ Else
Return False
End If
- Else
- Return False
End If
End If
-
MsgCancelacion.AppendFormat("CvePAC:{0}", CvePACCancelacion)
Select Case CvePACCancelacion
@@ -654,6 +656,12 @@ Public Class Timbrado
If Ret <> "" Then MensajeErrorCFDI = Ret
Retorno = If(Ret = "", True, False)
+ Case 5
+
+ Dim Ret As String = TimbrarFacturaPADEv33(Ventas, UsuarioActual, CvePACEspecial)
+ If Ret <> "" Then MensajeErrorCFDI = Ret
+ Retorno = If(Ret = "", True, False)
+
End Select
@@ -2185,6 +2193,604 @@ Public Class Timbrado
GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial)
Return Retorno
End Function
+
+ Public Function TimbrarFacturaPADEv33(Ventas As Modelos.Factura, UsuarioActual As Usuario, Optional CvePACEspecial As Integer = -1) As String
+ If CvePACEspecial = -1 Then
+ CvePACEspecial = UsuarioActual.Empresa.CvePAC
+ End If
+ Dim sw As New Diagnostics.Stopwatch
+ Dim swmili As Long = 0
+ Dim swTiempo As New StringBuilder
+ sw.Start()
+ Dim Retorno As String = ""
+ Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre
+ ' 'Sucursal matriz de la empresa
+ Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey)
+ Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer)
+ Dim UsuarioServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx")
+ Dim ClaveServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018")
+ Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
+ Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
+ Dim UrlServicio As String = "" ' Produccion
+ Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto)
+ Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio
+ Dim SubTotal As Decimal = 0
+ Dim TimbraProduccion As Boolean = True
+ If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo)
+ Select Case CvePACEspecial
+ Case 2
+ UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" 'productivo
+ Case 4
+ 'UrlServicio = "http://juancalderon-001-site1.ftempurl.com/timbrado.asmx?WSDL"
+ UrlServicio = "http://alterno.gofac.com.mx/cfdi/timbrado.asmx?WSDL" ' alterno
+ End Select
+
+ If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then
+
+ EmisorRFC = "AAA010101AAA"
+ ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key"
+ ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer"
+ Clave = "12345678a"
+ TimbraProduccion = False
+ Select Case CvePACEspecial
+ Case 2
+ UsuarioServicio = "fgomez"
+ ClaveServicio = "12121212"
+ UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" '"http://108.60.211.43/rvltimbrado/service1.asmx"
+ Case 4
+ UsuarioServicio = "UserTest"
+ ClaveServicio = "1234567890"
+ UrlServicio = "http://juancalderon-001-site1.ftempurl.com/timbrado.asmx?WSDL"
+ End Select
+ End If
+
+#Region "Valida"
+ If Not File.Exists(ArchivoCertificado) Then
+ Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
+ Return "El archivo de certificado no existe"
+ End If
+ If Not File.Exists(ArchivoLLave) Then
+ Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
+ Return "El archivo de llave privada no existe"
+ End If
+ If UsuarioActual.Empresa.ContraseñaKey = "" Then
+ Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
+ Return "La clave no puede ser vacía"
+ End If
+#End Region
+
+#Region "Variables"
+ Dim llaveByte As Byte(), certByte As Byte()
+ Dim llaveBase64 As String, certBase64 As String
+ Dim cfdi As New GoFac.GoCfdi()
+ Dim complemento As String = ""
+ Dim complementoConcepto As String = ""
+
+#End Region
+
+#Region "Verifica"
+ Try
+ llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave)
+ llaveBase64 = Convert.ToBase64String(llaveByte)
+ Catch ex As Exception
+ Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
+ Return "Error al leer la llave privada"
+ End Try
+
+
+ Try
+ certByte = System.IO.File.ReadAllBytes(ArchivoCertificado)
+ certBase64 = Convert.ToBase64String(certByte)
+ Catch ex As Exception
+ Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError)
+ Return "Error al leer el certificado"
+
+ End Try
+#End Region
+
+
+ sw.Stop()
+ swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+ ' cfdi.saltarValidacion("bNtMuvZockPVhEjaPj0E")
+ ' cfdi.Decimales = 4
+#Region "Certificado"
+ cfdi.CertificadoArchivo(ArchivoCertificado)
+#End Region
+
+
+ sw.Stop()
+ swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+#Region "Comprobante"
+
+ cfdi.Comprobante33(
+ ObjCFDITimbre.Comprobante.Serie,
+ ObjCFDITimbre.Comprobante.Folio,
+ ObjCFDITimbre.Comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss"),
+ ObjCFDITimbre.Comprobante.FormadePago,
+ ObjCFDITimbre.Comprobante.CondicionesdePago,
+ ObjCFDITimbre.Comprobante.Subtotal,
+ ObjCFDITimbre.Comprobante.Descuentos,
+ ObjCFDITimbre.Comprobante.Moneda,
+ ObjCFDITimbre.Comprobante.TipoCambio.ToString,
+ ObjCFDITimbre.Comprobante.Total,
+ ObjCFDITimbre.Comprobante.TipoComprobante,
+ ObjCFDITimbre.Comprobante.MetodoPago,
+ ObjCFDITimbre.Comprobante.LugarExpedicion,
+ ObjCFDITimbre.Comprobante.Confirmacion)
+
+ If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then
+ cfdi.CfdiRelacionados(ObjCFDITimbre.CFDIRelacionados.TipoRelacion)
+ For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID
+ cfdi.CfdiRelacionado(uid)
+ Next
+ End If
+#Region "Emisor"
+ ' cfdi.agregarCfdiRelacionados()
+ cfdi.Emisor(EmisorRFC, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal)
+
+#End Region
+
+#Region "Receptor"
+
+ cfdi.Receptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, ObjCFDITimbre.Receptor.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, ObjCFDITimbre.Receptor.UsoCFDI)
+
+#End Region
+
+#End Region
+
+#Region "Conceptos"
+
+ 'Nodo conceptos, se agregan los PS
+
+ If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then
+ For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos
+ cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.Descuento)
+ For Each imp As CFDIConceptosImpuestos In concep.Impuestos
+ If imp.TrasladooRetencion = "T" Then
+ cfdi.ImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
+ Else
+ cfdi.ImpuestoConceptoRetenido(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe)
+ End If
+ Next
+ If concep.CuentaPredial <> "" Then cfdi.CuentaPredial(concep.CuentaPredial)
+ If concep.NumeroPedimento <> "" Then cfdi.InformacionAduanera(concep.NumeroPedimento)
+ Next
+ End If
+
+#End Region
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then
+
+#Region "Impuestos"
+ 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS
+ If Ventas.Total <> 0 OrElse (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.TotalImpuestosTrasladados > 0) Then
+ cfdi.Impuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados)
+ End If
+#End Region
+#Region " Traslados y Retenciones"
+
+
+ If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then
+ ''se acumulan los importes
+ For Each Ret In ObjCFDITimbre.Retenciones
+ cfdi.Retencion(Ret.Impuesto, Ret.Importe)
+ Next
+ End If
+
+ ''se acumulan los importes
+ For Each Tras In ObjCFDITimbre.Traslados
+ cfdi.Traslado(Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe)
+ Next
+#End Region
+
+#Region "Impuestos Locales"
+
+ If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 OrElse ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe) > 0 Then
+
+ cfdi.ImpuestosLocales(ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe), ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe))
+
+ For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales
+ If ret.Importe > 0 Then
+ cfdi.RetencionLocal(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe)
+ End If
+ Next
+
+ For Each ret As CFDITrasladosLocales In ObjCFDITimbre.TrasladosLocales
+ If ret.Importe > 0 Then
+ cfdi.TrasladoLocal(ret.ImpuestoLocalTraslado, ret.TasaTraslado, ret.Importe)
+ End If
+ Next
+ End If
+
+ If Ventas.CveComplementoTimbrado > 0 Then
+
+ Select Case Ventas.CveComplementoTimbrado
+ Case 5 'INE Proceso Ordinario Directivo Estatal"
+ cfdi.Ine11("Ordinario", "Directivo Estatal", "0")
+
+ cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "")
+ cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
+ Case 6 'INE Proceso Ordinario Ejecutivo Estatal"
+ cfdi.Ine11("Ordinario", "Ejecutivo Estatal", "0")
+
+ cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "")
+ cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
+ Case 7 'INE Proceso Ordinario Ejecutivo Nacional"
+
+ cfdi.Ine11("Ordinario", "Ejecutivo Nacional", Ventas.ComplementoINE.INEIdContabilidad.ToString)
+ Case 8 'INE PreCampaña
+ cfdi.Ine11(Ventas.ComplementoINE.INETipoProceso, "", "0")
+
+ cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, Ventas.ComplementoINE.INETipoComite)
+ cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad)
+ End Select
+
+ End If
+
+
+
+#End Region
+
+
+#Region "Comercio Exterior"
+
+ If Ventas.Cliente.AplicaComercioExterior And ObjCFDITimbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto Then
+ If ObjCFDITimbre.Complementos.ComercioExterior11 IsNot Nothing Then
+
+ 'DATOS GENERALES
+ cfdi.ComercioExterior11(ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado,
+ ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion,
+ ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento,
+ ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen,
+ ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen,
+ ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones,
+ ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD,
+ ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD)
+ 'EMISOR
+ cfdi.ComercioExterior11Emisor(If(EmisorRFC.Length >= 12, "", ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP))
+ cfdi.ComercioExterior11Domicilio(ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP)
+ 'RECEPTOR
+ cfdi.ComercioExterior11Receptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib)
+ cfdi.ComercioExterior11DomicilioReceptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP)
+ cfdi.ComercioExterior11Destinatario(ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais,
+ ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP)
+ 'MERCANCIAS
+ If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then
+ For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias
+ cfdi.ComercioExterior11Mercancia(concep.NoIdentificacion, concep.FraccionArancelaria, concep.CantidadAduana, concep.UnidadAduana, concep.ValorUnitarioAduana, concep.ValorDolares)
+ If concep.DescripcionesEspecificas.Marca <> "" Then
+ cfdi.ComercioExterior11MercanciaDescripcionesEspeciales(concep.DescripcionesEspecificas.Marca,
+ concep.DescripcionesEspecificas.Modelo,
+ concep.DescripcionesEspecificas.SubModelo,
+ concep.DescripcionesEspecificas.NumeroSerie)
+ End If
+ Next
+
+ End If
+
+
+ End If
+ End If
+
+#End Region
+
+
+ End If
+
+#Region "Complemento Pago"
+
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then
+
+ cfdi.Pago(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"),
+ ObjCFDITimbre.ComplementoPagos.FormaDePagoP,
+ ObjCFDITimbre.ComplementoPagos.MonedaP,
+ ObjCFDITimbre.ComplementoPagos.TipoCambioP,
+ ObjCFDITimbre.ComplementoPagos.Monto,
+ ObjCFDITimbre.ComplementoPagos.NumOperacion,
+ ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd,
+ ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt,
+ ObjCFDITimbre.ComplementoPagos.CtaOrdenante,
+ ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen,
+ ObjCFDITimbre.ComplementoPagos.CtaBeneficiario,
+ ObjCFDITimbre.ComplementoPagos.TipoCadPago,
+ ObjCFDITimbre.ComplementoPagos.CertPago,
+ ObjCFDITimbre.ComplementoPagos.CadPago,
+ ObjCFDITimbre.ComplementoPagos.SelloPago)
+
+
+ If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then
+
+
+ For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados
+ cfdi.PagoDoctoRelacionado(doc.IdDocumento,
+ doc.Serie,
+ doc.Folio,
+ doc.MonedaDR,
+ doc.TipoCambioDR,
+ doc.MetodoDePagoDR,
+ doc.NumParcialidad,
+ doc.ImpSaldoAnt,
+ doc.ImpPagado,
+ doc.ImpSaldoInsoluto)
+
+ Next
+
+ 'Estos impuestos aplicarían para anticipos
+ If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then
+
+ cfdi.PagoImpuestos(ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos, ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados)
+ If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then
+ For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R")
+ cfdi.PagoRetencion(Ret.Impuesto, Ret.Importe)
+ Next
+ End If
+ If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then
+ For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T")
+ cfdi.PagoTraslado(Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.Importe)
+ Next
+ End If
+
+ End If
+
+
+
+ End If
+
+ End If
+#End Region
+
+
+
+#Region "Nomina12"
+ If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then
+
+ 'cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd")
+ cfdi.Nomina12(ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago.ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaInicio.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaFin.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.NumDiasPagados, If(ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0, ObjCFDITimbre.Nomina.TotalPercepciones, 0), If(ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0, ObjCFDITimbre.Nomina.TotalDeducciones, 0), If(ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0, ObjCFDITimbre.Nomina.TotalOtrosPagos, 0))
+
+ cfdi.Nomina12Emisor(ObjCFDITimbre.Emisor.CURP, If(ObjCFDITimbre.Nomina.Receptor.TipoContrato = "99", "", ObjCFDITimbre.Emisor.RegistroPatronal), ObjCFDITimbre.Emisor.RFC)
+
+ If UsuarioActual.Empresa.UsaAC Then cfdi.Nomina12EntidadSNCF("IF", 90)
+
+
+#Region "Receptor"
+
+ cfdi.Nomina12Receptor(ObjCFDITimbre.Nomina.Receptor.CURP,
+ ObjCFDITimbre.Nomina.Receptor.NSS,
+ ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato.ToDate().ToString("yyyy-MM-dd"),
+ ObjCFDITimbre.Nomina.Receptor.Antiguedad,
+ ObjCFDITimbre.Nomina.Receptor.TipoContrato,
+ ObjCFDITimbre.Nomina.Receptor.Sindicalizado,
+ ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada,
+ ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion,
+ ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado,
+ ObjCFDITimbre.Nomina.Receptor.Departamento,
+ ObjCFDITimbre.Nomina.Receptor.Puesto,
+ ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto,
+ If(ObjCFDITimbre.Nomina.TipoNomina = "E", "99", ObjCFDITimbre.Nomina.Receptor.TipoPeriodo),
+ ObjCFDITimbre.Nomina.Receptor.CodigoBanco,
+ ObjCFDITimbre.Nomina.Receptor.NumeroCuenta,
+ ObjCFDITimbre.Nomina.Receptor.SBC,
+ ObjCFDITimbre.Nomina.Receptor.SDI,
+ ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa)
+ 'cfdi.Nomina12SubContratacion("", "0")
+ 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200");
+ 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50");
+ 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0");
+
+
+ End If
+#End Region
+ If ObjCFDITimbre.Nomina IsNot Nothing Then
+
+ If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then
+ cfdi.Nomina12Percepciones(ObjCFDITimbre.Nomina.TotalSueldos, ObjCFDITimbre.Nomina.TotalIndemnizacion, ObjCFDITimbre.Nomina.TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado, ObjCFDITimbre.Nomina.TotalPercepcionesExento)
+ For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones
+ cfdi.Nomina12Percepcion(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2), Math.Round(percep.ImporteExento, 2))
+ Next
+ End If
+
+ 'deducciones al final
+ If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then
+ cfdi.Nomina12Deducciones(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2))
+ For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones
+ cfdi.Nomina12Deduccion(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2))
+ Next
+ End If
+
+ If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
+ For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
+ cfdi.Nomina12HorasExtra(HoraExtra.Dias.ToEntero, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado)
+ Next
+ End If
+
+ If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then
+ For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades
+ cfdi.Nomina12Incapacidad(Incap.DiasIncapacidad.ToEntero, Incap.TipoIncapacidad, Incap.Importe)
+ Next
+ End If
+
+ If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then
+ ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00");
+ ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00");
+ If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then
+ For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos
+ cfdi.Nomina12OtroPago(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe)
+ If otpag.TipoOtroPago = "002" Then
+ cfdi.Nomina12SubsidioAlEmpleo(otpag.Subsidiocausado)
+ End If
+
+ Next
+ End If
+ End If
+ End If
+#End Region
+
+ sw.Stop()
+ swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+#Region "Genera XML"
+ Dim ArchivoGenerado As Boolean = False
+ Try
+ cfdi.GenerarXMLB64(llaveBase64, Clave)
+ ArchivoGenerado = True
+ Catch ex As Exception
+ Retorno = cfdi.MensajeError
+ If Retorno = "" OrElse IsNothing(Retorno) Then
+ Retorno = $"llaveBase64 ={llaveBase64}
Clave ={Clave}
{ex.ToString()}"
+ End If
+ MensajeErrorCFDI = Retorno
+ End Try
+
+#End Region
+ sw.Stop()
+ swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ swmili = sw.ElapsedMilliseconds
+ sw.Start()
+
+#Region "Timbra"
+ If ArchivoGenerado Then
+
+ 'cfdi.TimbrarCfdi(UsuarioServicio, ClaveServicio, UrlServicio, TimbraProduccion)
+
+ 'sw.Stop()
+ 'swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ 'swmili = sw.ElapsedMilliseconds
+ 'sw.Start()
+ ''Verifica el error
+ 'If cfdi.CodigoError = 0 Then
+
+ ' Dim FolioFiscal As String
+
+ ' UUID = cfdi.UUID
+ ' FolioFiscal = cfdi.UUID 'obtenerAtributo(cfdi.XmlTimbrado, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText
+
+ ' If FolioFiscal <> "" Then
+
+ ' cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
+
+ ' sw.Stop()
+ ' swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ ' swmili = sw.ElapsedMilliseconds
+ ' sw.Start()
+
+ ' If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then
+
+ ' 'Actualiza Estatus Factura
+ ' If Ventas.CveVenta > 0 Then
+
+ ' Using ObjVentas As New ClsVentas()
+
+ ' If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=CvePACEspecial) Then
+ ' Retorno = ""
+ ' Else
+ ' Retorno = "Error"
+ ' End If
+ ' End Using
+
+ ' 'Genero la addenda Ford
+ ' If Ventas.Cliente.Ford_GSDB <> "" Then
+
+ ' Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio))
+
+ ' Dim FolioFactura As String = ""
+ ' If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura
+ ' GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB)
+
+ ' End If
+
+ ' End If
+
+ ' If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then
+ ' Using ObjNomina2 As New ClsNominas()
+
+ ' If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, "", ("01/01/2000").ToDate, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0) Then
+ ' Retorno = ""
+ ' Else
+ ' Retorno = "Error"
+ ' End If
+ ' End Using
+ ' End If
+
+ ' If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then
+ ' Using ObjInv As New ClsInventarios()
+ ' If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then
+ ' Retorno = ""
+ ' Else
+ ' Retorno = "Error"
+ ' End If
+ ' End Using
+ ' End If
+ ' End If
+
+ ' If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\")
+
+ ' Try
+ ' Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg"
+ ' Dim b As Byte() = cfdi.QrCode($"?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}")
+ ' File.WriteAllBytes(RutaCBB, b)
+ ' Catch ex As Exception
+ ' OnError("Ocurrió un error al generar el QR", ex)
+ ' End Try
+ ' Retorno = ""
+ ' Else
+ ' Retorno = "No se pudo timbrar ante el SAT. UUID no generado."
+ ' End If
+ ' sw.Stop()
+ ' swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
+ ' swmili = sw.ElapsedMilliseconds
+ ' sw.Start()
+
+ 'Else
+ ' Retorno = cfdi.MensajeError
+ ' MensajeErrorCFDI = cfdi.MensajeError
+ ' If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
+
+ ' End If
+ End If
+
+#End Region
+ GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial)
+ Return Retorno
+ End Function
+
Public Sub GuardaLogTimbrado(Str As String, CvePAC As Integer)
Dim ArchivoW As StreamWriter
Dim strLineaTMP As String
diff --git a/Bancos/IE.aspx.vb b/Bancos/IE.aspx.vb
index 63a198a2d..598bfd446 100644
--- a/Bancos/IE.aspx.vb
+++ b/Bancos/IE.aspx.vb
@@ -1261,13 +1261,14 @@ Partial Class Bancos_IE
GvRH.DataBind()
UpGvRH.Update()
End Sub
- Private Sub CargaCorteCaja()
+ Private Sub CargaCorteCaja(CveCuenta As Integer)
'Checar si hay un Turno Abierto
Dim ObjPVenta As New ClsPuntoVenta
- If ObjPVenta.GetVta_Cortes("-1", "-1", UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, 0) Then
- If ObjPVenta.DtResultados.Rows.Count > 0 Then
- CveCorte = ObjPVenta.CveCorte
- End If
+
+ If ObjPVenta.GetCortesPorCuenta(CveCuenta, UsuarioActual.CveEmpresa) Then
+
+ CveCorte = ObjPVenta.CveCorte
+
End If
ObjPVenta.Dispose()
End Sub
@@ -1637,8 +1638,8 @@ Partial Class Bancos_IE
End If
'PAGAR NC CON C.CH DEBE DESCONTAR EN EL CORTE
- If UsuarioActual.TienePermisoProceso(160) AndAlso Opcion IsNot Nothing AndAlso Opcion = "DevDinV" AndAlso dr("CveTipoCuenta").ToString.ToEntero = 1 Then
- CargaCorteCaja()
+ If Opcion IsNot Nothing AndAlso Opcion = "DevDinV" AndAlso dr("CveTipoCuenta").ToString.ToEntero = 1 Then
+ CargaCorteCaja(DdlCuenta.SelectedValue.ToEntero)
End If
If dr("UsaTarjeta").ToString = "True" Then
diff --git a/Compras/Compras.aspx b/Compras/Compras.aspx
index b5bfea7dd..9d90e76a0 100644
--- a/Compras/Compras.aspx
+++ b/Compras/Compras.aspx
@@ -5158,7 +5158,7 @@
-
+