--GDiaz: forzar dev almacen al cancelar
This commit is contained in:
@@ -5664,16 +5664,16 @@ Namespace Modelos
|
|||||||
''' <param name="RealizarDevolucionAlmacen"></param>
|
''' <param name="RealizarDevolucionAlmacen"></param>
|
||||||
''' <param name="ListaRemisionesCancelar"></param>
|
''' <param name="ListaRemisionesCancelar"></param>
|
||||||
''' <returns></returns>
|
''' <returns></returns>
|
||||||
Public Function CancelarFactura(RealizarDevolucionAlmacen As Integer, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0, Optional CancelarBoletos As Boolean = False, Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False) As MCancelacionVentaMensaje
|
Public Function CancelarFactura(RealizarDevolucionAlmacen As Integer, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0, Optional CancelarBoletos As Boolean = False, Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False, Optional ForzarDevolucion As Boolean = False) As MCancelacionVentaMensaje
|
||||||
'Comprobante emitido con errores sin relación
|
'Comprobante emitido con errores sin relación
|
||||||
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GeneraIxCconPago)
|
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GeneraIxCconPago, ForzarDevolucion:=ForzarDevolucion)
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Integer = 0,
|
Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Integer = 0,
|
||||||
Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1, Optional FechaCancelacion As String = "-1",
|
Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1, Optional FechaCancelacion As String = "-1",
|
||||||
Optional AcuseCancelacion As String = "", Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "",
|
Optional AcuseCancelacion As String = "", Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "",
|
||||||
Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0,
|
Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0,
|
||||||
Optional CancelarBoletos As Boolean = False, Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False) As MCancelacionVentaMensaje
|
Optional CancelarBoletos As Boolean = False, Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False, Optional ForzarDevolucion As Boolean = False) As MCancelacionVentaMensaje
|
||||||
Dim Retorno As New MCancelacionVentaMensaje()
|
Dim Retorno As New MCancelacionVentaMensaje()
|
||||||
Dim ErrorList As New List(Of String)
|
Dim ErrorList As New List(Of String)
|
||||||
|
|
||||||
@@ -6185,275 +6185,398 @@ Namespace Modelos
|
|||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
Dim MoverInventario As Boolean = False
|
||||||
|
|
||||||
|
If TieneAlmacen Then
|
||||||
|
MoverInventario = (Not EsRefacturacion AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23)) AndAlso CveEstatusRefacturacion = 0) OrElse ForzarDevolucion
|
||||||
|
End If
|
||||||
|
|
||||||
'CUANDO LA CANCELACION ESTA EN PROCESO NO DEBE REALIZAR NADA DE ESTE PROCESO
|
'CUANDO LA CANCELACION ESTA EN PROCESO NO DEBE REALIZAR NADA DE ESTE PROCESO
|
||||||
If Not ErrorCancelar AndAlso Not EsRefacturacion AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23)) AndAlso CveEstatusRefacturacion = 0 Then
|
If Not ErrorCancelar AndAlso MoverInventario Then
|
||||||
|
|
||||||
'DEVOLUCION DE ALMACEN
|
'DEVOLUCION DE ALMACEN
|
||||||
If Not ErrorCancelar AndAlso TieneAlmacen Then
|
Dim TieneSalida As Boolean = False
|
||||||
Dim TieneSalida As Boolean = False
|
Dim DtInventario As DataTable = Nothing
|
||||||
Dim DtInventario As DataTable = Nothing
|
Dim DtSalidas As DataTable = Nothing
|
||||||
Dim DtSalidas As DataTable = Nothing
|
Dim DtVirtuales As DataTable = Nothing
|
||||||
Dim DtVirtuales As DataTable = Nothing
|
Dim DtDevPrevias As DataTable = Nothing
|
||||||
Dim DtDevPrevias As DataTable = Nothing
|
Dim DtDevoluciones As DataTable = Nothing
|
||||||
Dim DtDevoluciones As DataTable = Nothing
|
Dim DtExistencias As DataTable = Nothing
|
||||||
Dim DtExistencias As DataTable = Nothing
|
Dim DtRemisionesFacturadas As DataTable = Nothing
|
||||||
Dim DtRemisionesFacturadas As DataTable = Nothing
|
|
||||||
|
|
||||||
'CUANDO SE VAYA A REALIZAR LA DEVOLUCION AQUI DEBE MARCALA PARA NO SOLICITARLA DE NUEVO, SI NO LA SOLICITARA
|
'CUANDO SE VAYA A REALIZAR LA DEVOLUCION AQUI DEBE MARCALA PARA NO SOLICITARLA DE NUEVO, SI NO LA SOLICITARA
|
||||||
If ObjFactura.EsDevolucionVenta = 0 Then
|
If ObjFactura.EsDevolucionVenta = 0 Then
|
||||||
Dim EstatusDevolucion As Integer = 1
|
Dim EstatusDevolucion As Integer = 1
|
||||||
If Not ObjVentas.UpdateVentasDevolucionAlmacen(EstatusDevolucion, CveVenta) Then
|
If Not ObjVentas.UpdateVentasDevolucionAlmacen(EstatusDevolucion, CveVenta) Then
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
MensajeError = "Ocurrió un error al solicitar la devolución de almacen."
|
MensajeError = "Ocurrió un error al solicitar la devolución de almacen."
|
||||||
End If
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
Dim Filtro As String = ""
|
||||||
|
Dim FiltroDevAlmacen As String = ""
|
||||||
|
Dim FiltroEntradaUsados As String = ""
|
||||||
|
|
||||||
|
Select Case ObjFactura.TipoDocto
|
||||||
|
Case "Ing"
|
||||||
|
Filtro = "CveConcepto IN (3, 40)"
|
||||||
|
FiltroDevAlmacen = "CveConcepto IN (18, 41)"
|
||||||
|
Case "Dev"
|
||||||
|
Filtro = "CveConcepto = 18"
|
||||||
|
Case Else
|
||||||
|
Filtro = "CveConcepto = 9"
|
||||||
|
'VERIFICA SI TIENE ENTRADAS DE USADOS TAMBIEN
|
||||||
|
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ObjFactura.TipoDocto = "Rem" Then
|
||||||
|
FiltroEntradaUsados = "CveConcepto = 42"
|
||||||
|
End If
|
||||||
|
End Select
|
||||||
|
|
||||||
|
'CARGA REMISIONES DE LA VENTA DEVUELTA
|
||||||
|
If ObjInventario.GetDevolucionRemisionesFacturadas(CveVenta) Then
|
||||||
|
DtRemisionesFacturadas = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen > 0")
|
||||||
|
Else
|
||||||
|
ErrorCancelar = True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Not ErrorCancelar Then
|
If Not ErrorCancelar Then
|
||||||
Dim Filtro As String = ""
|
If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
Dim FiltroDevAlmacen As String = ""
|
DtInventario = ObjInventario.DtResultados.Copy()
|
||||||
Dim FiltroEntradaUsados As String = ""
|
DtSalidas = DtInventario.FiltraParametros($"CvePS IS NULL AND {Filtro}")
|
||||||
|
|
||||||
Select Case ObjFactura.TipoDocto
|
If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then
|
||||||
Case "Ing"
|
DtVirtuales = DtInventario.FiltraParametros($"CvePS IS NULL AND CveConcepto = 37")
|
||||||
Filtro = "CveConcepto IN (3, 40)"
|
If ObjFactura.TipoDocto = "Dev" Then
|
||||||
FiltroDevAlmacen = "CveConcepto IN (18, 41)"
|
DtVirtuales = DtInventario.FiltraParametros($"CvePS IS NULL AND CveConcepto = 36")
|
||||||
Case "Dev"
|
|
||||||
Filtro = "CveConcepto = 18"
|
|
||||||
Case Else
|
|
||||||
Filtro = "CveConcepto = 9"
|
|
||||||
'VERIFICA SI TIENE ENTRADAS DE USADOS TAMBIEN
|
|
||||||
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ObjFactura.TipoDocto = "Rem" Then
|
|
||||||
FiltroEntradaUsados = "CveConcepto = 42"
|
|
||||||
End If
|
End If
|
||||||
End Select
|
End If
|
||||||
|
|
||||||
'CARGA REMISIONES DE LA VENTA DEVUELTA
|
If ObjFactura.TipoDocto = "Ing" Then
|
||||||
If ObjInventario.GetDevolucionRemisionesFacturadas(CveVenta) Then
|
DtDevPrevias = DtInventario.FiltraParametros($"CvePS IS NULL AND {FiltroDevAlmacen}")
|
||||||
DtRemisionesFacturadas = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen > 0")
|
End If
|
||||||
|
|
||||||
|
DtExistencias = DtInventario.FiltraParametros($"CvePS IS NOT NULL AND {Filtro} AND CveTipoPS = 2")
|
||||||
|
TieneSalida = DtExistencias.Rows.Count > 0
|
||||||
|
|
||||||
|
'VERIFICA SI SOLO TIENE CARGA DE USADOS EN CASO DE NO TENER SALIDAS DE ALMACEN
|
||||||
|
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ObjFactura.TipoDocto = "Rem" Then
|
||||||
|
FiltroEntradaUsados = "CveConcepto = 42"
|
||||||
|
If Not TieneSalida Then
|
||||||
|
TieneSalida = DtInventario.FiltraParametros($"CvePS IS NOT NULL AND {FiltroEntradaUsados}").Rows.Count > 0
|
||||||
|
End If
|
||||||
|
End If
|
||||||
Else
|
Else
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then
|
|
||||||
DtInventario = ObjInventario.DtResultados.Copy()
|
|
||||||
DtSalidas = DtInventario.FiltraParametros($"CvePS IS NULL AND {Filtro}")
|
|
||||||
|
|
||||||
If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then
|
|
||||||
DtVirtuales = DtInventario.FiltraParametros($"CvePS IS NULL AND CveConcepto = 37")
|
|
||||||
If ObjFactura.TipoDocto = "Dev" Then
|
|
||||||
DtVirtuales = DtInventario.FiltraParametros($"CvePS IS NULL AND CveConcepto = 36")
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
If ObjFactura.TipoDocto = "Ing" Then
|
|
||||||
DtDevPrevias = DtInventario.FiltraParametros($"CvePS IS NULL AND {FiltroDevAlmacen}")
|
|
||||||
End If
|
|
||||||
|
|
||||||
DtExistencias = DtInventario.FiltraParametros($"CvePS IS NOT NULL AND {Filtro} AND CveTipoPS = 2")
|
|
||||||
TieneSalida = DtExistencias.Rows.Count > 0
|
|
||||||
|
|
||||||
'VERIFICA SI SOLO TIENE CARGA DE USADOS EN CASO DE NO TENER SALIDAS DE ALMACEN
|
|
||||||
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ObjFactura.TipoDocto = "Rem" Then
|
|
||||||
FiltroEntradaUsados = "CveConcepto = 42"
|
|
||||||
If Not TieneSalida Then
|
|
||||||
TieneSalida = DtInventario.FiltraParametros($"CvePS IS NOT NULL AND {FiltroEntradaUsados}").Rows.Count > 0
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
Else
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Not ErrorCancelar AndAlso TieneSalida Then
|
End If
|
||||||
|
|
||||||
If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen = 1 Then
|
If Not ErrorCancelar AndAlso TieneSalida Then
|
||||||
'REALIZA DEVOLUCION A LAS SALIDAS PENDIENTES
|
If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen = 1 Then
|
||||||
If Not ObjFactura.TipoDocto.Contiene("Rem", "Ped") Then
|
'REALIZA DEVOLUCION A LAS SALIDAS PENDIENTES
|
||||||
For Each RowMovimiento As DataRow In DtSalidas.Rows
|
If Not ObjFactura.TipoDocto.Contiene("Rem", "Ped") Then
|
||||||
Dim CveConceptoMovimiento As Integer = -1
|
For Each RowMovimiento As DataRow In DtSalidas.Rows
|
||||||
Dim CveAlmacenMovimiento As Integer = -1
|
Dim CveConceptoMovimiento As Integer = -1
|
||||||
|
Dim CveAlmacenMovimiento As Integer = -1
|
||||||
|
|
||||||
Dim CveMovimientoDevolucion As Integer = 0
|
Dim CveMovimientoDevolucion As Integer = 0
|
||||||
Dim Folio As Integer = 0
|
Dim Folio As Integer = 0
|
||||||
|
|
||||||
Dim CveMovimientoSalida As Integer = -1
|
Dim CveMovimientoSalida As Integer = -1
|
||||||
|
|
||||||
Select Case RowMovimiento("CveConcepto").ToString().ToEntero()
|
Select Case RowMovimiento("CveConcepto").ToString().ToEntero()
|
||||||
Case 3
|
Case 3
|
||||||
CveConceptoMovimiento = 18 'DEVOLUCION DEL CLIENTE
|
CveConceptoMovimiento = 18 'DEVOLUCION DEL CLIENTE
|
||||||
CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
||||||
CveMovimientoSalida = RowMovimiento("CveMovimiento").ToString().ToEntero()
|
CveMovimientoSalida = RowMovimiento("CveMovimiento").ToString().ToEntero()
|
||||||
Case 40
|
Case 40
|
||||||
CveConceptoMovimiento = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA
|
CveConceptoMovimiento = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA
|
||||||
CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
||||||
Case 18
|
Case 18
|
||||||
CveConceptoMovimiento = 3 'SALIDA DE ALMACEN
|
CveConceptoMovimiento = 3 'SALIDA DE ALMACEN
|
||||||
CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
||||||
''SI TIENE REMISIONES RELACIONADAS
|
''SI TIENE REMISIONES RELACIONADAS
|
||||||
'If DtRemisionesFacturadas.Rows.Count > 0 Then
|
'If DtRemisionesFacturadas.Rows.Count > 0 Then
|
||||||
' Dim RowRemision As DataRow = DtExistencias.FiltroPrimero($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}")
|
' Dim RowRemision As DataRow = DtExistencias.FiltroPrimero($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}")
|
||||||
|
|
||||||
' Dim CveRemision As Integer = RowRemision("CveRemision").ToString().ToEntero()
|
' Dim CveRemision As Integer = RowRemision("CveRemision").ToString().ToEntero()
|
||||||
|
|
||||||
' Dim CancelarRemision As Boolean = (ListaRemisionesCancelar IsNot Nothing) AndAlso (ListaRemisionesCancelar.Any(Function(CveRemisionCancelar) CveRemisionCancelar = CveRemision))
|
' Dim CancelarRemision As Boolean = (ListaRemisionesCancelar IsNot Nothing) AndAlso (ListaRemisionesCancelar.Any(Function(CveRemisionCancelar) CveRemisionCancelar = CveRemision))
|
||||||
|
|
||||||
' 'SI LA REMISION SE VA A CANCELAR DEBE REGRESAR AL ALMACEN GENERAL
|
' 'SI LA REMISION SE VA A CANCELAR DEBE REGRESAR AL ALMACEN GENERAL
|
||||||
' If CancelarRemision Then
|
' If CancelarRemision Then
|
||||||
' CveAlmacenDevolucion = RowRemision("CveAlmacenDevolucion").ToString().ToEntero()
|
' CveAlmacenDevolucion = RowRemision("CveAlmacenDevolucion").ToString().ToEntero()
|
||||||
' Else
|
' Else
|
||||||
' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
||||||
' End If
|
' End If
|
||||||
|
|
||||||
'Else
|
'Else
|
||||||
' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
|
||||||
'End If
|
'End If
|
||||||
End Select
|
End Select
|
||||||
|
|
||||||
'SI TIENE SALDO PENDIENTE POR DEVOLVER GENERA UN MOVIMIENTO DE DEVOLUCION
|
'SI TIENE SALDO PENDIENTE POR DEVOLVER GENERA UN MOVIMIENTO DE DEVOLUCION
|
||||||
If ObjFactura.SaldoAlmacen <> 0 Then
|
If ObjFactura.SaldoAlmacen <> 0 Then
|
||||||
'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN)
|
'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN)
|
||||||
CveMovimientoDevolucion = ObjInventario.AddMovimiento(CveAlmacenMovimiento, CveConceptoMovimiento, 1, ClsPaginas.NowADS(), -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=-1, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="Mod/CV1")
|
CveMovimientoDevolucion = ObjInventario.AddMovimiento(CveAlmacenMovimiento, CveConceptoMovimiento, 1, ClsPaginas.NowADS(), -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=-1, CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="Mod/CV1")
|
||||||
Folio = ObjInventario.Folio
|
Folio = ObjInventario.Folio
|
||||||
|
|
||||||
If CveMovimientoDevolucion > 0 Then
|
If CveMovimientoDevolucion > 0 Then
|
||||||
For Each Dr As DataRow In DtExistencias.FiltraParametros($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}").Rows
|
For Each Dr As DataRow In DtExistencias.FiltraParametros($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}").Rows
|
||||||
|
|
||||||
Dim FechaCaducidad As Date = MinFecha
|
Dim FechaCaducidad As Date = MinFecha
|
||||||
If Not String.IsNullOrEmpty(Dr("FechaCaducidad").ToString()) Then
|
If Not String.IsNullOrEmpty(Dr("FechaCaducidad").ToString()) Then
|
||||||
If IsDate(Dr("FechaCaducidad")) Then
|
If IsDate(Dr("FechaCaducidad")) Then
|
||||||
FechaCaducidad = Dr("FechaCaducidad").ToString().ToDate()
|
FechaCaducidad = Dr("FechaCaducidad").ToString().ToDate()
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim CveVentaDetalleRemision As Integer = -1
|
|
||||||
If CveConceptoMovimiento = 41 Then
|
|
||||||
CveVentaDetalleRemision = Dr("CveVentaDetalleRemision").ToString.ToEntero()
|
|
||||||
End If
|
|
||||||
|
|
||||||
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucion, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, -1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, FechaCaducidad:=FechaCaducidad, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
|
|
||||||
Exit For
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
Else
|
|
||||||
MensajeError = "Ocurrió un error al agregar el movimiento"
|
|
||||||
ErrorCancelar = True
|
|
||||||
End If
|
|
||||||
|
|
||||||
'GENERA PREPOLIZA DEL MOVIMIENTO DE DEVOLUCION
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
Dim DtCostos As DataTable = Nothing
|
|
||||||
Dim ValorInventario As Decimal = 0
|
|
||||||
If ObjInventario.GetMovimientosDetalle(CveMovimientoDevolucion, UsuarioActual.CveEmpresa) Then
|
|
||||||
DtCostos = ObjInventario.DtResultados
|
|
||||||
Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
|
|
||||||
If tmpCostos.Rows.Count > 0 Then
|
|
||||||
Dim Multiplicador As Decimal = -1D
|
|
||||||
If ObjFactura.TipoDocto = "Dev" Then
|
|
||||||
Multiplicador = 1D
|
|
||||||
End If
|
|
||||||
|
|
||||||
'If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa) Then
|
|
||||||
Dim Fecha As Date = ClsPaginas.NowADS()
|
|
||||||
Dim CveCliente As Integer = ObjFactura.CveCliente 'ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero
|
|
||||||
Dim ClienteNombre As String = ObjFactura.Cliente.Nombre 'ObjVentas.DtResultados(0)("ClienteNombre").ToString
|
|
||||||
Dim SerieFolio As String = ObjFactura.SerieFolio ' ObjVentas.DtResultados(0)("SerieFolio").ToString
|
|
||||||
Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundAD()
|
|
||||||
Dim TotalCostoAcumulado As Decimal = 0
|
|
||||||
Dim cont As Integer = 1
|
|
||||||
|
|
||||||
Dim CvePrePolizaDev As Integer = ObjConta.AddPrePolizas("Modelos/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
|
|
||||||
'SE AGREGA MOVIMIENTO SEPARADO POR LA CUENTA DE VENTAS (ER)
|
|
||||||
For Each RowInv As DataRow In tmpCostos.Rows
|
|
||||||
ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundAD()
|
|
||||||
TotalCostoAcumulado += ValorInventario
|
|
||||||
|
|
||||||
'CUANDO ES EL ÚLTIMO MOVIMIENTO Y HAY DIFERENCIAS EN LOS IMPORTES
|
|
||||||
If cont = DtCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
|
|
||||||
ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
|
|
||||||
End If
|
|
||||||
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, False, Multiplicador * ValorInventario, Multiplicador * ValorInventario, 69, SerieFolio, SerieFolio, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
cont += 1
|
|
||||||
Next
|
|
||||||
|
|
||||||
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, True, Multiplicador * TotalCosto, Multiplicador * TotalCosto, 68, SerieFolio, SerieFolio, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
End If
|
|
||||||
|
|
||||||
'AUTOCONTA - EL MOVIMIENTO 1 ES EL DE VENTA
|
|
||||||
|
|
||||||
Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1"
|
|
||||||
|
|
||||||
If UsuarioActual.CveEmpresa = 119 AndAlso ObjFactura.TipoDocto.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "Pd2", "PA", "Egs", "Dev") Then
|
|
||||||
AutoConta = False
|
|
||||||
End If
|
|
||||||
|
|
||||||
If Not ErrorCancelar AndAlso ObjConta.ValidacionesPrePoliza(CvePrePolizaDev, UsuarioActual) Then
|
|
||||||
If ObjConta.ValorPolizaDescuadre > 0 Then
|
|
||||||
GuardaLogAD($"Modelos/RecepcionEntrega | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
|
|
||||||
ErrorCancelar = True
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
If AutoConta And Not ErrorCancelar Then
|
|
||||||
If Not ObjConta.ContabilizarPrePoliza(CvePrePolizaDev, UsuarioActual.CveUsuario, UsuarioActual.Empresa) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al contabilizar la prepoliza."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
' Else
|
|
||||||
'ErrorCancelar = True
|
|
||||||
'MensajeError = "Ocurrió un Error al ingresar las prepolizas"
|
|
||||||
'End If
|
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
|
||||||
|
|
||||||
'AGREGA BITACORA A VENTA
|
Dim CveVentaDetalleRemision As Integer = -1
|
||||||
If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen = 1 AndAlso CveMovimientoDevolucion > 0 Then
|
If CveConceptoMovimiento = 41 Then
|
||||||
Dim MensajeBitacora As String = "Devuelta"
|
CveVentaDetalleRemision = Dr("CveVentaDetalleRemision").ToString.ToEntero()
|
||||||
If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: <a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimientoDevolucion, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then
|
End If
|
||||||
MensajeError = "Ocurrió un error al agregar la bitacora."
|
|
||||||
|
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucion, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, -1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, FechaCaducidad:=FechaCaducidad, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Else
|
||||||
|
MensajeError = "Ocurrió un error al agregar el movimiento"
|
||||||
|
ErrorCancelar = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
'GENERA PREPOLIZA DEL MOVIMIENTO DE DEVOLUCION
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
Dim DtCostos As DataTable = Nothing
|
||||||
|
Dim ValorInventario As Decimal = 0
|
||||||
|
If ObjInventario.GetMovimientosDetalle(CveMovimientoDevolucion, UsuarioActual.CveEmpresa) Then
|
||||||
|
DtCostos = ObjInventario.DtResultados
|
||||||
|
Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
|
||||||
|
If tmpCostos.Rows.Count > 0 Then
|
||||||
|
Dim Multiplicador As Decimal = -1D
|
||||||
|
If ObjFactura.TipoDocto = "Dev" Then
|
||||||
|
Multiplicador = 1D
|
||||||
|
End If
|
||||||
|
|
||||||
|
'If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
|
Dim Fecha As Date = ClsPaginas.NowADS()
|
||||||
|
Dim CveCliente As Integer = ObjFactura.CveCliente 'ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero
|
||||||
|
Dim ClienteNombre As String = ObjFactura.Cliente.Nombre 'ObjVentas.DtResultados(0)("ClienteNombre").ToString
|
||||||
|
Dim SerieFolio As String = ObjFactura.SerieFolio ' ObjVentas.DtResultados(0)("SerieFolio").ToString
|
||||||
|
Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundAD()
|
||||||
|
Dim TotalCostoAcumulado As Decimal = 0
|
||||||
|
Dim cont As Integer = 1
|
||||||
|
|
||||||
|
Dim CvePrePolizaDev As Integer = ObjConta.AddPrePolizas("Modelos/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
|
||||||
|
'SE AGREGA MOVIMIENTO SEPARADO POR LA CUENTA DE VENTAS (ER)
|
||||||
|
For Each RowInv As DataRow In tmpCostos.Rows
|
||||||
|
ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundAD()
|
||||||
|
TotalCostoAcumulado += ValorInventario
|
||||||
|
|
||||||
|
'CUANDO ES EL ÚLTIMO MOVIMIENTO Y HAY DIFERENCIAS EN LOS IMPORTES
|
||||||
|
If cont = DtCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
|
||||||
|
ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, False, Multiplicador * ValorInventario, Multiplicador * ValorInventario, 69, SerieFolio, SerieFolio, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
cont += 1
|
||||||
|
Next
|
||||||
|
|
||||||
|
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, True, Multiplicador * TotalCosto, Multiplicador * TotalCosto, 68, SerieFolio, SerieFolio, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
'AUTOCONTA - EL MOVIMIENTO 1 ES EL DE VENTA
|
||||||
|
|
||||||
|
Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1"
|
||||||
|
|
||||||
|
If UsuarioActual.CveEmpresa = 119 AndAlso ObjFactura.TipoDocto.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "Pd2", "PA", "Egs", "Dev") Then
|
||||||
|
AutoConta = False
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not ErrorCancelar AndAlso ObjConta.ValidacionesPrePoliza(CvePrePolizaDev, UsuarioActual) Then
|
||||||
|
If ObjConta.ValorPolizaDescuadre > 0 Then
|
||||||
|
GuardaLogAD($"Modelos/RecepcionEntrega | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
|
||||||
|
ErrorCancelar = True
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If AutoConta And Not ErrorCancelar Then
|
||||||
|
If Not ObjConta.ContabilizarPrePoliza(CvePrePolizaDev, UsuarioActual.CveUsuario, UsuarioActual.Empresa) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al contabilizar la prepoliza."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
' Else
|
||||||
|
'ErrorCancelar = True
|
||||||
|
'MensajeError = "Ocurrió un Error al ingresar las prepolizas"
|
||||||
|
'End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'AGREGA BITACORA A VENTA
|
||||||
|
If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen = 1 AndAlso CveMovimientoDevolucion > 0 Then
|
||||||
|
Dim MensajeBitacora As String = "Devuelta"
|
||||||
|
If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: <a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimientoDevolucion, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then
|
||||||
|
MensajeError = "Ocurrió un error al agregar la bitacora."
|
||||||
|
ErrorCancelar = True
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
Else
|
||||||
|
'SI EXISTE UNA DEVOLUCION PREVIAMENTE HECHA UTILIZAR COMO REFERENCIA
|
||||||
|
If DtDevPrevias IsNot Nothing AndAlso DtDevPrevias.Rows.Count > 0 Then
|
||||||
|
CveMovimientoDevolucion = DtDevPrevias.FiltroPrimeroValor("CveMovimiento", $"CveConcepto = {CveConceptoMovimiento}").ToEntero()
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION
|
||||||
|
'SI ES DEVOLUCION DEL CLIENTE DEBE REGRESAR A ENTREGA POR ADELANTADO
|
||||||
|
If Not ErrorCancelar AndAlso CveConceptoMovimiento = 18 AndAlso RevivirRemisiones Then
|
||||||
|
If Not GeneraMovimientosEntregaPorAdelantadoRemision(CveMovimientoDevolucion, ObjVentas, ObjInventario, DtDevRem, ListaRemisionesCancelar) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al generar los movimientos de devolución a remisión"
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If DtVirtuales IsNot Nothing Then
|
||||||
|
For Each RowVirtual As DataRow In DtVirtuales.Rows
|
||||||
|
'REALIZA LA DEVOLUCION AL ALMACEN VIRTUAL
|
||||||
|
If Not ErrorCancelar AndAlso Not CancelarMovimientosVirtuales(CveVenta, CveMovimientoDevolucion, RowVirtual("CveMovimiento").ToString().ToEntero(), ObjInventario, TipoDocto:=ObjFactura.TipoDocto) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al realizar la devolución del virtual. Por favor vuelva a intentar."
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
|
If ErrorCancelar Then
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
|
'SI EXISTEN HAY EXISTENCIA EN (ENTREGA POR ADELANTADO) SE TIENE QUE REGRESAR AL ALMACEN ORGINAL (GENERAL,SIN COSTO)
|
||||||
|
If Not ErrorCancelar AndAlso ObjFactura.TipoDocto <> "Rem" AndAlso ListaRemisionesCancelar IsNot Nothing AndAlso ListaRemisionesCancelar.Count > 0 Then
|
||||||
|
|
||||||
|
'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO)
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
If ObjInventario.GetMovimientosDevoluciones(CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
|
DtDevoluciones = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 10")
|
||||||
|
Else
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO)
|
||||||
|
If Not ErrorCancelar AndAlso DtDevoluciones IsNot Nothing AndAlso DtDevoluciones.Rows.Count > 0 Then
|
||||||
|
For Each CveRemision As Integer In ListaRemisionesCancelar
|
||||||
|
Dim ObjRemision As New Factura(UsuarioActual, CveRemision, UsuarioActual.CveEmpresa, VerificaAlmacen:=True)
|
||||||
|
|
||||||
|
If ObjRemision IsNot Nothing AndAlso ObjRemision.CveVenta > 0 Then
|
||||||
|
|
||||||
|
If ObjRemision.SaldoAlmacen <> 0 Then
|
||||||
|
Dim SaldoAlmacenExA As Decimal = 0
|
||||||
|
Dim SaldoAlmacenUsados As Decimal = 0
|
||||||
|
Dim DtSaldosAlmacenRemision As DataTable = Nothing
|
||||||
|
'VERIFICA SI HACE FALTA DEVOLVER PRODUCTOS Y USADOS EN ESPECIFICO
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
If ObjInventario.GetSaldoVentaDetalleAlmacen(ObjRemision.CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
|
DtSaldosAlmacenRemision = ObjInventario.DtResultados.Copy()
|
||||||
|
Else
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cargar los saldos de devolución. Por favor vuelva a intentar."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
Dim DtDevRemision As DataTable = DtDevoluciones.FiltraParametros($"CveRemision={CveRemision}")
|
||||||
|
|
||||||
|
Dim DtDevMovs As DataTable = DtDevRemision.FiltraParametros("", DistinctColumns:={"CveMovimiento", "CveRemision", "CveAlmacen", "CveAlmacenDestino"})
|
||||||
|
|
||||||
|
For Each RowDevolucion As DataRow In DtDevMovs.Rows
|
||||||
|
CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero()
|
||||||
|
CveAlmacenDevolucion = RowDevolucion("CveAlmacenDestino").ToString().ToEntero()
|
||||||
|
|
||||||
|
If CveAlmacen > 0 AndAlso DtSaldosAlmacenRemision IsNot Nothing Then
|
||||||
|
SaldoAlmacenExA = DtSaldosAlmacenRemision.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacen}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
If SaldoAlmacenExA <> 0 Then
|
||||||
|
If Not CancelarMovimientosRemision(CveRemision, CveAlmacen, CveAlmacenDevolucion, DtDevRemision.FiltraParametros($"CveMovimiento={RowDevolucion("CveMovimiento")}"), ObjVentas, ObjInventario, ObjConta) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión."
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
Next
|
||||||
|
|
||||||
|
'CANCELAR MOVIMIENTOS DE USADOS SI TIENE
|
||||||
|
If Not ErrorCancelar AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
|
||||||
|
Dim CveAlmacenUsado As Integer = 0
|
||||||
|
Dim CveMovimientoUsado As Integer = 0
|
||||||
|
|
||||||
|
If ObjInventario.GetInv_Mov(ObjRemision.CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
|
CveMovimientoUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
||||||
|
CveAlmacenUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
||||||
|
Else
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cargar los datos de devolución de usado. Por favor vuelva a intentar."
|
||||||
|
End If
|
||||||
|
|
||||||
|
If CveAlmacenUsado > 0 AndAlso DtSaldosAlmacenRemision IsNot Nothing Then
|
||||||
|
SaldoAlmacenUsados = DtSaldosAlmacenRemision.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacenUsado}")
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not ErrorCancelar AndAlso CveMovimientoUsado > 0 AndAlso SaldoAlmacenUsados <> 0 Then
|
||||||
|
If CancelarInventarioUsado(ObjRemision, CveAlmacenUsado, CveMovimientoUsado, ObjInventario, ObjConta, Contabilizable:=False) <= 0 Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cancelar los usados. Por favor vuelva a intentar."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'CANCELAR MOVIMIENTOS DE GARANTIA SI TIENE
|
||||||
|
If Not ErrorCancelar AndAlso Not GenerarMovimientoGarantia(15, "Salida Garantía", ClsPaginas.NowADS(), ObjRemision, ObjAcum, ObjInventario, ObjConta) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
'CANCELA LOS FOLIOS DE GARANTIA
|
||||||
|
If Not ErrorCancelar AndAlso Not ObjAcum.UpdateGarantiaCancelacion(ObjRemision.CveVenta) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al actualizar la garantía"
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
If DtDevRemision IsNot Nothing Then
|
||||||
|
DtDevRemision.Dispose()
|
||||||
|
End If
|
||||||
|
|
||||||
|
If DtDevMovs IsNot Nothing Then
|
||||||
|
DtDevMovs.Dispose()
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Else
|
Else
|
||||||
'SI EXISTE UNA DEVOLUCION PREVIAMENTE HECHA UTILIZAR COMO REFERENCIA
|
ErrorCancelar = True
|
||||||
If DtDevPrevias IsNot Nothing AndAlso DtDevPrevias.Rows.Count > 0 Then
|
MensajeError = "Ocurrió un error al cargar los datos de la remisión. Por favor vuelva a intentar."
|
||||||
CveMovimientoDevolucion = DtDevPrevias.FiltroPrimeroValor("CveMovimiento", $"CveConcepto = {CveConceptoMovimiento}").ToEntero()
|
|
||||||
End If
|
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If ObjRemision IsNot Nothing Then
|
||||||
'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION
|
ObjRemision.Dispose()
|
||||||
'SI ES DEVOLUCION DEL CLIENTE DEBE REGRESAR A ENTREGA POR ADELANTADO
|
|
||||||
If Not ErrorCancelar AndAlso CveConceptoMovimiento = 18 AndAlso RevivirRemisiones Then
|
|
||||||
If Not GeneraMovimientosEntregaPorAdelantadoRemision(CveMovimientoDevolucion, ObjVentas, ObjInventario, DtDevRem, ListaRemisionesCancelar) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al generar los movimientos de devolución a remisión"
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
If DtVirtuales IsNot Nothing Then
|
|
||||||
For Each RowVirtual As DataRow In DtVirtuales.Rows
|
|
||||||
'REALIZA LA DEVOLUCION AL ALMACEN VIRTUAL
|
|
||||||
If Not ErrorCancelar AndAlso Not CancelarMovimientosVirtuales(CveVenta, CveMovimientoDevolucion, RowVirtual("CveMovimiento").ToString().ToEntero(), ObjInventario, TipoDocto:=ObjFactura.TipoDocto) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al realizar la devolución del virtual. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If ErrorCancelar Then
|
If ErrorCancelar Then
|
||||||
@@ -6463,243 +6586,126 @@ Namespace Modelos
|
|||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'SI EXISTEN HAY EXISTENCIA EN (ENTREGA POR ADELANTADO) SE TIENE QUE REGRESAR AL ALMACEN ORGINAL (GENERAL,SIN COSTO)
|
End If
|
||||||
If Not ErrorCancelar AndAlso ObjFactura.TipoDocto <> "Rem" AndAlso ListaRemisionesCancelar IsNot Nothing AndAlso ListaRemisionesCancelar.Count > 0 Then
|
|
||||||
|
|
||||||
'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO)
|
'CANCELACION DE MOVIMIENTOS DE REMISION, PEDIDOS
|
||||||
If Not ErrorCancelar Then
|
If Not ErrorCancelar AndAlso ObjFactura.TipoDocto.Contiene("Rem", "Ped") AndAlso RealizarDevolucionAlmacen = 1 AndAlso ObjFactura.SaldoAlmacen <> 0 Then
|
||||||
If ObjInventario.GetMovimientosDevoluciones(CveVenta, UsuarioActual.CveEmpresa) Then
|
Dim CveMovimientoUsado As Integer = -1
|
||||||
DtDevoluciones = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 10")
|
Dim CveAlmacenUsado As Integer = 0
|
||||||
Else
|
Dim CveAlmacenGeneral As Integer = 0
|
||||||
ErrorCancelar = True
|
Dim CveAlmacenExA As Integer = 0
|
||||||
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
|
|
||||||
|
Dim SaldoAlmacenExA As Decimal = 0
|
||||||
|
Dim SaldoAlmacenUsados As Decimal = 0
|
||||||
|
|
||||||
|
Dim DtMovRemision As DataTable = Nothing
|
||||||
|
'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO)
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
|
DtMovRemision = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen IN (10)")
|
||||||
|
CveAlmacenGeneral = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen IN (1,4)").ToEntero()
|
||||||
|
'SI ES SERVICIO A DOMICILIO DEBE REGRESAR A ESTE TIPO DE ALMACEN
|
||||||
|
If Me.ServicioDomicilio Then
|
||||||
|
CveAlmacenGeneral = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 29").ToEntero()
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
CveAlmacenExA = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 10").ToEntero()
|
||||||
|
If CveAlmacenExA <= 0 Then
|
||||||
|
CveAlmacenExA = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 4").ToEntero()
|
||||||
|
DtMovRemision = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen IN (4)")
|
||||||
|
End If
|
||||||
|
|
||||||
|
CveMovimientoUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
||||||
|
CveAlmacenUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
||||||
|
Else
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
|
||||||
End If
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO)
|
'VERIFICA SI HACE FALTA DEVOLVER PRODUCTOS Y USADOS EN ESPECIFICO
|
||||||
If Not ErrorCancelar AndAlso DtDevoluciones IsNot Nothing AndAlso DtDevoluciones.Rows.Count > 0 Then
|
If Not ErrorCancelar Then
|
||||||
For Each CveRemision As Integer In ListaRemisionesCancelar
|
If ObjInventario.GetSaldoVentaDetalleAlmacen(CveVenta, UsuarioActual.CveEmpresa) Then
|
||||||
Dim ObjRemision As New Factura(UsuarioActual, CveRemision, UsuarioActual.CveEmpresa, VerificaAlmacen:=True)
|
If CveAlmacenExA > 0 Then
|
||||||
|
SaldoAlmacenExA = ObjInventario.DtResultados.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacenExA}")
|
||||||
|
End If
|
||||||
|
If CveAlmacenUsado > 0 Then
|
||||||
|
SaldoAlmacenUsados = ObjInventario.DtResultados.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacenUsado}")
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al cargar los saldos de devolución. Por favor vuelva a intentar."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
If ObjRemision IsNot Nothing AndAlso ObjRemision.CveVenta > 0 Then
|
'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO)
|
||||||
|
If Not ErrorCancelar AndAlso DtMovRemision IsNot Nothing AndAlso DtMovRemision.Rows.Count > 0 AndAlso SaldoAlmacenExA <> 0 Then
|
||||||
|
|
||||||
If ObjRemision.SaldoAlmacen <> 0 Then
|
Dim DtDevMovs As DataTable = DtMovRemision.FiltraParametros("", DistinctColumns:={"CveMovimiento", "CveAlmacen"})
|
||||||
Dim SaldoAlmacenExA As Decimal = 0
|
|
||||||
Dim SaldoAlmacenUsados As Decimal = 0
|
|
||||||
Dim DtSaldosAlmacenRemision As DataTable = Nothing
|
|
||||||
'VERIFICA SI HACE FALTA DEVOLVER PRODUCTOS Y USADOS EN ESPECIFICO
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
If ObjInventario.GetSaldoVentaDetalleAlmacen(ObjRemision.CveVenta, UsuarioActual.CveEmpresa) Then
|
|
||||||
DtSaldosAlmacenRemision = ObjInventario.DtResultados.Copy()
|
|
||||||
Else
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cargar los saldos de devolución. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
|
For Each RowDevolucion As DataRow In DtDevMovs.Rows
|
||||||
|
CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero()
|
||||||
|
Dim tdtt As DataTable = DtMovRemision.FiltraParametros($"CveMovimiento={RowDevolucion("CveMovimiento")} AND CvePS > 0 AND SaldoAlmacen <> 0")
|
||||||
|
|
||||||
Dim DtDevRemision As DataTable = DtDevoluciones.FiltraParametros($"CveRemision={CveRemision}")
|
If tdtt IsNot Nothing AndAlso tdtt.Rows.Count > 0 Then
|
||||||
|
If Not CancelarMovimientosRemision(CveVenta, CveAlmacen, CveAlmacenGeneral, tdtt, ObjVentas, ObjInventario, ObjConta) Then
|
||||||
Dim DtDevMovs As DataTable = DtDevRemision.FiltraParametros("", DistinctColumns:={"CveMovimiento", "CveRemision", "CveAlmacen", "CveAlmacenDestino"})
|
|
||||||
|
|
||||||
For Each RowDevolucion As DataRow In DtDevMovs.Rows
|
|
||||||
CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero()
|
|
||||||
CveAlmacenDevolucion = RowDevolucion("CveAlmacenDestino").ToString().ToEntero()
|
|
||||||
|
|
||||||
If CveAlmacen > 0 AndAlso DtSaldosAlmacenRemision IsNot Nothing Then
|
|
||||||
SaldoAlmacenExA = DtSaldosAlmacenRemision.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacen}")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If SaldoAlmacenExA <> 0 Then
|
|
||||||
If Not CancelarMovimientosRemision(CveRemision, CveAlmacen, CveAlmacenDevolucion, DtDevRemision.FiltraParametros($"CveMovimiento={RowDevolucion("CveMovimiento")}"), ObjVentas, ObjInventario, ObjConta) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión."
|
|
||||||
Exit For
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
Next
|
|
||||||
|
|
||||||
'CANCELAR MOVIMIENTOS DE USADOS SI TIENE
|
|
||||||
If Not ErrorCancelar AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
|
|
||||||
Dim CveAlmacenUsado As Integer = 0
|
|
||||||
Dim CveMovimientoUsado As Integer = 0
|
|
||||||
|
|
||||||
If ObjInventario.GetInv_Mov(ObjRemision.CveVenta, UsuarioActual.CveEmpresa) Then
|
|
||||||
CveMovimientoUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
|
||||||
CveAlmacenUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
|
||||||
Else
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cargar los datos de devolución de usado. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
|
|
||||||
If CveAlmacenUsado > 0 AndAlso DtSaldosAlmacenRemision IsNot Nothing Then
|
|
||||||
SaldoAlmacenUsados = DtSaldosAlmacenRemision.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacenUsado}")
|
|
||||||
End If
|
|
||||||
|
|
||||||
If Not ErrorCancelar AndAlso CveMovimientoUsado > 0 AndAlso SaldoAlmacenUsados <> 0 Then
|
|
||||||
If CancelarInventarioUsado(ObjRemision, CveAlmacenUsado, CveMovimientoUsado, ObjInventario, ObjConta, Contabilizable:=False) <= 0 Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cancelar los usados. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'CANCELAR MOVIMIENTOS DE GARANTIA SI TIENE
|
|
||||||
If Not ErrorCancelar AndAlso Not GenerarMovimientoGarantia(15, "Salida Garantía", ClsPaginas.NowADS(), ObjRemision, ObjAcum, ObjInventario, ObjConta) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
End If
|
|
||||||
|
|
||||||
'CANCELA LOS FOLIOS DE GARANTIA
|
|
||||||
If Not ErrorCancelar AndAlso Not ObjAcum.UpdateGarantiaCancelacion(ObjRemision.CveVenta) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al actualizar la garantía"
|
|
||||||
End If
|
|
||||||
|
|
||||||
End If
|
|
||||||
|
|
||||||
If DtDevRemision IsNot Nothing Then
|
|
||||||
DtDevRemision.Dispose()
|
|
||||||
End If
|
|
||||||
|
|
||||||
If DtDevMovs IsNot Nothing Then
|
|
||||||
DtDevMovs.Dispose()
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
Else
|
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
MensajeError = "Ocurrió un error al cargar los datos de la remisión. Por favor vuelva a intentar."
|
MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión."
|
||||||
End If
|
|
||||||
|
|
||||||
If ObjRemision IsNot Nothing Then
|
|
||||||
ObjRemision.Dispose()
|
|
||||||
End If
|
|
||||||
|
|
||||||
If ErrorCancelar Then
|
|
||||||
Exit For
|
Exit For
|
||||||
End If
|
End If
|
||||||
|
End If
|
||||||
Next
|
Next
|
||||||
End If
|
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'CANCELACION DE MOVIMIENTOS DE REMISION, PEDIDOS
|
'CANCELAR MOVIMIENTOS DE USADOS SI TIENE
|
||||||
If Not ErrorCancelar AndAlso ObjFactura.TipoDocto.Contiene("Rem", "Ped") AndAlso RealizarDevolucionAlmacen = 1 AndAlso ObjFactura.SaldoAlmacen <> 0 Then
|
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not ErrorCancelar AndAlso CveMovimientoUsado > 0 AndAlso SaldoAlmacenUsados <> 0 Then
|
||||||
Dim CveMovimientoUsado As Integer = -1
|
If CancelarInventarioUsado(ObjFactura, CveAlmacenUsado, CveMovimientoUsado, ObjInventario, ObjConta, Contabilizable:=False) <= 0 Then
|
||||||
Dim CveAlmacenUsado As Integer = 0
|
|
||||||
Dim CveAlmacenGeneral As Integer = 0
|
|
||||||
Dim CveAlmacenExA As Integer = 0
|
|
||||||
|
|
||||||
Dim SaldoAlmacenExA As Decimal = 0
|
|
||||||
Dim SaldoAlmacenUsados As Decimal = 0
|
|
||||||
|
|
||||||
Dim DtMovRemision As DataTable = Nothing
|
|
||||||
'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO)
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then
|
|
||||||
DtMovRemision = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen IN (10)")
|
|
||||||
CveAlmacenGeneral = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen IN (1,4)").ToEntero()
|
|
||||||
'SI ES SERVICIO A DOMICILIO DEBE REGRESAR A ESTE TIPO DE ALMACEN
|
|
||||||
If Me.ServicioDomicilio Then
|
|
||||||
CveAlmacenGeneral = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 29").ToEntero()
|
|
||||||
End If
|
|
||||||
|
|
||||||
CveAlmacenExA = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 10").ToEntero()
|
|
||||||
If CveAlmacenExA <= 0 Then
|
|
||||||
CveAlmacenExA = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 4").ToEntero()
|
|
||||||
DtMovRemision = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen IN (4)")
|
|
||||||
End If
|
|
||||||
|
|
||||||
CveMovimientoUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
|
||||||
CveAlmacenUsado = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero()
|
|
||||||
Else
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'VERIFICA SI HACE FALTA DEVOLVER PRODUCTOS Y USADOS EN ESPECIFICO
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
If ObjInventario.GetSaldoVentaDetalleAlmacen(CveVenta, UsuarioActual.CveEmpresa) Then
|
|
||||||
If CveAlmacenExA > 0 Then
|
|
||||||
SaldoAlmacenExA = ObjInventario.DtResultados.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacenExA}")
|
|
||||||
End If
|
|
||||||
If CveAlmacenUsado > 0 Then
|
|
||||||
SaldoAlmacenUsados = ObjInventario.DtResultados.SUMD("SaldoAlmacen", $"CveAlmacen = {CveAlmacenUsado}")
|
|
||||||
End If
|
|
||||||
Else
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cargar los saldos de devolución. Por favor vuelva a intentar."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO)
|
|
||||||
If Not ErrorCancelar AndAlso DtMovRemision IsNot Nothing AndAlso DtMovRemision.Rows.Count > 0 AndAlso SaldoAlmacenExA <> 0 Then
|
|
||||||
|
|
||||||
Dim DtDevMovs As DataTable = DtMovRemision.FiltraParametros("", DistinctColumns:={"CveMovimiento", "CveAlmacen"})
|
|
||||||
|
|
||||||
For Each RowDevolucion As DataRow In DtDevMovs.Rows
|
|
||||||
CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero()
|
|
||||||
Dim tdtt As DataTable = DtMovRemision.FiltraParametros($"CveMovimiento={RowDevolucion("CveMovimiento")} AND CvePS > 0 AND SaldoAlmacen <> 0")
|
|
||||||
|
|
||||||
If tdtt IsNot Nothing AndAlso tdtt.Rows.Count > 0 Then
|
|
||||||
If Not CancelarMovimientosRemision(CveVenta, CveAlmacen, CveAlmacenGeneral, tdtt, ObjVentas, ObjInventario, ObjConta) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión."
|
|
||||||
Exit For
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
Next
|
|
||||||
End If
|
|
||||||
|
|
||||||
'CANCELAR MOVIMIENTOS DE USADOS SI TIENE
|
|
||||||
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not ErrorCancelar AndAlso CveMovimientoUsado > 0 AndAlso SaldoAlmacenUsados <> 0 Then
|
|
||||||
If CancelarInventarioUsado(ObjFactura, CveAlmacenUsado, CveMovimientoUsado, ObjInventario, ObjConta, Contabilizable:=False) <= 0 Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
MensajeError = "Ocurrió un error al cancelar los movimientos de usados."
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'CANCELAR MOVIMIENTOS DE GARANTIA SI TIENE
|
|
||||||
If Not ErrorCancelar AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
|
|
||||||
If Not GenerarMovimientoGarantia(15, "Salida Garantía", ClsPaginas.NowADS(), ObjFactura, ObjAcum, ObjInventario, ObjConta) Then
|
|
||||||
ErrorCancelar = True
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'VERIFICAR MOVIMIENTOS DE APARTADOS
|
|
||||||
If Not ErrorCancelar Then
|
|
||||||
If Not GeneraMovimientosApartados(ObjInventario) Then
|
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
MensajeError = "Ocurrió un error al guardar los movimientos de control de apartados"
|
MensajeError = "Ocurrió un error al cancelar los movimientos de usados."
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER)
|
'CANCELAR MOVIMIENTOS DE GARANTIA SI TIENE
|
||||||
If Not ErrorCancelar Then
|
If Not ErrorCancelar AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
|
||||||
If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVenta) Then
|
If Not GenerarMovimientoGarantia(15, "Salida Garantía", ClsPaginas.NowADS(), ObjFactura, ObjAcum, ObjInventario, ObjConta) Then
|
||||||
MensajeError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar."
|
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
|
||||||
|
|
||||||
'EMPRESA HOSPITALARIA - SI ES PEDIDO LA DEVOLUCION SE DEBE HACER DESPUES DE CANCELAR EL PEDIDO
|
'VERIFICAR MOVIMIENTOS DE APARTADOS
|
||||||
If Not ErrorCancelar AndAlso UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso ObjFactura.TipoDocto = "Ped" Then
|
If Not ErrorCancelar Then
|
||||||
If Not RealizarDevolucionAlmacen = 1 AndAlso TieneAlmacen Then
|
If Not GeneraMovimientosApartados(ObjInventario) Then
|
||||||
If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 1, AplicaDevolucionCompleta:=True) Then
|
ErrorCancelar = True
|
||||||
|
MensajeError = "Ocurrió un error al guardar los movimientos de control de apartados"
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER)
|
||||||
|
If Not ErrorCancelar Then
|
||||||
|
If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVenta) Then
|
||||||
|
MensajeError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar."
|
||||||
ErrorCancelar = True
|
ErrorCancelar = True
|
||||||
MensajeError = "No se pudo actualizar el estatus de almacen del pedido"
|
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
'EMPRESA HOSPITALARIA - SI ES PEDIDO LA DEVOLUCION SE DEBE HACER DESPUES DE CANCELAR EL PEDIDO
|
||||||
|
If Not ErrorCancelar AndAlso UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso ObjFactura.TipoDocto = "Ped" Then
|
||||||
|
If Not RealizarDevolucionAlmacen = 1 AndAlso TieneAlmacen Then
|
||||||
|
If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 1, AplicaDevolucionCompleta:=True) Then
|
||||||
|
ErrorCancelar = True
|
||||||
|
MensajeError = "No se pudo actualizar el estatus de almacen del pedido"
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
'CUANDO LA CANCELACION ESTA EN PROCESO NO DEBE REALIZAR NADA DE ESTE PROCESO
|
||||||
|
If Not ErrorCancelar AndAlso (Not EsRefacturacion AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23)) AndAlso CveEstatusRefacturacion = 0) Then
|
||||||
'CANCELA CONTRATOS
|
'CANCELA CONTRATOS
|
||||||
If Not ErrorCancelar Then
|
If Not ErrorCancelar Then
|
||||||
If ObjFactura.CveContrato > 0 AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Ant") Then
|
If ObjFactura.CveContrato > 0 AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Ant") Then
|
||||||
@@ -6822,7 +6828,6 @@ Namespace Modelos
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'MARCA LA VENTA PARA REALIZAR LA DEVOLUCION POSTERIORMENTE
|
'MARCA LA VENTA PARA REALIZAR LA DEVOLUCION POSTERIORMENTE
|
||||||
|
|||||||
@@ -659,8 +659,10 @@ Partial Class Ventas_PVCobranza
|
|||||||
Dim msBuild As New StringBuilder()
|
Dim msBuild As New StringBuilder()
|
||||||
Dim MsgTimbrado As String = ""
|
Dim MsgTimbrado As String = ""
|
||||||
|
|
||||||
|
Dim DebeTimbrar As Boolean = False
|
||||||
|
|
||||||
'SI SE GENERO FACTURA DE INGRESO, TIMBRARLA DESPUES DE REALIZAR EL PAGO
|
'SI SE GENERO FACTURA DE INGRESO, TIMBRARLA DESPUES DE REALIZAR EL PAGO
|
||||||
If respFactura IsNot Nothing Then
|
If DebeTimbrar AndAlso respFactura IsNot Nothing Then
|
||||||
'VERIFICA SI SE GENERO NC
|
'VERIFICA SI SE GENERO NC
|
||||||
If respNC IsNot Nothing Then
|
If respNC IsNot Nothing Then
|
||||||
AjustarTimbre(respFactura.Factura, respNC.Factura)
|
AjustarTimbre(respFactura.Factura, respNC.Factura)
|
||||||
|
|||||||
@@ -26667,7 +26667,13 @@ Partial Class Ventas
|
|||||||
GenerarIxC = ChkGeneraIxC.Checked
|
GenerarIxC = ChkGeneraIxC.Checked
|
||||||
End If
|
End If
|
||||||
|
|
||||||
resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GenerarIxC)
|
Dim ForzarDevolucion As Boolean = False
|
||||||
|
|
||||||
|
If ChkDevAlm.Checked AndAlso UsuarioActual.CveEmpresa = 189 Then
|
||||||
|
ForzarDevolucion = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GenerarIxC, ForzarDevolucion:=ForzarDevolucion)
|
||||||
strMensaje.Append(resp.Mensaje)
|
strMensaje.Append(resp.Mensaje)
|
||||||
Dim DtBonificaciones As DataTable = Nothing
|
Dim DtBonificaciones As DataTable = Nothing
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user