This commit is contained in:
rrene
2020-05-04 10:41:44 -07:00
3 changed files with 156 additions and 50 deletions

View File

@@ -3061,6 +3061,24 @@ Public Class ClsInventarios
Return Retorno Return Retorno
End Function End Function
Public Function GetMovimientosDevoluciones(CveVenta As Integer, CveEmpresa As Integer) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Vta_VentaDetalleAlmacenDevolucion")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveVenta", SqlDbType.Int).Value = CveVenta
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
End With
Try
SqlAdapter.Fill(Data)
Retorno = True
Catch ex As Exception
OnError("Ocurrió un error al obtener datos de devolucion.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
End Try
Return Retorno
End Function
Public Function GetDevolucionRemisionesFacturadas(CveVenta As Integer) As Boolean Public Function GetDevolucionRemisionesFacturadas(CveVenta As Integer) As Boolean
Dim Retorno As Boolean = False Dim Retorno As Boolean = False
DataAdapter("PA_Inv_DevolucionRemisionesFacturadas") DataAdapter("PA_Inv_DevolucionRemisionesFacturadas")

View File

@@ -4340,13 +4340,14 @@ Namespace Modelos
End If 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 EsRefacturacion AndAlso (CveEstatus > 0 AndAlso CveEstatus <> 20) AndAlso CveEstatusRefacturacion = 0 Then If Not ErrorCancelar AndAlso Not EsRefacturacion AndAlso (CveEstatus > 0 AndAlso CveEstatus <> 20) AndAlso CveEstatusRefacturacion = 0 Then
'DEVOLUCION DE ALMACEN 'DEVOLUCION DE ALMACEN
If Not ErrorCancelar AndAlso TieneAlmacen Then 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 DtMovimientos As DataTable = Nothing Dim DtSalidas 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
@@ -4375,14 +4376,16 @@ Namespace Modelos
ErrorCancelar = True ErrorCancelar = True
End If End If
If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then If Not ErrorCancelar Then
DtInventario = ObjInventario.DtResultados.Copy() If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then
DtMovimientos = DtInventario.FiltraParametros($"CvePS IS NULL AND {Filtro}") DtInventario = ObjInventario.DtResultados.Copy()
DtExistencias = DtInventario.FiltraParametros($"CvePS IS NOT NULL AND {Filtro} AND CveTipoPS = 2") DtSalidas = DtInventario.FiltraParametros($"CvePS IS NULL AND {Filtro}")
TieneSalida = DtExistencias.Rows.Count > 0 DtExistencias = DtInventario.FiltraParametros($"CvePS IS NOT NULL AND {Filtro} AND CveTipoPS = 2")
Else TieneSalida = DtExistencias.Rows.Count > 0
ErrorCancelar = True Else
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar." 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 End If
@@ -4390,38 +4393,42 @@ Namespace Modelos
If Not ErrorCancelar AndAlso TieneSalida Then If Not ErrorCancelar AndAlso TieneSalida Then
If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen Then If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen Then
'REALIZA DEVOLUCION A LAS SALIDAS PENDIENTES
For Each RowMovimiento As DataRow In DtMovimientos.Rows For Each RowMovimiento As DataRow In DtSalidas.Rows
Dim CveConceptoDevolucion As Integer = -1 Dim CveConceptoDevolucion As Integer = -1
Dim CveAlmacenDevolucion As Integer = -1 Dim CveAlmacenDevolucion As Integer = -1
Dim CveMovimientoDevolucion As Integer = 0
Dim Folio As Integer = 0
Select Case RowMovimiento("CveConcepto").ToString().ToEntero() Select Case RowMovimiento("CveConcepto").ToString().ToEntero()
Case 3 Case 3
CveConceptoDevolucion = 18 'DEVOLUCION DEL CLIENTE CveConceptoDevolucion = 18 'DEVOLUCION DEL CLIENTE
CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero() CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
Case 40 Case 40
CveConceptoDevolucion = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA CveConceptoDevolucion = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA
'SI TIENE REMISIONES RELACIONADAS CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
If DtRemisionesFacturadas.Rows.Count > 0 Then ''SI TIENE REMISIONES RELACIONADAS
Dim RowRemision As DataRow = DtExistencias.FiltroPrimero($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}") 'If DtRemisionesFacturadas.Rows.Count > 0 Then
Dim CveRemision As Integer = RowRemision("CveRemision").ToString().ToEntero() ' Dim RowRemision As DataRow = DtExistencias.FiltroPrimero($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}")
Dim CancelarRemision As Boolean = (ListaRemisionesCancelar IsNot Nothing) AndAlso (ListaRemisionesCancelar.Any(Function(CveRemisionCancelar) CveRemisionCancelar = CveRemision)) ' Dim CveRemision As Integer = RowRemision("CveRemision").ToString().ToEntero()
'SI LA REMISION SE VA A CANCELAR DEBE REGRESAR AL ALMACEN GENERAL
If CancelarRemision Then
CveAlmacenDevolucion = RowRemision("CveAlmacenDevolucion").ToString().ToEntero()
Else
CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
End If
Else
CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
End If
' 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
' If CancelarRemision Then
' CveAlmacenDevolucion = RowRemision("CveAlmacenDevolucion").ToString().ToEntero()
' Else
' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
' End If
'Else
' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero()
'End If
End Select End Select
Dim CveMovimientoDevolucion As Integer = 0 'SI TIENE SALDO PENDIENTE POR DEVOLVER GENERA UN MOVIMIENTO DE DEVOLUCION
Dim Folio As Integer = 0
'VERIFICAR SI YA TIENE UNA 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(CveAlmacenDevolucion, CveConceptoDevolucion, 1, Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=-1) CveMovimientoDevolucion = ObjInventario.AddMovimiento(CveAlmacenDevolucion, CveConceptoDevolucion, 1, Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=-1)
@@ -4518,30 +4525,15 @@ Namespace Modelos
End If End If
End If End If
End If End If
'Else
' 'UTILIZA LA DEVOLUCION YA REALIZADA
' Dim CveConceptoDevolucion As Integer = 18 'DEVOLUCION DEL CLIENTE
' If UsuarioActual.Empresa.Funcionalidad(575) = "1" Then
' CveConceptoDevolucion = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA
' End If
' If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then
' CveMovimientoDevolucion = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", $"CvePS IS NULL AND CveConcepto = {CveConceptoDevolucion}").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
'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION '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 'SI ES DEVOLUCION DEL CLIENTE DEBE REGRESAR A ENTREGA POR ADELANTADO
If CveConceptoDevolucion = 18 Then If Not ErrorCancelar AndAlso CveConceptoDevolucion = 18 AndAlso RevivirRemisiones Then
If Not ErrorCancelar AndAlso RevivirRemisiones Then If Not GeneraMovimientosEntregaPorAdelantadoRemision(CveMovimientoDevolucion, ObjVentas, ObjInventario, DtDevRem, ListaRemisionesCancelar) Then
If Not GeneraMovimientosEntregaPorAdelantadoRemision(CveMovimientoDevolucion, ObjVentas, ObjInventario, DtDevRem, ListaRemisionesCancelar) Then ErrorCancelar = True
ErrorCancelar = True MensajeError = "Ocurrió un error al generar los movimientos de devolución a remisión"
MensajeError = "Ocurrió un error al generar los movimientos de devolución a remisión"
End If
End If End If
End If End If
@@ -4556,12 +4548,45 @@ Namespace Modelos
Next Next
'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
'SI EXISTEN HAY EXISTENCIA EN (ENTREGA POR ADELANTADO) SE TIENE QUE REGRESAR AL ALMACEN GENERAL
If Not ErrorCancelar AndAlso ListaRemisionesCancelar IsNot Nothing AndAlso ListaRemisionesCancelar.Count > 0 Then
For Each CveRemision As Integer In ListaRemisionesCancelar
For Each RowDevolucion As DataRow In DtDevoluciones.FiltraParametros($"CveRemision={CveRemision}", DistinctColumns:={"CveRemision", "CveAlmacen", "CveAlmacenDestino"}).Rows
Dim DtDevRemision As DataTable = DtDevoluciones.FiltraParametros($"CveRemision={CveRemision}")
CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero()
CveAlmacenDevolucion = RowDevolucion("CveAlmacenDestino").ToString().ToEntero()
'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN GENERAL
If Not CancelarMovimientosRemision(CveRemision, CveAlmacen, CveAlmacenDevolucion, DtDevRemision, ObjVentas, ObjInventario) Then
ErrorCancelar = True
MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión."
Exit For
End If
DtDevRemision.Dispose()
Next
Next
End If
'REALIZA LA DEVOLUCION AL ALMACEN VIRTUAL 'REALIZA LA DEVOLUCION AL ALMACEN VIRTUAL
If Not GeneraMovimientosVirtuales(CveVenta, ObjInventario) Then If Not GeneraMovimientosVirtuales(CveVenta, ObjInventario) Then
ErrorCancelar = True ErrorCancelar = True
MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar." MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar."
End If End If
'VERIFICAR MOVIMIENTOS DE APARTADOS
If Not ErrorCancelar Then If Not ErrorCancelar Then
If Not GeneraMovimientosApartados(ObjInventario) Then If Not GeneraMovimientosApartados(ObjInventario) Then
ErrorCancelar = True ErrorCancelar = True
@@ -4957,6 +4982,69 @@ Namespace Modelos
Return Not ErrorCancelar Return Not ErrorCancelar
End Function End Function
Private Function CancelarMovimientosRemision(CveRemision As Integer, CveAlmacen As Integer, CveAlmacenDestino As Integer, DtMovDetalle As DataTable, ByRef ObjVentas As ClsVentas, ByRef ObjInventario As ClsInventarios) As Boolean
Dim ErrorCancelar As Boolean = False
Dim CveMovimientoSalidaDevRem As Integer = 0
Dim FolioMovimientoSalidaDevRem As Integer = 0
Dim CveMovimientoEntradaDevRem As Integer = 0
Dim FolioMovimientoEntradaDevRem As Integer = 0
'SALIDA DE (ENTREGA POR ADELANTADO)
CveMovimientoSalidaDevRem = ObjInventario.AddMovimiento(CveAlmacen, 8, 1, Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveRemision, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=CveAlmacenDestino)
FolioMovimientoSalidaDevRem = ObjInventario.Folio
'ENTRADA A (ALMACEN GENERAL)
CveMovimientoEntradaDevRem = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, 1, Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveRemision, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimientoSalidaDevRem, CveAlmacenDestino:=CveAlmacenDestino)
FolioMovimientoEntradaDevRem = ObjInventario.Folio
If Not (CveMovimientoSalidaDevRem > 0 And CveMovimientoEntradaDevRem > 0) Then
ErrorCancelar = True
End If
'SALIDA DE (ENTREGA POR ADELANTADO)
If Not ErrorCancelar Then
For Each DrRem As DataRow In DtMovDetalle.FiltraParametros($"CveRemision = {CveRemision}").Rows
Dim CveVentaDetalleRem = DrRem("CveVentaDetalleRemision").ToString.ToEntero
Dim CantidadRem = DrRem("Cantidad").ToString.ToDecimal
If Not CveVentaDetalleRem > 0 Then
ErrorCancelar = True
Exit For
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaDevRem, DrRem("Cantidad").ToString.ToDecimal, DrRem("CveUM").ToString.ToEntero, DrRem("CvePS").ToString.ToEntero, DrRem("PU").ToString.ToDecimal, DrRem("CveActivoFijo").ToString.ToEntero, -1, DrRem("SerieLote").ToString, CveVentaDetalle:=CveVentaDetalleRem, Lote:=DrRem("Lote").ToString, Batch:=DrRem("Batch").ToString) Then
ErrorCancelar = True
Exit For
End If
If ErrorCancelar Then
Exit For
End If
Next
End If
'ENTRADA A (ALMACEN GENERAL)
If Not ErrorCancelar Then
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaDevRem, UsuarioActual.CveEmpresa) Then
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
ErrorCancelar = True
Exit For
End If
Next
End If
End If
If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveRemision) Then
ErrorCancelar = True
End If
Return Not ErrorCancelar
End Function
Private Function GeneraMovimientosApartados(ByRef ObjInventario As ClsInventarios) As Boolean Private Function GeneraMovimientosApartados(ByRef ObjInventario As ClsInventarios) As Boolean
Dim ErrorCancelar As Boolean = False Dim ErrorCancelar As Boolean = False
If Not ErrorCancelar Then If Not ErrorCancelar Then

View File

@@ -4334,7 +4334,7 @@ Partial Class Ventas
If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") AndAlso GvRemisiones.Rows.Count > 0 Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") AndAlso GvRemisiones.Rows.Count > 0 Then
ChkDevAlm.Checked = True ChkDevAlm.Checked = True
ChkDevAlm.Enabled = False ChkDevAlm.Enabled = False
LiDevolucionAlmacen.Visible = False 'LiDevolucionAlmacen.Visible = False
End If End If
End If End If