diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 07f8fecbf..9fdf3e692 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -4571,7 +4571,7 @@ Namespace Modelos Next - 'SI EXISTEN HAY EXISTENCIA EN (ENTREGA POR ADELANTADO) SE TIENE QUE REGRESAR AL ALMACEN GENERAL + 'SI EXISTEN HAY EXISTENCIA EN (ENTREGA POR ADELANTADO) SE TIENE QUE REGRESAR AL ALMACEN ORGINAL (GENERAL,SIN COSTO) If Not ErrorCancelar AndAlso ListaRemisionesCancelar IsNot Nothing AndAlso ListaRemisionesCancelar.Count > 0 Then 'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO) @@ -4584,21 +4584,24 @@ Namespace Modelos End If End If - 'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN GENERAL + 'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO) If Not ErrorCancelar AndAlso DtDevoluciones IsNot Nothing Then For Each CveRemision As Integer In ListaRemisionesCancelar Dim DtDevRemision As DataTable = DtDevoluciones.FiltraParametros($"CveRemision={CveRemision}") - Dim RowDevolucion As DataRow = DtDevRemision.FiltraParametros("", DistinctColumns:={"CveRemision", "CveAlmacen", "CveAlmacenDestino"}).Rows(0) + Dim DtDevMovs = DtDevRemision.FiltraParametros("", DistinctColumns:={"CveMovimiento", "CveRemision", "CveAlmacen", "CveAlmacenDestino"}) - CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero() - CveAlmacenDevolucion = RowDevolucion("CveAlmacenDestino").ToString().ToEntero() + For Each RowDevolucion As DataRow In DtDevMovs.Rows + CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero() + CveAlmacenDevolucion = RowDevolucion("CveAlmacenDestino").ToString().ToEntero() + + If Not CancelarMovimientosRemision(CveRemision, CveAlmacen, CveAlmacenDevolucion, DtDevRemision.FiltraParametros($"CveMovimiento={RowDevolucion("CveMovimiento")}"), ObjVentas, ObjInventario) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión." + Exit For + End If + Next - 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 Next Else ErrorCancelar = True @@ -5028,7 +5031,7 @@ Namespace Modelos 'SALIDA DE (ENTREGA POR ADELANTADO) If Not ErrorCancelar Then - For Each DrRem As DataRow In DtMovDetalle.FiltraParametros($"CveRemision = {CveRemision}").Rows + For Each DrRem As DataRow In DtMovDetalle.Rows Dim CveVentaDetalleRem = DrRem("CveVentaDetalleRemision").ToString.ToEntero Dim CantidadRem = DrRem("Cantidad").ToString.ToDecimal @@ -5037,7 +5040,7 @@ Namespace Modelos 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, CveAF:=DrRem("CveActivoFijo").ToString.ToEntero, Serie:=DrRem("Serie").ToString, CveVentaDetalle:=CveVentaDetalleRem, Lote:=DrRem("Lote").ToString) Then + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaDevRem, DrRem("Cantidad").ToString.ToDecimal, DrRem("CveUM").ToString.ToEntero, DrRem("CvePS").ToString.ToEntero, DrRem("PU").ToString.ToDecimal, CveAF:=DrRem("CveActivoFijo").ToString.ToEntero, Serie:=DrRem("Serie").ToString, Lote:=DrRem("Lote").ToString, CveVentaDetalle:=CveVentaDetalleRem, CveMovimientoDetalleEntrada:=DrRem("CveMovimientoDetalle").ToString().ToEntero()) Then ErrorCancelar = True Exit For End If diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 19bf302aa..6532d27a0 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -509,7 +509,7 @@ Partial Class Inventarios_EntregaAlmacen TipoEntrega = 1 BtnGuardar.Visible = True - Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2)" + Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2,26)" If UsuarioActual.CveSubProyecto = 8804 Then StrAlmacenes = "CveTipoAlmacen IN (1,2,12)" @@ -1663,7 +1663,16 @@ Partial Class Inventarios_EntregaAlmacen DtTraspasos.Columns.Add("CveTipoAlmacen", GetType(Integer)) DtTraspasos.Columns.Add("CveConceptoMovimientoSalida", GetType(Integer)) - Dim CveMovimientoSalida = -1, FolioSalida = -1, CveMovimientoEntrada = -1, CveMovimientoEntradaApartado = -1, FolioEntrada = -1, CveMovimientoSalidaDevRem = -1, FolioMovimientoSalidaDevRem = -1, CveMovimientoEntradaDevRem = -1, FolioMovimientoEntradaDevRem = -1 + Dim CveMovimientoSalida = -1, FolioSalida = -1, CveMovimientoEntrada = -1, CveMovimientoEntradaApartado = -1, FolioEntrada = -1, CveMovimientoSalidaDevRem = -1, FolioMovimientoSalidaDevRem = -1, CveMovimientoEntradaDevRem = -1, FolioMovimientoEntradaDevRem = -1 + + + Dim DtDevSinCosto As New DataTable + DtDevSinCosto.Columns.Add("CveAlmacen", GetType(Integer)) + DtDevSinCosto.Columns.Add("Almacen", GetType(String)) + DtDevSinCosto.Columns.Add("CveMovimientoEntrada", GetType(Integer)) + DtDevSinCosto.Columns.Add("FolioEntrada", GetType(Integer)) + DtDevSinCosto.Columns.Add("CveTipoAlmacen", GetType(Integer)) + DtDevSinCosto.Columns.Add("CveConceptoMovimientoSalida", GetType(Integer)) Try 'VALIDA EXISTENCIA 2 @@ -2189,11 +2198,70 @@ Partial Class Inventarios_EntregaAlmacen End If Next End If + End If + ' TERMINA: GARANTIAS + + 'DEVOLUCION DE SIN COSTO + Dim CantidadEntradaSinCosto As Decimal = 0 + + If Not ErrorMovInv AndAlso TipoMovimiento = 2 AndAlso UsuarioActual.Empresa.Funcionalidad(587) = "1" Then + For Each Dr1 As DataRow In DtExistencias.FiltraParametros("CveTipoAlmacenDevolucion = 26").Rows + Dim CveMovimientoSalidaSinCosto = Dr1("CveMovimiento").ToString.ToEntero + + 'Dim CveAlmacenSinCosto As Integer = Dr1("CveAlmacenDevolucion").ToString().ToEntero() + + 'Dim AlmacenSinCosto As String = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=26).FiltroPrimeroValor("Almacen", $"CveAlmacen={CveAlmacenSinCosto}").ToString() + + Dim CveMovimientoDevolucionSinCosto = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 41, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, + Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, + Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4") + Dim FolioDevSinCosto = ObjInventario.Folio + + If Not CveMovimientoDevolucionSinCosto > 0 Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.") + Exit For + End If + + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaSinCosto, UsuarioActual.CveEmpresa) Then + For Each Dr As DataRow In ObjInventario.DtResultados.Rows + + CantidadEntradaSinCosto += Dr("Cantidad").ToString.ToDecimal() + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucionSinCosto, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString.ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString, "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString.ToEntero, -1)) Then + ErrorMovInv = True + TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") + Exit For + End If + Next + End If + + If ErrorMovInv Then Exit For + + Dim DrMovto = DtDevSinCosto.NewRow + DrMovto("Almacen") = DdlAlmacen.SelectedItem.Text + DrMovto("CveAlmacen") = DdlAlmacen.SelectedValue.ToEntero() + DrMovto("CveMovimientoEntrada") = CveMovimientoDevolucionSinCosto + DrMovto("FolioEntrada") = FolioDevSinCosto + DrMovto("CveTipoAlmacen") = 10 + DrMovto("CveConceptoMovimientoSalida") = 41 + DtDevSinCosto.Rows.Add(DrMovto) + + If Not ErrorMovInv Then + ErrorMovInv = Not GenerarPrePoliza(ObjInventario, ObjVentas, ObjConta, CveMovimientoDevolucionSinCosto, TextoError) + End If + + Next End If - ' TERMINA: GARANTIAS - - Dim CantidadPendientePorSalir As Decimal = DtDatos.SUM("CantidadGV").ToDecimal() - CantidadSalidaSinCosto + Dim CantidadPendientePorSalir As Decimal = DtDatos.SUM("CantidadGV").ToDecimal() + + If TipoMovimiento = 1 Then + CantidadPendientePorSalir = CantidadPendientePorSalir - CantidadSalidaSinCosto + ElseIf TipoMovimiento = 2 Then + CantidadPendientePorSalir = CantidadPendientePorSalir - CantidadEntradaSinCosto + End If + If Not ErrorMovInv AndAlso CantidadPendientePorSalir > 0 Then Dim ConceptoMovimiento = 3 ConceptoMovimiento = If(TipoMovimiento = 1, ConceptoMovimiento, 18) @@ -2261,7 +2329,7 @@ Partial Class Inventarios_EntregaAlmacen CantidadPendiente = 0 Dim Cont As Integer = 0 For Each Dr As DataRow In DtDatos.Rows - CantidadPendiente = Dr("CantidadGV").ToString.ToDecimal - Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente = Dr("CantidadGV").ToString.ToDecimal - Dr("CantidadTraspaso").ToString.ToDecimal - CantidadEntradaSinCosto If CantidadPendiente > 0 Then Dim PU As Decimal = 0 @@ -2271,7 +2339,7 @@ Partial Class Inventarios_EntregaAlmacen If DtDetalle.Rows.Count > 0 Then For Each Dr1 As DataRow In DtDetalle.Rows If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then - PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND Serie = '{Dr1("Serie").ToString}'").ToString.ToDecimal + PU = DtExistencias.FiltroPrimeroValor("PU", $"CveTipoAlmacenDevolucion <> 26 AND CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND Serie = '{Dr1("Serie").ToString}'").ToString.ToDecimal End If If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, Serie:=Dr1("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString.ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString, "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString.ToEntero, -1)) Then @@ -2626,6 +2694,13 @@ Partial Class Inventarios_EntregaAlmacen Next End If + If DtDevSinCosto.Rows.Count > 0 Then + Msg.AppendFormat("

