diff --git a/Inventarios/TraspasoAlmacen.aspx b/Inventarios/TraspasoAlmacen.aspx index c2c8e6347..b5069e9dd 100644 --- a/Inventarios/TraspasoAlmacen.aspx +++ b/Inventarios/TraspasoAlmacen.aspx @@ -609,6 +609,12 @@ +
+ +
+ +
+
diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index cbccac8d7..3b1b0db67 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -1460,6 +1460,9 @@ Partial Class Inventarios_TraspasoAlmacen End Sub Private Sub CargaRecepcion() + DivRealizarDevolucion.Visible = False + ChkRealizarDevolucion.Checked = False + Dim Dtt As DataTable = Nothing FolioBusqueda = If(TxtFolioRecepcion.Text = "", -1, TxtFolioRecepcion.Text.ToEntero) @@ -1506,6 +1509,11 @@ Partial Class Inventarios_TraspasoAlmacen If UsuarioActual.TienePermisoProceso(290) Then BtnCancelarTraspaso.Visible = True End If + + If UsuarioActual.Empresa.Funcionalidad(162) = "1" Then + DivRealizarDevolucion.Visible = True + ChkRealizarDevolucion.Checked = True + End If End If @@ -1518,6 +1526,7 @@ Partial Class Inventarios_TraspasoAlmacen UpDatosRecepcion.Update() UPDivCodigoSeriePSRecepcion.Update() + UPDatosAlmacen.Update() End Sub Protected Sub GvDatosRecepcion_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosRecepcion.RowDataBound @@ -1815,6 +1824,225 @@ Partial Class Inventarios_TraspasoAlmacen End Sub + Private Class MCancelacionTraspaso + Public Property TieneError As Boolean = False + Public Property MsgError As String = "" + Public Property CveMovimientoEntrada As Integer = -1 + Public Property FolioEntrada As Integer = 0 + Public Property CveMovimientoSalidaTransitorio As Integer = -1 + Public Property FolioSalidaTransitorio As Integer = 0 + End Class + + Private Function CancelarTraspaso(ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, CveAlmacenDestino As Integer, Fecha As DateTime) As MCancelacionTraspaso + Dim Retorno As New MCancelacionTraspaso() + Dim ErrorMovInv As Boolean = False + Try + Dim CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenDestino, 27, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, + Observaciones:=TxtObservacionesRecepcion.Text.Trim, Recibio:=TxtRecibio.Text, CveAlmacenDestino:=CveAlmacenDestino, + CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="TA/C") + If CveMovimientoEntrada <= 0 Then + Retorno.MsgError = "No se pudo generar el movimiento" + ErrorMovInv = True + End If + + Retorno.CveMovimientoEntrada = CveMovimientoEntrada + Retorno.FolioEntrada = ObjInventario.Folio + + 'AGREGAMOS LA SALIDA + Dim CveMovimientoSalidaTransitorio = ObjInventario.AddMovimiento(CveAlmacenTransitorio, 8, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, + Observaciones:=TxtObservacionesRecepcion.Text.Trim, CveAlmacenDestino:=CveAlmacenDestino, + CveMovimientoRelacionado:=CveMovimientoEntrada, Modulo:="TA/G12") + + Retorno.CveMovimientoSalidaTransitorio = CveMovimientoSalidaTransitorio + + Dim CvePrePoliza As Integer = -1 + Dim Concepto As String = TxtObservacionesRecepcion.Text + If Concepto = "" Then Concepto = "Cancelación Traspaso" + + If Not ErrorMovInv Then + Retorno.FolioSalidaTransitorio = ObjInventario.Folio + CvePrePoliza = ObjConta.AddPrePolizas("Inventario/TraspasoAlmacen", 53, 0, 0, 1, Fecha, Concepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + + If CvePrePoliza <= 0 Then + Retorno.MsgError = "No se pudo generar la Poliza para la cancelación" + ErrorMovInv = True + End If + End If + + If CveMovimientoEntrada <= 0 And Not ErrorMovInv Then + Retorno.MsgError = "No se pudo generar el movimiento de entrada correctamente" + ErrorMovInv = True + Else + Dim CveMovimientoDetalleSalida As Integer = 0 + Dim importe As Double = 0 + + Dim Dtt As DataTable = Nothing + + FolioBusqueda = TxtFolioRecepcion.Text.ToEntero + + If ObjInventario.GetMovimientosTransitorios(DdlAlmacenRecepcion.SelectedValue.ToEntero, -1, DdlAlmacenTransitorioRecepcion.SelectedValue.ToEntero, -1, FolioBusqueda, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then + Dtt = ObjInventario.DtResultados.FiltraParametros(String.Format("CveTipoAlmacenDestino <> 4")) + Else + Dtt = Nothing + End If + + If Dtt IsNot Nothing Then + For Each GvRow As DataRow In Dtt.Rows + Dim CvePS As Integer = GvRow("CvePS").ToString().ToEntero + 'DEBE CONSIDERAR SOLO LAS FILAS QUE TENGA PRODUCTOS, NO EL TOTALIZADOR + If CvePS > 0 Then + CveMovimientoDetalleSalida = GvRow("CveMovimientoDetalle").ToString.ToEntero + Dim Cantidad As Decimal = GvRow("Cantidad").ToString.ToDecimal + Dim PrecioUnitario As Decimal = GvRow("PU").ToString.ToDecimal + If CveMovimientoDetalleSalida <= 0 Then + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al guardar los movimientos de salida" + Exit For + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Cantidad, GvRow("CveUM").ToString().ToEntero, CvePS, PrecioUnitario, -1, -1, Serie:=GvRow("Serie").ToString, Lote:=GvRow("Lote").ToString(), FechaCaducidad:=GvRow("FechaCaducidad").ToString().ToDate, CveMovimientoDetalleEntrada:=CveMovimientoDetalleSalida) Then + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al guardar los movimientos de entrada" + Exit For + End If + 'MOV, Alm, Transito + If GvRow("CveMovimientoDetalleTransitorio").ToString.ToEntero > 0 Then + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaTransitorio, Cantidad, GvRow("CveUM").ToString.ToEntero, CvePS, PrecioUnitario, CveSeccionAlmacen:=-3, Serie:=GvRow("Serie").ToString, Lote:=GvRow("Lote").ToString, FechaCaducidad:=GvRow("FechaCaducidad").ToString().ToDate, CveMovimientoDetalleEntrada:=GvRow("CveMovimientoDetalleTransitorio").ToString.ToEntero) Then + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al guardar los movimientos de salida" + Exit For + End If + Else + CveMovimientoSalidaTransitorio = 0 + End If + importe += Cantidad * PrecioUnitario + End If + Next + Else + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al guardar los movimientos de salida" + End If + + + 'VIRTUAL ENTRADA + + 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:=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 + 'If CveTipoAlmacenOrigen = 27 Then + ' CveAlmacenVirtual = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $" CveTipoAlmacen =25 AND CveSubProyecto={CveSubProyecto}").ToEntero() + 'Else + ' CveAlmacenVirtual = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $" CveTipoAlmacen =24 AND CveSubProyecto={CveSubProyecto}").ToEntero() + 'End If + + Dim CveMovimientoVirtualEntrada As Integer = -1 + Dim CveMovimientoVirtualSalida As Integer = -1 + + 'VERIFICA SI TIENE ALMACEN VIRTUAL ASIGNADA + If CveAlmacenVirtual > 0 And CveAlmacenVirtualSalida > 0 Then + + Dim dtvirtual As DataTable = Nothing + Dim importePoliza As Decimal = 0 + + If ObjInventario.GetMovimientosDetalleVirtual(CveMovimientoEntrada, UsuarioActual.CveEmpresa, CveMovimientoRelacionado:=CveMovimientoSalida) Then + dtvirtual = ObjInventario.DtResultados + If dtvirtual.Rows.Count > 0 Then + + CveMovimientoVirtualEntrada = ObjInventario.AddMovimiento(CveAlmacenVirtual, 36, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservacionesRecepcion.Text.Trim, CveMovimientoRelacionado:=CveMovimientoEntrada, Modulo:="TA/C2") + + CveMovimientoVirtualSalida = ObjInventario.AddMovimiento(CveAlmacenVirtualSalida, 37, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservacionesRecepcion.Text.Trim, CveMovimientoRelacionado:=CveMovimientoSalidaTransitorio, Modulo:="TA/C3") + + Dim FolioVirtualEntrada = ObjInventario.Folio + + For Each RowVirtual As DataRow In dtvirtual.Rows + Dim CvePS = RowVirtual("CvePS").ToString().ToEntero() + Dim CantidadUsado As Decimal = RowVirtual("Cantidad").ToString().ToDecimal() + Dim PU As Decimal = RowVirtual("PUOriginal").ToString().ToDecimal() + Dim CveUM As Integer = RowVirtual("CveUM").ToString().ToEntero() + Dim CostoIndirecto As Decimal = RowVirtual("CostoIndirecto").ToString().ToDecimal() + + + importePoliza = importePoliza + (CantidadUsado * PU) + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtualEntrada, CantidadUsado, CveUM, CvePS, PU, -1, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + ErrorMovInv = True + Exit For + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtualSalida, CantidadUsado, CveUM, CvePS, PU, -1, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + ErrorMovInv = True + Exit For + End If + + Next + End If + + 'Else + ' TextoError = "No se pudo registrar el movimiento virtual" + ' ErrorMovInv = True + End If + + + If Not ErrorMovInv AndAlso (CveMovimientoSalida > 0 And CveMovimientoVirtualEntrada > 0) Then + + Dim CvePrePolizaMovVirtual As Integer = ObjConta.AddPrePolizas("TA/C2|TA/C3", 53, importePoliza, importePoliza, 1, TxtFecha.Text.ToDate, "TA/C2|TA/C3", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + If CvePrePolizaMovVirtual > 0 Then + If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaMovVirtual, True, importePoliza, importePoliza, 68, TxtObservacionesRecepcion.Text, TxtObservacionesRecepcion.Text, -1, -1, CveMovimientoAlmacen:=CveMovimientoVirtualSalida, Contabilizable:=False) Then + ErrorMovInv = True + End If + + If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaMovVirtual, False, importePoliza, importePoliza, 68, TxtObservacionesRecepcion.Text, TxtObservacionesRecepcion.Text, -1, -1, CveMovimientoAlmacen:=CveMovimientoVirtualEntrada, Contabilizable:=False) Then + ErrorMovInv = True + End If + Else + ErrorMovInv = True + End If + + End If + 'Else + ' TextoError = "La Sucursal no tiene creado un almacen virtual" + ' ErrorMovInv = True + End If + + End If + + If Not ErrorMovInv Then + Dim ImporteDecimal As Decimal = importe.ToDecimal.RoundAD + Dim IdCtaContable As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", DdlAlmacenTransitorioRecepcion.SelectedValue.ToEntero)).ToEntero + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteDecimal, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContable, -1, + CveMovimientoAlmacen:=CveMovimientoEntrada, ImporteMX:=ImporteDecimal, Contabilizable:=False) Then + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al cancelar el traspaso" + End If + + If CveMovimientoSalidaTransitorio > 0 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteDecimal, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContable, -1, + CveMovimientoAlmacen:=CveMovimientoSalidaTransitorio, ImporteMX:=ImporteDecimal, Contabilizable:=False) Then + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al cancelar el traspaso" + End If + End If + + End If + + End If + + Catch ex As Exception + ErrorMovInv = True + Retorno.MsgError = "Ocurrió un error al cancelar el traspaso" + OnError("Ocurrió un erro al cancelar el traspaso", ex) + End Try + + Retorno.TieneError = ErrorMovInv + + Return Retorno + End Function + Protected Sub BtnRecibir_Click(sender As Object, e As EventArgs) If GvDatosRecepcion.Rows.Count > 0 Then 'Valida Movimientos @@ -2039,6 +2267,13 @@ Partial Class Inventarios_TraspasoAlmacen End If End If + Dim CancelacionTraspaso As MCancelacionTraspaso = Nothing + If UsuarioActual.Empresa.Funcionalidad(162) = "1" AndAlso ChkRealizarDevolucion.Checked AndAlso Not ErrorMovInv Then + CancelacionTraspaso = CancelarTraspaso(ObjInventario, ObjConta, GvDatosRecepcion.Rows(0).DataKey("CveAlmacenSalida").ToEntero, TxtFechaRecepcion.Text.ToDateTime()) + If CancelacionTraspaso IsNot Nothing Then + ErrorMovInv = CancelacionTraspaso.TieneError + End If + End If If Not ErrorMovInv Then @@ -2053,6 +2288,9 @@ Partial Class Inventarios_TraspasoAlmacen Mensaje.AppendFormat("
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada))) 'onclick='ImprimirTraslado()' If CveMovimientoVirtualEntrada > 0 Then Mensaje.AppendFormat("


Folio Virtual {2}
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoVirtualEntrada)), CveMovimientoVirtualEntrada, FolioVirtualEntrada) 'onclick='ImprimirTraslado()' + If CancelacionTraspaso IsNot Nothing Then + If CancelacionTraspaso.CveMovimientoEntrada > 0 Then Mensaje.AppendFormat("


Folio Devolución {2}
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CancelacionTraspaso.CveMovimientoEntrada)), CancelacionTraspaso.CveMovimientoEntrada, CancelacionTraspaso.FolioEntrada) 'onclick='ImprimirTraslado()' + End If Alert(Mensaje.ToString, TipoMensaje.MsgInformacion)