diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb
index 67b6f6e60..eba50dc53 100644
--- a/Inventarios/TraspasoAlmacen.aspx.vb
+++ b/Inventarios/TraspasoAlmacen.aspx.vb
@@ -897,6 +897,11 @@ Partial Class Inventarios_TraspasoAlmacen
RealizarMovimientoVirtual = True
End If
+ 'SI VA PASAR POR EL ALMACEN TRANSITORIO, DEBE TRASPASAR LOS VIRTUALES AHI PRIMERO
+ If ChkTransitorio.Checked Then
+ CveAlmacenVirtualEntrada = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacenTransitorio.SelectedValue.ToEntero).FiltroPrimero("")("CveAlmacenVirtual").ToString().ToEntero()
+ End If
+
'VALIDA ALMACEN DISTINTA SUCURSAL DEBE SER TRANSITORIO
If Not UsuarioActual.CveEmpresa.Contiene(7, 140) Then '[IPP] EMPRESA VIGILANCIA NO OCUPA TRANSITORIOS - TIENEN MIL SUCURSALES Xd
If Not ChkTransitorio.Checked Then
@@ -1920,7 +1925,7 @@ Partial Class Inventarios_TraspasoAlmacen
If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then
Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=GvDatosRecepcion.Rows(0).DataKey("CveAlmacenSalida").ToEntero).FiltroPrimeroValor("CveAlmacenVirtual", "").ToEntero()
- Dim CveAlmacenVirtualSalida As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=GvDatosRecepcion.Rows(0).DataKey("CveAlmacenDestino").ToEntero).FiltroPrimeroValor("CveAlmacenVirtual", "").ToEntero()
+ Dim CveAlmacenVirtualSalida As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenTransitorio).FiltroPrimeroValor("CveAlmacenVirtual", "").ToEntero()
'SI EL ALMACEN ORIGEN ES DE APOPYO LOGISTICO EL ALMACEN VIRTUAL DEBE SER DE APOYO LOGISTICO
'Dim CveAlmacenVirtual As Integer = -1
@@ -1993,9 +1998,9 @@ Partial Class Inventarios_TraspasoAlmacen
End If
- Else
- TextoError = "La Sucursal no tiene creado un almacen virtual"
- ErrorMovInv = True
+ 'Else
+ ' TextoError = "La Sucursal no tiene creado un almacen virtual"
+ ' ErrorMovInv = True
End If
diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb
index 3b5a20ef5..c01610754 100644
--- a/Ventas/ClientesAbonar.aspx.vb
+++ b/Ventas/ClientesAbonar.aspx.vb
@@ -786,7 +786,7 @@ Partial Class Ventas_ClientesAbonar
Dim SeriesPago As New List(Of String)
Dim MsgError As String = ""
- Dim NCGeneradas As New List(Of Modelos.Factura.MMensajeFactura)
+ Dim NCGeneradas As New List(Of RespuestaNotaCredrito)
Dim ListaFacturasGenerarNC As New List(Of Modelos.Factura)
Dim ImporteSeleccionado As Decimal = 0
@@ -1563,13 +1563,14 @@ Partial Class Ventas_ClientesAbonar
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso MsgError = "" Then
If MsgError = "" Then
If ListaFacturasGenerarNC.Count > 0 Then
+
For Each Fac As Modelos.Factura In ListaFacturasGenerarNC
Dim ListaNC As New List(Of Modelos.Factura)
ListaNC.Add(Fac)
- Dim Resp As Modelos.Factura.MMensajeFactura = GenerarNC(ObjIE.IniciaTransacSQL(), ObjConta, ListaNC)
+ Dim Resp = GenerarNC(ObjIE.IniciaTransacSQL(), ObjConta, ListaNC)
- If Resp.CveVenta > 0 Then
+ If Resp IsNot Nothing AndAlso Resp.Respuesta IsNot Nothing AndAlso Resp.Respuesta.CveVenta > 0 Then
NCGeneradas.Add(Resp)
Else
MsgError = "No se pudo generar la nota de crédito"
@@ -1691,8 +1692,20 @@ Partial Class Ventas_ClientesAbonar
Dim TextoComplementoPago = EmitirComplementoPago(CveIE, CveVentasPago, SeriesPago)
- For Each NC In NCGeneradas
- StrMsg.AppendFormat("Nota de crédito generada correctamente.
Folio: {1}
", NC.CveVenta, NC.SerieFolio)
+ For Each RespuestaNotaCredito In NCGeneradas
+ If RespuestaNotaCredito IsNot Nothing AndAlso RespuestaNotaCredito.Respuesta IsNot Nothing Then
+ Try
+ Dim ObjTimbradoNC As New Timbrado
+ Dim TimbroNC = ObjTimbradoNC.TimbrarFactura(UsuarioActual, RespuestaNotaCredito.ObjFacturaNC)
+ If Not TimbroNC Then
+ Alert(ObjTimbradoNC.MensajeErrorCFDI, TipoMensaje.MsgError)
+ End If
+ ObjTimbradoNC = Nothing
+ Catch ex As Exception
+ OnError("Ocurrió un error al timbrar la NC.", ex)
+ End Try
+ StrMsg.AppendFormat("Nota de crédito generada correctamente.
Folio: {1}
", RespuestaNotaCredito.Respuesta.CveVenta, RespuestaNotaCredito.Respuesta.SerieFolio)
+ End If
Next
Alert($"{StrMsg.ToString}
{TextoComplementoPago}", TipoMensaje.MsgInformacion, If(ChkSeguirRegistrando.Checked, "location.href =""#""", "location.href =""/Bancos/RepCxCCliente.aspx"""))
@@ -1741,177 +1754,335 @@ Partial Class Ventas_ClientesAbonar
End Function
#Region " N O T A - D E - C R E D I T O"
+ Private Class RespuestaNotaCredrito
+ Public Property ObjFacturaNC As Modelos.Factura
+ Public Property Respuesta As Modelos.Factura.MMensajeFactura
+ End Class
- Private Function GenerarNC(SqlTransaccion As SqlClient.SqlTransaction, ObjConta As ClsContPAQi, ListaVentasGenerarNC As List(Of Modelos.Factura)) As Modelos.Factura.MMensajeFactura
- Dim ObjFacturaDevolucion = New Modelos.Factura(UsuarioActual)
- ObjFacturaDevolucion.TipoMensajeRespuesta = Modelos.TipoMensajeRespuesta.HTML
- ObjFacturaDevolucion.CveUsuario = UsuarioActual.CveUsuario
- ObjFacturaDevolucion.UsuarioCreo = UsuarioActual.Usuario
+ Private Function GenerarNC(SqlTransaccion As SqlClient.SqlTransaction, ObjConta As ClsContPAQi, ListaVentasGenerarNC As List(Of Modelos.Factura)) As RespuestaNotaCredrito
+ Dim Retorno As New RespuestaNotaCredrito()
+ Try
- Dim CveSubProyecto As Integer = Me.CveSubProyecto
- Dim CveMoneda As Integer = Me.CveMoneda
- Dim CveCliente As Integer = Me.CveCliente
+ Dim ObjFacturaDevolucion = New Modelos.Factura(UsuarioActual)
+ ObjFacturaDevolucion.TipoMensajeRespuesta = Modelos.TipoMensajeRespuesta.HTML
+ ObjFacturaDevolucion.CveUsuario = UsuarioActual.CveUsuario
+ ObjFacturaDevolucion.UsuarioCreo = UsuarioActual.Usuario
- If CveSubProyecto <= 0 Then
- CveSubProyecto = ListaVentasGenerarNC(0).CveSubProyecto
- End If
-
- If CveMoneda <= 0 Then
- CveMoneda = ListaVentasGenerarNC(0).CveMoneda
- End If
-
- If CveCliente <= 0 Then
- CveCliente = ListaVentasGenerarNC(0).CveCliente
- End If
-
- Dim Folio As Integer = -1
- Dim Serie As String = "-1"
-
-
- ObjFacturaDevolucion.CveEmpresa = UsuarioActual.CveEmpresa
- ObjFacturaDevolucion.TipoCambio = If(Me.CveMoneda = 1, 1, GlobalTipoCambio(Now).FormatoNumero(4).ToDecimal())
- ObjFacturaDevolucion.ConvertirPesos = False
- ObjFacturaDevolucion.CveMoneda = CveMoneda
- ObjFacturaDevolucion.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {CveMoneda}")
- ObjFacturaDevolucion.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {CveMoneda}")
- ObjFacturaDevolucion.Serie = Serie
- ObjFacturaDevolucion.Folio = Folio
- ObjFacturaDevolucion.Fecha = Now
- ObjFacturaDevolucion.CvePrePoliza = -1
- ObjFacturaDevolucion.CveMetodoPago = 0
- ObjFacturaDevolucion.CondicionesPago = 0 ' 0 - Contado, 1 - Credito (CHECAR)
- ObjFacturaDevolucion.FormaPago = 0
-
- ObjFacturaDevolucion.TipoDocto = "Egs"
- ObjFacturaDevolucion.Fecha = Now
-
- ObjFacturaDevolucion.Version = "3.3"
- ObjFacturaDevolucion.CveMetodoPago33 = 1
- ObjFacturaDevolucion.MetodoPago33 = "Pago en una sola exhibición"
- ObjFacturaDevolucion.ClaveMetodoPagoSAT = "PUE"
-
- ObjFacturaDevolucion.CveFormaPago33 = 21
- ObjFacturaDevolucion.FormaPago33 = "Aplicación de anticipos"
- ObjFacturaDevolucion.FormaPagoSAT33 = "30"
-
- ObjFacturaDevolucion.MetodoPago = ""
- ObjFacturaDevolucion.ClaveMetodoPagoSAT = GlobalDTMetodosPago.FiltroPrimeroValor("ClaveSAT", $"CveMetodoPago = {ObjFacturaDevolucion.CveMetodoPago33}")
-
- ObjFacturaDevolucion.CveSubProyecto = CveSubProyecto
- ObjFacturaDevolucion.SetSubProyecto()
-
- ObjFacturaDevolucion.CveCliente = CveCliente
- ObjFacturaDevolucion.SetCliente()
-
- Dim ObjCliente As New ClsClientes
- If ObjCliente.GetClientes(ObjFacturaDevolucion.CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then
- If ObjCliente.DtResultados.Rows.Count > 0 Then
-
- ObjFacturaDevolucion.CveUsoCFDI = ObjCliente.CveUsoCFDI
- ObjFacturaDevolucion.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI))
- ObjFacturaDevolucion.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI))
-
- ObjFacturaDevolucion.DtDetalle = CreaDTDetalleNC()
-
- CargaImpuestos(ObjFacturaDevolucion, ListaVentasGenerarNC, ObjCliente.DesglosaIEPS, ObjCliente.RetIVA, ObjCliente.RetISR)
+ Dim CveSubProyecto As Integer = Me.CveSubProyecto
+ Dim CveMoneda As Integer = Me.CveMoneda
+ Dim CveCliente As Integer = Me.CveCliente
+ If CveSubProyecto <= 0 Then
+ CveSubProyecto = ListaVentasGenerarNC(0).CveSubProyecto
End If
- End If
- If ObjCliente.GetSucursales(CveCliente) Then
- If ObjCliente.DtResultados.Rows.Count > 0 Then
- ObjFacturaDevolucion.CveClienteSucursal = If(String.IsNullOrEmpty(ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'")), -1, ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'").ToEntero())
+ If CveMoneda <= 0 Then
+ CveMoneda = ListaVentasGenerarNC(0).CveMoneda
+ End If
+
+ If CveCliente <= 0 Then
+ CveCliente = ListaVentasGenerarNC(0).CveCliente
+ End If
+
+ Dim Folio As Integer = -1
+ Dim Serie As String = "-1"
+
+ ObjFacturaDevolucion.CveEmpresa = UsuarioActual.CveEmpresa
+ ObjFacturaDevolucion.TipoCambio = If(Me.CveMoneda = 1, 1, GlobalTipoCambio(Now).FormatoNumero(4).ToDecimal())
+ ObjFacturaDevolucion.ConvertirPesos = False
+ ObjFacturaDevolucion.CveMoneda = CveMoneda
+ ObjFacturaDevolucion.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {CveMoneda}")
+ ObjFacturaDevolucion.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {CveMoneda}")
+ ObjFacturaDevolucion.Serie = Serie
+ ObjFacturaDevolucion.Folio = Folio
+ ObjFacturaDevolucion.Fecha = Now
+ ObjFacturaDevolucion.CvePrePoliza = -1
+ ObjFacturaDevolucion.CveMetodoPago = 0
+ ObjFacturaDevolucion.CondicionesPago = 0 ' 0 - Contado, 1 - Credito (CHECAR)
+ ObjFacturaDevolucion.FormaPago = 0
+
+ ObjFacturaDevolucion.TipoDocto = "Egs"
+ ObjFacturaDevolucion.Fecha = Now
+
+ If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then
+ ObjFacturaDevolucion.Version = "4.0"
+
+ 'If ObjFacturaDevolucion.Cliente Is Nothing Then
+ ' ObjFacturaDevolucion.Cliente = New Modelos.ClienteModel
+ 'End If
+
+ 'ObjFacturaDevolucion.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal
+ 'ObjFacturaDevolucion.Cliente.RegimenFiscal = ClienteRegimenFiscal
Else
- ObjFacturaDevolucion.CveClienteSucursal = -1
+ ObjFacturaDevolucion.Version = "3.3"
End If
+
+ ObjFacturaDevolucion.CveMetodoPago33 = 1
+ ObjFacturaDevolucion.MetodoPago33 = "PUE - Pago en una sola exhibición"
+ ObjFacturaDevolucion.ClaveMetodoPagoSAT = "PUE"
+
+ ObjFacturaDevolucion.CveFormaPago33 = 21
+ ObjFacturaDevolucion.FormaPago33 = "30 - Aplicación de anticipos"
+ ObjFacturaDevolucion.FormaPagoSAT33 = "30"
+
+ ObjFacturaDevolucion.CveSubProyecto = CveSubProyecto
+ ObjFacturaDevolucion.SetSubProyecto()
+
+ ObjFacturaDevolucion.CveCliente = CveCliente
+ ObjFacturaDevolucion.SetCliente()
+
+ Dim ObjCliente As New ClsClientes
+ If ObjCliente.GetClientes(ObjFacturaDevolucion.CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then
+ If ObjCliente.DtResultados.Rows.Count > 0 Then
+
+ ObjFacturaDevolucion.CveUsoCFDI = ObjCliente.CveUsoCFDI
+ ObjFacturaDevolucion.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI))
+ ObjFacturaDevolucion.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI))
+
+ ObjFacturaDevolucion.DtDetalle = CreaDTDetalleNC()
+
+ CargaImpuestos(ObjFacturaDevolucion, ListaVentasGenerarNC, ObjCliente.DesglosaIEPS, ObjCliente.RetIVA, ObjCliente.RetISR)
+
+ End If
+ End If
+
+ If ObjCliente.GetSucursales(CveCliente) Then
+ If ObjCliente.DtResultados.Rows.Count > 0 Then
+ ObjFacturaDevolucion.CveClienteSucursal = If(String.IsNullOrEmpty(ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'")), -1, ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'").ToEntero())
+ Else
+ ObjFacturaDevolucion.CveClienteSucursal = -1
+ End If
+ End If
+ ObjCliente.Dispose()
+
+ ObjFacturaDevolucion.CveTipoRelacion = 1
+ ObjFacturaDevolucion.TipoRelacion = "01"
+ ObjFacturaDevolucion.DtVentasRelacionadas = New DataTable
+ ObjFacturaDevolucion.DtVentasRelacionadas.Columns.Add("CveVenta", GetType(Integer))
+
+ Dim Fol As New List(Of String)
+ For Each Fac In ListaVentasGenerarNC
+ Fol.Add(Fac.FolioFiscal)
+
+ Dim RowVenta As DataRow = ObjFacturaDevolucion.DtVentasRelacionadas.NewRow
+ RowVenta("CveVenta") = Fac.CveVenta
+
+ ObjFacturaDevolucion.DtVentasRelacionadas.Rows.Add(RowVenta)
+ Next
+
+ ObjFacturaDevolucion.UUIDRelacionados = Fol
+
+ Select Case ObjFacturaDevolucion.TipoDocto
+ Case "Ing"
+ ObjFacturaDevolucion.TipoDocumento = "Factura"
+ Case "REM"
+ ObjFacturaDevolucion.TipoDocumento = "Remision"
+ Case "Cot"
+ ObjFacturaDevolucion.TipoDocumento = "Cotizacion"
+ Case "Egs"
+ ObjFacturaDevolucion.TipoDocumento = "Nota de Crédito"
+ Case "Dev"
+ ObjFacturaDevolucion.TipoDocumento = "Nota de Devolución"
+ Case Else
+ ObjFacturaDevolucion.TipoDocumento = ""
+ End Select
+
+ ObjFacturaDevolucion.FechaPago = Now
+
+ ObjFacturaDevolucion.CveCorte = -1
+ ObjFacturaDevolucion.CveMesa = -1
+ ObjFacturaDevolucion.NumeroPersonas = 0
+ ObjFacturaDevolucion.CveContrato = -1
+ ObjFacturaDevolucion.DescripcionContrato = ""
+ ObjFacturaDevolucion.CveClienteSucursal = -1
+ ObjFacturaDevolucion.Entrega = ""
+ ObjFacturaDevolucion.CveAlmacen = -1
+
+ Dim DtVentasNC = InicializaDTVentasNC()
+
+ Dim TotalImporte As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("TotalImporte")
+ Dim ImporteIVA As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteIVA")
+ Dim ImporteRetIVA As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteRetIVA")
+ Dim ImporteRetISR As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteRetISR")
+ Dim ImporteIEPS As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteIEPS")
+ Dim Descuento As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("Descuento")
+ Dim Amortizacion As Decimal = 0
+
+ Dim Total As Decimal = (TotalImporte + ImporteIVA + ImporteIEPS) - (ImporteRetIVA + ImporteRetISR + Descuento + Amortizacion)
+
+ 'DETALLES
+ ObjFacturaDevolucion.SubTotal = TotalImporte
+ ObjFacturaDevolucion.Descuento = Descuento
+ ObjFacturaDevolucion.Amortizacion = Amortizacion
+ ObjFacturaDevolucion.IVA = ImporteIVA
+ ObjFacturaDevolucion.RetIVA = ImporteRetIVA
+ ObjFacturaDevolucion.RetISR = ImporteRetISR
+ ObjFacturaDevolucion.IEPS = ImporteIEPS
+ ObjFacturaDevolucion.Total = Total
+ ObjFacturaDevolucion.TotalOtrosConceptos = 0
+
+ For Each Fac In ListaVentasGenerarNC
+ Dim Drt = DtVentasNC.NewRow
+ Drt("CveVenta") = Fac.CveVenta
+ Drt("Importe") = Fac.DescuentoProntoPago
+ Drt("FolioFiscal") = Fac.FolioFiscal
+ DtVentasNC.Rows.Add(Drt)
+ Next
+
+ DtVentasNC.AcceptChanges()
+
+ ObjFacturaDevolucion.DtVentasNC = DtVentasNC
+
+ ObjFacturaDevolucion.Timbre = PreParaTimbre(ObjFacturaDevolucion, ListaVentasGenerarNC)
+
+ Try
+ Dim Resp = ObjFacturaDevolucion.EmitirFactura(False, Transac:=SqlTransaccion, ObjContPaqTransac:=ObjConta)
+ Retorno.Respuesta = Resp
+ Catch ex As Exception
+ OnError("Ocurrió un error al guardar la NC de pronto pago", ex)
+ Retorno.Respuesta = Nothing
+ End Try
+ Retorno.ObjFacturaNC = ObjFacturaDevolucion
+
+ Catch ex As Exception
+ OnError("Ocurrió un error al generar la NC de pronto pago", ex)
+ Retorno = Nothing
+ End Try
+
+ Return Retorno
+
+ End Function
+
+ Private Function PreParaTimbre(Obj As Modelos.Factura, ListaVentasGenerarNC As List(Of Modelos.Factura)) As CFDITimbre
+ Dim Timbre As New CFDITimbre
+ Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", ""))
+ Timbre.Comprobante.Folio = Obj.Folio.ToString()
+ Timbre.Comprobante.Serie = Obj.Serie
+ Timbre.Comprobante.Fecha = Obj.FechaCP
+ Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33
+ Timbre.Comprobante.CondicionesdePago = Obj.FormaPago33
+ Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT
+ Timbre.Comprobante.SubTotal = Obj.SubTotal
+ Timbre.Comprobante.Descuentos = Obj.Descuento
+ Timbre.Comprobante.Moneda = Obj.MonedaSAT
+ Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString())
+ Timbre.Comprobante.Total = Obj.Total
+
+ Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP
+ If Timbre.Comprobante.LugarExpedicion = "" Then
+ Dim aa As String = "no se guardo lugar de expedicion"
+ aa.GuardaLog()
End If
- ObjCliente.Dispose()
- ObjFacturaDevolucion.CveTipoRelacion = 7
- ObjFacturaDevolucion.TipoRelacion = "07"
- ObjFacturaDevolucion.DtVentasRelacionadas = New DataTable
- ObjFacturaDevolucion.DtVentasRelacionadas.Columns.Add("CveVenta", GetType(Integer))
+ Timbre.Comprobante.Confirmacion = ""
- Dim Fol As New List(Of String)
- For Each Fac In ListaVentasGenerarNC
- Fol.Add(Fac.FolioFiscal)
+ If Obj.FacturarSucursal Then
+ Timbre.Receptor.RFC = Obj.ClienteSucursal.RFC
+ Timbre.Receptor.Nombre = Obj.ClienteSucursal.Nombre
+ Timbre.Receptor.DomicilioFiscalReceptor = Obj.ClienteSucursal.CP
+ Else
+ Timbre.Receptor.RFC = Obj.Cliente.RFC
+ If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then
+ Timbre.Receptor.Nombre = Obj.Cliente.Nombre
+ Else
+ Timbre.Receptor.Nombre = Obj.Cliente.Nombre + " " + Obj.Cliente.RegimenSociedad
+ End If
+ Timbre.Receptor.DomicilioFiscalReceptor = Obj.Cliente.CP
+ End If
- Dim RowVenta As DataRow = ObjFacturaDevolucion.DtVentasRelacionadas.NewRow
- RowVenta("CveVenta") = Fac.CveVenta
+ Timbre.Receptor.RegimenFiscalReceptor = Obj.Cliente.CodigoRegimenFiscal
- ObjFacturaDevolucion.DtVentasRelacionadas.Rows.Add(RowVenta)
+ Timbre.Receptor.ResidenciaFiscal = ""
+ Timbre.Receptor.NumeroRegistroTributario = ""
+ Timbre.Receptor.UsoCFDI = Obj.ClaveUsoCFDI
+
+ If ListaVentasGenerarNC IsNot Nothing Then
+ Timbre.CFDIRelacionados.UUID.Clear()
+
+ Dim RowTipoRelacion As DataRow = GlobalDTVtaTiposRelacion().FiltroPrimero($"CveTipoRelacion = {Obj.CveTipoRelacion}")
+
+ Timbre.CFDIRelacionados.TipoRelacion = RowTipoRelacion("SATClaveTipoRelacion").ToString()
+ Timbre.CFDIRelacionados.TipoRelacionTexto = RowTipoRelacion("SATTipoRelacion").ToString()
+
+ For Each Fac In ListaVentasGenerarNC
+ Timbre.CFDIRelacionados.UUID.Add(Fac.FolioFiscal)
+ Next
+ End If
+
+ Dim totSubTotal As Decimal = If(UsuarioActual.Empresa.CvePAC = 3, Obj.DtDetalle.SUMD("Total"), Obj.SubTotal) 'Obj.SubTotal
+ Dim totIVA As Decimal = Obj.IVA
+ Dim totRetIVA As Decimal = Obj.RetIVA
+ Dim totRetISR As Decimal = Obj.RetISR
+
+ Dim i As Integer = 1
+
+ 'detalles
+ Dim tPS As String = ""
+
+ For Each drr As DataRow In Obj.DtDetalle.Rows
+ If drr("PS").ToString().Length = 1 Then
+ tPS = drr("Obs").ToString()
+ Else
+ If drr("PS").ToString().Length = 0 Then
+ tPS = ""
+ Else
+ tPS = String.Format("{0} {1}", drr("PS"), drr("Obs"))
+ End If
+ End If
+
+ tPS = tPS.Replace("|", " ")
+
+ If tPS.Length >= 1000 Then
+ Dim tPSRecortado = tPS.Remove(999, tPS.Length - 999)
+ tPS = tPSRecortado
+ End If
+
+ 'condicionante, especial
+ If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" ' les comentan que no debe de ir la etiqueta de "unidad" en el producto
+
+ Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString().ToDecimal,
+ .Descripcion = tPS,
+ .ValorUnitario = drr("PU").ToString().ToDecimal,
+ .Importe = If(UsuarioActual.Empresa.CvePAC = 3, drr("Total").ToString().ToDecimal.RoundSQL(2), drr("TotalImporte").ToString().ToDecimal),
+ .Descuento = drr("Descuento").ToString().ToDecimal.RoundSQL(2),
+ .Unidad = drr("UM").ToString(),
+ .ClaveUnidad = drr("SATClaveUM").ToString(),
+ .ClaveProdServ = drr("SATClaveProdServ").ToString(),
+ .Noidentificacion = drr("Noidentificacion").ToString(),
+ .CuentaPredial = drr("CuentaPredial").ToString(),
+ .ImporteGravaIVAAdicional = drr("ImporteIEPS").ToString().ToDecimal,
+ .ObjetoImpuesto = drr("CodigoObjetoImpuesto").ToString()}
+ 'verifica suma subtotales
+ If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal.RoundSQL(2) <> concepto.Importe.RoundSQL(2) AndAlso Math.Abs(totSubTotal.RoundSQL(2) - concepto.Importe.RoundSQL(2)) <= 0.01 Then 'proceso de ajusta de decimales
+ concepto.Importe = totSubTotal
+ End If
+ totSubTotal = totSubTotal - concepto.Importe
+
+ 'siempre estaremos agregando el iva, auqnue sea en importe cero o tasa cero, para que se emita la factura
+ ' If drr("ImporteIVA").ToString().ToDouble > 0 Then
+
+ 'si es ingreso amortizado por la totalidad, y arroja el valor total de cero, no debe de impuestos, y si la BASE de calculo es mayor a cero
+ If Timbre.Comprobante.Total > 0 AndAlso concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional > 0 Then
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(6), .TasaOCuota = drr("PorcentajeIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString().ToDecimal})
+ End If
+
+ If drr("ImporteIEPS").ToString().ToDouble > 0 Then
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeIEPS").ToString().ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString().ToDecimal})
+ End If
+
+ If drr("ImporteRetIVA").ToString().ToDouble > 0 Then 'si hay retenciones
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString().ToDecimal})
+ End If
+
+ If drr("ImporteRetISR").ToString().ToDouble > 0 Then 'retención de ISR
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetISR").ToString().ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString().ToDecimal})
+ End If
+
+ Timbre.Conceptos.Add(concepto)
+ i += 1
Next
- ObjFacturaDevolucion.UUIDRelacionados = Fol
-
- Select Case ObjFacturaDevolucion.TipoDocto
- Case "Ing"
- ObjFacturaDevolucion.TipoDocumento = "Factura"
- Case "REM"
- ObjFacturaDevolucion.TipoDocumento = "Remision"
- Case "Cot"
- ObjFacturaDevolucion.TipoDocumento = "Cotizacion"
- Case "Egs"
- ObjFacturaDevolucion.TipoDocumento = "Nota de Crédito"
- Case "Dev"
- ObjFacturaDevolucion.TipoDocumento = "Nota de Devolución"
- Case Else
- ObjFacturaDevolucion.TipoDocumento = ""
- End Select
-
- ObjFacturaDevolucion.FechaPago = Now
-
- ObjFacturaDevolucion.CveCorte = -1
- ObjFacturaDevolucion.CveMesa = -1
- ObjFacturaDevolucion.NumeroPersonas = 0
- ObjFacturaDevolucion.CveContrato = -1
- ObjFacturaDevolucion.DescripcionContrato = ""
- ObjFacturaDevolucion.CveClienteSucursal = -1
- ObjFacturaDevolucion.Entrega = ""
- ObjFacturaDevolucion.CveAlmacen = -1
-
- Dim DtVentasNC = InicializaDTVentasNC()
-
- Dim TotalImporte As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("TotalImporte")
- Dim ImporteIVA As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteIVA")
- Dim ImporteRetIVA As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteRetIVA")
- Dim ImporteRetISR As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteRetISR")
- Dim ImporteIEPS As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("ImporteIEPS")
- Dim Descuento As Decimal = ObjFacturaDevolucion.DtDetalle.SUMD("Descuento")
- Dim Amortizacion As Decimal = 0
-
- Dim Total As Decimal = (TotalImporte + ImporteIVA + ImporteIEPS) - (ImporteRetIVA + ImporteRetISR + Descuento + Amortizacion)
-
- 'DETALLES
- ObjFacturaDevolucion.SubTotal = TotalImporte
- ObjFacturaDevolucion.Descuento = Descuento
- ObjFacturaDevolucion.Amortizacion = Amortizacion
- ObjFacturaDevolucion.IVA = ImporteIVA
- ObjFacturaDevolucion.RetIVA = ImporteRetIVA
- ObjFacturaDevolucion.RetISR = ImporteRetISR
- ObjFacturaDevolucion.IEPS = ImporteIEPS
- ObjFacturaDevolucion.Total = Total
- ObjFacturaDevolucion.TotalOtrosConceptos = 0
-
- For Each Fac In ListaVentasGenerarNC
- Dim Drt = DtVentasNC.NewRow
- Drt("CveVenta") = Fac.CveVenta
- Drt("Importe") = Fac.DescuentoProntoPago
- Drt("FolioFiscal") = Fac.FolioFiscal
- DtVentasNC.Rows.Add(Drt)
- Next
-
- DtVentasNC.AcceptChanges()
-
- ObjFacturaDevolucion.DtVentasNC = DtVentasNC
-
- Dim Resp = ObjFacturaDevolucion.EmitirFactura(False, Transac:=SqlTransaccion, ObjContPaqTransac:=ObjConta)
-
- ObjFacturaDevolucion.Dispose()
-
-
- Return Resp
-
+ Return Timbre
End Function
@@ -1978,7 +2149,10 @@ Partial Class Ventas_ClientesAbonar
Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle
Row("CveVentaDetalleRemision") = CveVentaDetalleRemision
Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion
-
+ Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("")
+ If DrPS IsNot Nothing Then
+ Row("CodigoObjetoImpuesto") = DrPS("CodigoObjetoImpuesto")
+ End If
TmpDT.Rows.Add(Row)
End Sub
@@ -2196,6 +2370,7 @@ Partial Class Ventas_ClientesAbonar
TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", GetType(String))
TmpDT.Columns.Add("CveTamaño", GetType(Integer))
TmpDT.Columns.Add("EsCargo", GetType(Boolean))
+ TmpDT.Columns.Add("CodigoObjetoImpuesto", GetType(String))
Return TmpDT
End Function
diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb
index e2f241f6b..702b2b7b4 100644
--- a/Ventas/Ventas.aspx.vb
+++ b/Ventas/Ventas.aspx.vb
@@ -7777,6 +7777,11 @@ Partial Class Ventas
e.Row.FCLiteral("LtCantidadFacturada").Text = e.Row.DBCampo("CantidadFacturadaPed2").ToDecimal.ToString("#,##0.##")
End Select
+ If EsCreaApartirDe Then
+ e.Row.FCLinkButton("imgD").Visible = True
+ e.Row.FCLinkButton("imgE").Visible = True
+ End If
+
'If GvInv.Rows.Count > 0 AndAlso ModalidadEdicion AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso e.Row.DataKey("CveVentaDetalle").ToString().ToEntero() > 0 Then
' e.Row.FCLinkButton("imgE").Enabled = False
' e.Row.FCLinkButton("imgE").ToolTip = "No se puede editar debido a que ya hay un movimiento de almacen."
@@ -33201,6 +33206,15 @@ Partial Class Ventas
UpFacturar.Update()
End If
ObjVentas.Dispose()
+
+ 'REGENERAR EL PDF
+ Try
+ Dim strURLHOST = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port)
+ Dim Hilo As New System.Threading.Thread(Sub() RegenerarPDF(CveVenta, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, strURLHOST))
+ Hilo.Start()
+ Catch ex As Exception
+ OnError("Ocurrió un error al regenerar el PDF", ex)
+ End Try
End Sub
Private Function DeshabilitarAplicarNotaDeCredito(RFC As String) As Boolean