Movimientos de Control (Sin Costo):") + For Each Dr As DataRow In DtDevSinCosto.Rows + Msg.AppendFormat("
Almacén {0} | Devolución directa de almacen: {2} ", Dr("Almacen"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada")) + Next + End If + If CveMovimientoGarantia > 0 Then Msg.AppendFormat("
Movimiento de Entrada (garantías): {1}", CveMovimientoGarantia, FolioGarantia) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoGarantia))) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index ea5a9df12..3ed3f2224 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -16086,6 +16086,8 @@ Partial Class Ventas Dim DtMovimientosDetalles As DataTable DtRemConceptosSurtidos = Nothing + Dim TieneMovimientosSinCosto As Boolean = False + 'Obtenemos los movimientos detalle If ObjInventario.GetInv_Mov(CveRemision, UsuarioActual.CveEmpresa) Then @@ -16116,6 +16118,9 @@ Partial Class Ventas 'VALIDAR SI TIENE PRODUCTOS POR TRASPASAR If DtMovimientos.Rows.Count > 0 Then Dim GeneroMovimientoAlmacen As Boolean = False + + TieneMovimientosSinCosto = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen=26") > 0 + For Each dr As DataRow In DtMovimientos.Rows 'Obtenemos los Movimientos de salida If ObjInventario.GetMovimientos(dr("CveMovimiento").ToString().ToEntero(), ConceptoMovimiento, -1, UsuarioActual.CveEmpresa) Then @@ -16132,9 +16137,14 @@ Partial Class Ventas Dim MovDetalle As New DataTable Dim AplicaMovimientoDetalleEntrada As Boolean = False + If RemisionesLista.Count > 0 Then AplicaMovimientoDetalleEntrada = True - MovDetalle = CuadrarFacturaMovimientos(DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")} AND (TieneSalidaxFactura IS NULL OR SaldoAlmacen > 0)")) + If TieneMovimientosSinCosto Then + MovDetalle = DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}") + Else + MovDetalle = CuadrarFacturaMovimientos(DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")} AND (TieneSalidaxFactura IS NULL OR SaldoAlmacen > 0)")) + End If Else MovDetalle = DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}") End If @@ -16209,7 +16219,10 @@ Partial Class Ventas MovDetalle.Dispose() - OcurrioError = Not GeneroMovimientoAlmacen + 'VERIFICA QUE SE HAYA GENERADO MOVIMIENTO DE ALMACEN + If Not OcurrioError Then + OcurrioError = Not GeneroMovimientoAlmacen + End If End If End If