Option Explicit On Option Strict On Imports System.Data Imports Extensiones Partial Class Inventarios_PaquetesArmadoDesarmado Inherits ClsPaginas #Region " PROPIEDADES " Public Property CveAlmacenArmado As Integer Get Return ViewState("CveAlmacenArmado").ToString.ToEntero End Get Set(value As Integer) ViewState("CveAlmacenArmado") = value End Set End Property Public Property CvePaqueteArmado() As Integer Get Return ViewState("CvePaqueteArmado").ToString.ToEntero End Get Set(value As Integer) ViewState("CvePaqueteArmado") = value End Set End Property Public Property CveAlmacenDesarmado As Integer Get Return ViewState("CveAlmacenDesarmado").ToString.ToEntero End Get Set(value As Integer) ViewState("CveAlmacenDesarmado") = value End Set End Property Public Property CvePaqueteDesarmado() As Integer Get Return ViewState("CvePaqueteDesarmado").ToString.ToEntero End Get Set(value As Integer) ViewState("CvePaqueteDesarmado") = value End Set End Property Private Property CvePSSerieLote As Integer Get Return CType(ViewState("CvePSSerieLote"), Integer) End Get Set(value As Integer) ViewState("CvePSSerieLote") = value End Set End Property Private Property CveUMSerieLote As Integer Get Return CType(ViewState("CveUMSerieLote"), Integer) End Get Set(value As Integer) ViewState("CveUMSerieLote") = value End Set End Property Private Property CveConsecSerieLote As Integer Get Return CType(ViewState("CveConsecSerieLote"), Integer) End Get Set(value As Integer) ViewState("CveConsecSerieLote") = value End Set End Property Private Property DtDatosDetalle As DataTable Get Return CType(ViewState("DtDatosDetalle"), DataTable) End Get Set(value As DataTable) ViewState("DtDatosDetalle") = value End Set End Property Private Property CveVendedor As Integer Get Return CType(ViewState("CveVendedor"), Integer) End Get Set(value As Integer) ViewState("CveVendedor") = value End Set End Property Private Property CveCliente As Integer Get Return CType(ViewState("CveCliente"), Integer) End Get Set(value As Integer) ViewState("CveCliente") = value End Set End Property Private Property CveTipoPS As Integer Get Return CType(ViewState("CveTipoPS"), Integer) End Get Set(value As Integer) ViewState("CveTipoPS") = value End Set End Property Private Property DtSeriesDesarmado As DataTable Get Return CType(ViewState("DtSeriesDesarmado"), DataTable) End Get Set(value As DataTable) ViewState("DtSeriesDesarmado") = value End Set End Property '1 ARMADO '2 DESARMADO Private Property TipoMovimiento As Integer Get Return CType(ViewState("TipoMovimiento"), Integer) End Get Set(value As Integer) ViewState("TipoMovimiento") = value End Set End Property Private Property DtExistenciasDesarmado As DataTable Get Return CType(ViewState("DtExistenciasDesarmado"), DataTable) End Get Set(value As DataTable) ViewState("DtExistenciasDesarmado") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then InicializaValores() End If End Sub #Region " INICIALIZA VALORES " Private Sub InicializaValores() CreaDtSeriesDesarmado() 'CARGA PS PAQUETES DdlPaqueteArmado.DataSource = GlobalDTPS(UsuarioActual.CveEmpresa).FiltraParametros("CvePSPaquete > 0") DdlPaqueteArmado.DataBind() DdlPaqueteArmado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlPaqueteDesarmado.DataSource = GlobalDTPS(UsuarioActual.CveEmpresa).FiltraParametros("CvePSPaquete > 0") DdlPaqueteDesarmado.DataBind() DdlPaqueteDesarmado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenArmado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros("CveTipoAlmacen = 1") DdlAlmacenArmado.DataBind() DdlAlmacenArmado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenDesarmado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros("CveTipoAlmacen = 1") DdlAlmacenDesarmado.DataBind() DdlAlmacenDesarmado.Items.Insert(0, New ListItem("Seleccione", "-1")) TxtFechaArmado.Text = Now.ToShortDateString TxtFechaDesarmado.Text = Now.ToShortDateString DdlVendedorArmado.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa) DdlVendedorArmado.DataBind() DdlVendedorArmado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlClienteArmado.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClienteArmado.DataBind() DdlClienteArmado.Items.Insert(0, New ListItem("Seleccione", "-1")) RowClienteArmado.Visible = Not UsuarioActual.Empresa.Funcionalidad(146) = "1" DdlVendedorDesarmado.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa) DdlVendedorDesarmado.DataBind() DdlVendedorDesarmado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlClienteDesarmado.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClienteDesarmado.DataBind() DdlClienteDesarmado.Items.Insert(0, New ListItem("Seleccione", "-1")) RowClienteDesarmado.Visible = Not UsuarioActual.Empresa.Funcionalidad(146) = "1" UpGeneralesArmado.Update() UpGeneralesDesarmado.Update() CreaDtDetalle() CveVendedor = -1 CveCliente = -1 End Sub #End Region #Region " APARTADOS " Protected Sub DdlAlmacenArmado_SelectedIndexChanged(sender As Object, e As EventArgs) RowApartadosArmado.Visible = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveAlmacen = {DdlAlmacenArmado.SelectedValue.ToEntero} AND CveTipoAlmacen = 9").ToEntero > 0 UpFiltraArmado.Update() End Sub Protected Sub DdlAlmacenDesarmado_SelectedIndexChanged(sender As Object, e As EventArgs) RowApartadosDesarmado.Visible = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveAlmacen = {DdlAlmacenDesarmado.SelectedValue.ToEntero} AND CveTipoAlmacen = 9").ToEntero > 0 UpFiltraDesarmado.Update() End Sub #End Region #Region " PROCESAR - VERIFICAR EXISTENCIAS " Protected Sub BtnVerificarExistenciasArmado_Click(sender As Object, e As EventArgs) TipoMovimiento = 1 Limpia(TipoMovimiento) Dim ObjProductosServicios As New ClsProductosServicios Dim DtDatos As New DataTable Dim CveUMTemp = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPaqueteArmado.SelectedValue.ToEntero).FiltroPrimeroValor("CveUM").ToEntero If ObjProductosServicios.GetPaqueteDetalle(DdlPaqueteArmado.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, CveUMTemp, TxtCantidadArmado.Text.ToDouble, DdlAlmacenArmado.SelectedValue.ToEntero, TxtFechaArmado.Text.ToDate, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) Then DtDatos = ObjProductosServicios.DtResultados.FiltraParametros("CveTipoPS = 2").Copy Else DtDatos = Nothing Alert("Ocurrió un error al obtener los componentes del paquete. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If ObjProductosServicios.Dispose() If DtDatos Is Nothing Then Exit Sub End If CveVendedor = If(RowApartadosArmado.Visible, DdlVendedorArmado.SelectedValue.ToEntero, -1) CveCliente = If(RowClienteArmado.Visible, DdlClienteArmado.SelectedValue.ToEntero, -1) If DtDatos.Rows.Count > 0 Then For Each Dr As DataRow In DtDatos.Rows Dr("Cantidad") = Dr("Cantidad").ToString.ToDecimal * TxtCantidadArmado.Text.ToDecimal Next End If Dim TextoExistencias = "No hay existencia suficiente de los siguientes componentes:

" Dim ErrorExistencias = False For Each Dr As DataRow In DtDatos.Rows If Dr("CantidadDisponible2").ToString.ToDecimal < Dr("Cantidad").ToString.ToDecimal Then TextoExistencias += $"
- Componente: ""{Dr("CodigoPS")}""." ErrorExistencias = True End If Next If ErrorExistencias Then Alert(TextoExistencias, TipoMensaje.MsgAdvertencia) Else CveTipoPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPaqueteArmado.SelectedValue.ToEntero).FiltroPrimeroValor("Inv_CveMetodoInventario").ToEntero BtnGuadarArmado.Visible = True End If If CveTipoPS = 5 Then DivSeriesPaqueteArmado.Visible = True Dim Dt As New DataTable Dt.Columns.Add("Row", GetType(Integer)) Dt.Columns.Add("Serie", GetType(String)) For index = 1 To TxtCantidadArmado.Text.ToEntero Dim Row = Dt.NewRow Row("Row") = index Row("Serie") = "" Dt.Rows.Add(Row) Next GvSeriesPaqueteArmado.DataSource = Dt GvSeriesPaqueteArmado.DataBind() End If UpSeriesPaqueteArmado.Update() LbPaqueteArmado.Text = DdlPaqueteArmado.SelectedItem.Text CvePaqueteArmado = DdlPaqueteArmado.SelectedValue.ToEntero LbCantidadArmado.Text = TxtCantidadArmado.Text LbAlmacenArmado.Text = DdlAlmacenArmado.SelectedItem.Text CveAlmacenArmado = DdlAlmacenArmado.SelectedValue.ToEntero LbFechaArmado.Text = TxtFechaArmado.Text GvDatosArmado.DataSource = DtDatos GvDatosArmado.DataBind() If ErrorExistencias Then GvDatosArmado.Columns(4).Visible = False End If UpDatosArmado.Update() UpGeneralesArmado.Update() End Sub Protected Sub BtnVerificarExistenciasDesarmado_Click(sender As Object, e As EventArgs) DtDatosDetalle.Clear() BtnGuadarDesarmado.Visible = False TotalDesarmado.Visible = False CveTipoPS = -1 TxtSerieDesarmado.Text = "" CvePaqueteDesarmado = -1 TipoMovimiento = 2 Limpia(TipoMovimiento) DtSeriesDesarmado.Clear() GvDatosDesarmado.Columns(4).Visible = False DivSeriesPaqueteDesarmado.Visible = False GvSeriesPaqueteDesarmado.DataBind() BtnAgregarSerieDesarmado.Enabled = True Dim CveUMTemp = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPaqueteDesarmado.SelectedValue.ToEntero).FiltroPrimeroValor("CveUM").ToEntero CveVendedor = If(RowApartadosDesarmado.Visible, DdlVendedorDesarmado.SelectedValue.ToEntero, -1) CveCliente = If(RowClienteDesarmado.Visible, DdlClienteDesarmado.SelectedValue.ToEntero, -1) Dim FechaFin As String = TxtFechaDesarmado.Text.ToDateTime.ToString("yyyy/MM/dd 23:59") Dim ObjInventarios As New ClsInventarios Dim Existencia = ObjInventarios.GetExistenciasPS(DdlPaqueteDesarmado.SelectedValue.ToEntero, CveUMTemp, UsuarioActual.CveEmpresa, DdlAlmacenDesarmado.SelectedValue.ToEntero, FechaMovto:=FechaFin, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) Dim CostoPromedio = ObjInventarios.GetCostoPS(DdlPaqueteDesarmado.SelectedValue.ToEntero, TxtCantidadDesarmado.Text.ToDouble, DdlAlmacenDesarmado.SelectedValue.ToEntero, "-1", FechaFin.ToDate, CveTipoAlmacen:=-1) ObjInventarios.Dispose() If Existencia - TxtCantidadDesarmado.Text.ToDouble < 0 Then GvDatosDesarmado.Columns(4).Visible = False Alert($"No hay existencia suficiente del paquete ""{DdlPaqueteDesarmado.SelectedItem.Text}"" para desarmar. Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) Exit Sub Else CveTipoPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPaqueteDesarmado.SelectedValue.ToEntero).FiltroPrimeroValor("Inv_CveMetodoInventario").ToEntero End If LbTotal.Text = (CostoPromedio * TxtCantidadDesarmado.Text.ToDecimal).FormatoNumero Dim ObjProductosServicios As New ClsProductosServicios Dim DtDatos As New DataTable If ObjProductosServicios.GetPaqueteDetalle(DdlPaqueteDesarmado.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, CveUMTemp, TxtCantidadDesarmado.Text.ToDouble, DdlAlmacenArmado.SelectedValue.ToEntero, TxtFechaArmado.Text.ToDate, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) Then DtDatos = ObjProductosServicios.DtResultados.FiltraParametros("CveTipoPS = 2").Copy Else DtDatos = Nothing Alert("Ocurrió un error al obtener los componentes del paquete. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If ObjProductosServicios.Dispose() If DtDatos Is Nothing Then Exit Sub End If If DtDatos.Rows.Count > 0 Then For Each Dr As DataRow In DtDatos.Rows Dr("Cantidad") = Dr("Cantidad").ToString.ToDecimal * TxtCantidadDesarmado.Text.ToDecimal Next End If If CveTipoPS = 5 Then GvDatosDesarmado.Columns(4).Visible = True DivSeriesPaqueteDesarmado.Visible = True CreaDtSeriesDesarmado() DtSeriesDesarmado.Clear() GvSeriesPaqueteDesarmado.DataSource = DtSeriesDesarmado GvSeriesPaqueteDesarmado.DataBind() End If UpSeriesPaqueteDesarmado.Update() LbPaqueteDesarmado.Text = DdlPaqueteDesarmado.SelectedItem.Text CvePaqueteDesarmado = DdlPaqueteDesarmado.SelectedValue.ToEntero LbCantidadDesarmado.Text = TxtCantidadDesarmado.Text LbAlmacenDesarmado.Text = DdlAlmacenDesarmado.SelectedItem.Text CveAlmacenDesarmado = DdlAlmacenDesarmado.SelectedValue.ToEntero LbFechaDesarmado.Text = TxtFechaDesarmado.Text GvDatosDesarmado.DataSource = DtDatos GvDatosDesarmado.DataBind() BtnGuadarDesarmado.Visible = True TotalDesarmado.Visible = True UpDatosDesarmado.Update() UpGeneralesDesarmado.Update() End Sub #End Region #Region " GUARDAR " Protected Sub BtnGuadarArmado_Click(sender As Object, e As EventArgs) If Not GvDatosArmado.Rows.Count > 0 Then Alert("No hay ningun registro para generar el movimiento. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If Guardar(1) End Sub Protected Sub BtnGuadarDesarmado_Click(sender As Object, e As EventArgs) If Not GvDatosDesarmado.Rows.Count > 0 Then Alert("No hay ningun registro para generar el movimiento. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Abs(LbTotal.Text.ToDecimal - LbTotalCalculado.Text.ToDecimal) > 0.01 Then Alert("Los totales deben coincidir. Por favor rectifique y vuelva a intentar", TipoMensaje.MsgError) Exit Sub End If Guardar(2) End Sub Private Sub Guardar(Tipo As Integer) 'VALIDA SI EL COMPONENTE ES DE SERIE QUE SE INGRESEN TODAS LAS SERIES (CANTIDAD) Select Case (Tipo) Case 1 ' ARMADO For Each gvr As GridViewRow In GvDatosArmado.Rows If gvr.DataKey("Inv_CveMetodoInventario").ToEntero = 5 Then If gvr.DataKey("Cantidad").ToEntero <> DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec"))).Rows.Count Then Alert("Es necesario ingresas todas las series de los componentes.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Next Case 2 ' DESARMADO For Each gvr As GridViewRow In GvDatosDesarmado.Rows If gvr.DataKey("Inv_CveMetodoInventario").ToEntero = 5 Then If gvr.DataKey("Cantidad").ToEntero <> DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec"))).Rows.Count Then Alert("Es necesario ingresas todas las series de los componentes.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Next End Select 'VALIDA SI EL PAQUETE ES DE SERIE QUE SE INGRESEN TODAS LAS SERIES (CANTIDAD) If CveTipoPS = 5 Then Select Case (Tipo) Case 1 ' ARMADO For Each gvr As GridViewRow In GvSeriesPaqueteArmado.Rows If gvr.FCTextBox("TxtSerie").Text.Trim = "" Then Alert("Es necesario indicar las series del paquete a armar.", TipoMensaje.MsgAdvertencia) Exit Sub End If Next Case 2 ' DESARMADO If LbCantidadDesarmado.Text.ToEntero <> DtSeriesDesarmado.Rows.Count Then Alert("Es necesario indicar las series del paquete a desarmar.", TipoMensaje.MsgAdvertencia) Exit Sub End If End Select End If Dim ObjInventario As New ClsInventarios ObjInventario.IniciaTransacSQL() 'Inicia la transacción Dim TieneError = False Dim MensajeError As String = "" Dim CveMovimientoSalida = 0 Dim FolioSalida = 0 Dim CveMovimientoEntrada = 0 Dim FolioEntrada = 0 Dim Fecha = If(Tipo = 1, LbFechaArmado.Text.ToDate, LbFechaDesarmado.Text.ToDate) Dim DtDetalle As New DataTable Select Case (Tipo) Case 1 ' ARMADO 'SALIDA COMPONENTES CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenArmado, 5, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservacionesArmado.Text, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) FolioSalida = ObjInventario.Folio If CveMovimientoSalida <= 0 Then TieneError = True MensajeError = "Ocurrió un error al guardar el movimiento de salida. Por favor vuelva a intentar." Exit Select End If For Each Gvr As GridViewRow In GvDatosArmado.Rows If Gvr.DataKey("Cantidad").ToString.ToDouble > 0 Then If Gvr.DataKey("Inv_CveMetodoInventario").ToString.ToEntero = 5 Then For Each Dr As DataRow In DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec").ToEntero)).Rows If Not ObjInventario.GetExistenciasPS(Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.DataKey("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacenArmado.SelectedValue.ToEntero, FechaMovto:=Fecha.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr("Serie").ToString, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) >= 1 Then MensajeError = String.Format("El Producto {0} con Serie: {1} no tiene existencia suficiente", Dr("PS"), Dr("Serie")) TieneError = True Exit For End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, 1, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, 0, -1, SerieLote:=Dr("Serie").ToString) Then MensajeError = "Ocurrió un error al guardar los detalles con serie del movimiento de salida. Por favor vuelva a intentar." TieneError = True Exit For End If Next If TieneError Then Exit For End If Else If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Gvr.DataKey("Cantidad").ToString.ToDouble, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, 0, -1) Then MensajeError = "Ocurrió un error al guardar los detalles del movimiento de salida. Por favor vuelva a intentar." TieneError = True Exit For End If End If End If Next 'ENTRADA PAQUETE If Not TieneError Then CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenArmado, 19, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservacionesArmado.Text, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveMovimientoRelacionado:=CveMovimientoSalida) FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada <= 0 Then MensajeError = "Ocurrió un error al guardar el movimiento de entrada correctamente. Por favor vuelva a intentar." TieneError = True Else If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then Dim PUTemp = 0.0 For Each Dr As DataRow In ObjInventario.DtResultados.Rows PUTemp += Dr("PU").ToString.ToDouble * Dr("Cantidad").ToString.ToDouble Next PUTemp = PUTemp / LbCantidadArmado.Text.ToDouble Dim CvePSTemp = CvePaqueteArmado Dim CveUMTemp = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePaqueteArmado).FiltroPrimeroValor("CveUM").ToEntero If CveTipoPS = 5 Then Dim ContadorPaquete = 1 Dim DtSeriesComponentes As New DataTable For Each Gvr As GridViewRow In GvSeriesPaqueteArmado.Rows 'AGREGA MOVTO DETALLE DE LA ENTRADA DEL PAQUETE If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, 1, CveUMTemp, CvePSTemp, PUTemp, -1, SerieLote:=Gvr.FCTextBox("TxtSerie").Text.Trim) Then TieneError = True MensajeError = "Ocurrió un error al guardar los detalles con serie del movimiento de entrada" Exit For End If 'INGRESA EN TABLA DE CONTROL DE PAQUETES CON SERIE For Each Gvr2 As GridViewRow In GvDatosArmado.Rows If Gvr2.DataKey("Inv_CveMetodoInventario").ToString.ToEntero = 5 Then DtSeriesComponentes = New DataTable DtSeriesComponentes = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr2.DataKey("Consec").ToEntero)).Copy Dim CantidadComponente = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr2.DataKey("Consec").ToEntero)).Rows.Count / LbCantidadArmado.Text.ToEntero For index = (ContadorPaquete - 1) * CantidadComponente.ToEntero To (ContadorPaquete * CantidadComponente.ToEntero) - 1 If Not ObjInventario.AddPaqueteRelacionSeries(CvePSTemp, Gvr.FCTextBox("TxtSerie").Text.Trim, DtSeriesComponentes.Rows(index)("CvePS").ToString.ToEntero, DtSeriesComponentes.Rows(index)("Serie").ToString) Then TieneError = True Exit For End If Next End If Next ContadorPaquete = ContadorPaquete + 1 Next Else If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, LbCantidadArmado.Text.ToDouble, CveUMTemp, CvePSTemp, PUTemp, -1) Then TieneError = True MensajeError = "Ocurrió un error al guardar los detalles del movimiento de entrada" End If End If Else TieneError = True MensajeError = "Ocurrió un error al guardar los movimientos de entrada" End If End If End If Case 2 'DESARMADO 'SALIDA PAQUETE CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenDesarmado, 20, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservacionesDesarmado.Text, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) FolioSalida = ObjInventario.Folio If CveMovimientoSalida <= 0 Then TieneError = True MensajeError = "Ocurrió un error al guardar el movimiento de salida. Por favor vuelva a intentar." Exit Select End If Dim CvePSTemp = CvePaqueteDesarmado Dim CveUMTemp = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePaqueteDesarmado).FiltroPrimeroValor("CveUM").ToEntero If CveTipoPS = 5 Then For Each Gvr As GridViewRow In GvSeriesPaqueteDesarmado.Rows 'AGREGA MOVTO DETALLE DE LA SALIDA DEL PAQUETE If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, 1, CveUMTemp, CvePSTemp, 0, -1, SerieLote:=Gvr.DataKey("Serie").ToString) Then TieneError = True MensajeError = "Ocurrió un error al guardar los detalles con serie del movimiento de salida" Exit For End If 'ELIMINA EN TABLA DE CONTROL DE PAQUETES CON SERIE If Not ObjInventario.RemovePaqueteRelacionSeries(CvePSTemp, Gvr.DataKey("Serie").ToString) Then TieneError = True MensajeError = "Ocurrió un error al guardar los detalles con serie del movimiento de salida" Exit For End If Next Else If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, TxtCantidadDesarmado.Text.ToDouble, CveUMTemp, CvePSTemp, 0, -1) Then TieneError = True MensajeError = "Ocurrió un error al guardar los movimientos de salida" End If End If 'ENTRADA COMPONENTES If Not TieneError Then CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenDesarmado, 4, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservacionesDesarmado.Text, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveMovimientoRelacionado:=CveMovimientoSalida) FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada <= 0 Then MensajeError = "Ocurrió un error al guardar el movimiento de entrada correctamente. Por favor vuelva a intentar." TieneError = True Else For Each Gvr As GridViewRow In GvDatosDesarmado.Rows If Gvr.DataKey("Cantidad").ToString.ToDouble > 0 Then If Gvr.DataKey("Inv_CveMetodoInventario").ToString.ToEntero = 5 Then For Each Dr As DataRow In DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec").ToEntero)).Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, 1, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.FCTextBox("TxtCosto").Text.ToDouble, -1, SerieLote:=Dr("Serie").ToString) Then MensajeError = "Ocurrió un error al guardar los detalles con serie del movimiento de entrada. Por favor vuelva a intentar." TieneError = True Exit For End If Next Else If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Gvr.DataKey("Cantidad").ToString.ToDouble, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.FCTextBox("TxtCosto").Text.ToDouble, -1) Then MensajeError = "Ocurrió un error al guardar los detalles del movimiento de entrada. Por favor vuelva a intentar." TieneError = True Exit For End If End If End If Next End If End If End Select If Not TieneError Then Dim Msg As New StringBuilder Msg.AppendFormat("
El Movimiento de salida se registro con el Folio: {1}", CveMovimientoSalida, FolioSalida) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalida))) Msg.AppendFormat("


El Movimiento de entrada se registro con el Folio: {1}", CveMovimientoEntrada, FolioEntrada) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada))) Alert(Msg.ToString, TipoMensaje.MsgInformacion) ObjInventario.Commit() Limpia(Tipo) Else Alert(MensajeError, TipoMensaje.MsgError) ObjInventario.RollBack() End If ObjInventario.Dispose() 'elimino la instancia End Sub Private Sub Limpia(Tipo As Integer) DtDatosDetalle.Clear() CveTipoPS = -1 'If Tipo = 1 Then BtnGuadarArmado.Visible = False DivSeriesPaqueteArmado.Visible = False GvDatosArmado.Columns(4).Visible = False LbPaqueteArmado.Text = "" CvePaqueteArmado = -1 LbCantidadArmado.Text = "" LbAlmacenArmado.Text = "" CveAlmacenArmado = -1 LbFechaArmado.Text = "" TxtObservacionesArmado.Text = "" UpGeneralesArmado.Update() GvDatosArmado.DataBind() UpDatosArmado.Update() UpSeriesPaqueteArmado.Update() 'Else LbPaqueteDesarmado.Text = "" CvePaqueteDesarmado = -1 LbCantidadDesarmado.Text = "" LbAlmacenDesarmado.Text = "" CveAlmacenDesarmado = -1 LbFechaDesarmado.Text = "" TxtObservacionesDesarmado.Text = "" UpGeneralesDesarmado.Update() BtnGuadarDesarmado.Visible = False TotalDesarmado.Visible = False DtSeriesDesarmado.Clear() GvDatosDesarmado.Columns(4).Visible = False DivSeriesPaqueteDesarmado.Visible = False GvSeriesPaqueteDesarmado.DataBind() BtnAgregarSerieDesarmado.Enabled = True LbTotalCalculado.Text = "0.00" GvDatosDesarmado.DataBind() UpDatosDesarmado.Update() UpSeriesPaqueteDesarmado.Update() 'End If End Sub #End Region #Region " GV ARMADO " Protected Sub GvDatosArmado_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosArmado.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("Inv_CveMetodoInventario") = "5" Then e.Row.FCButton("BtnSerieLote").Visible = True e.Row.FCButton("BtnSerieLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°1", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PS"), e.Row.DBCampo("Cantidad"), e.Row.DBCampo("Consec")) e.Row.FCLinkButton("BtnSeriePaquete").CommandArgument = e.Row.DBCampo("Consec") 'Dim Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DBCampo("Consec"))).Rows.Count 'e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString If CveTipoPS = 5 Then e.Row.FCLinkButton("BtnSeriePaquete").Visible = True e.Row.FCLinkButton("BtnSeriePaquete").Attributes.Add("data-toggle", "tooltip") End If GvDatosArmado.Columns(4).Visible = True Else e.Row.FCButton("BtnSerieLote").Visible = False End If ''FUNCIONALIDAD PISTOLA DE CODIGOS 'If UsuarioActual.Empresa.Funcionalidad(132) = "1" And e.Row.DBCampo("CodigoBarras").Trim <> "" Then ' e.Row.FCTextBox("TbCantidadF").Enabled = False 'End If End If End Sub #End Region #Region " GV DESARMADO " Protected Sub GvDatosDesarmado_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosDesarmado.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("Inv_CveMetodoInventario") = "5" Then e.Row.FCButton("BtnSerieLote").Visible = True e.Row.FCButton("BtnSerieLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°2", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PS"), e.Row.DBCampo("Cantidad"), e.Row.DBCampo("Consec")) Else e.Row.FCButton("BtnSerieLote").Visible = False End If e.Row.FCTextBox("TxtCosto").Attributes.Add("onkeyup", "SumaValores();") End If End Sub #End Region #Region " SERIE LOTE " Private Sub CreaDtDetalle() If DtDatosDetalle Is Nothing Then DtDatosDetalle = New DataTable DtDatosDetalle.Columns.Add("Consec", GetType(Integer)) DtDatosDetalle.Columns.Add("ConsecId", GetType(Integer)) DtDatosDetalle.Columns.Add("CvePS", GetType(Integer)) DtDatosDetalle.Columns.Add("PS", GetType(String)) DtDatosDetalle.Columns.Add("CveUM", GetType(Integer)) DtDatosDetalle.Columns.Add("Serie", GetType(String)) DtDatosDetalle.Columns.Add("SeriePaquete", GetType(String)) End If End Sub Protected Sub BtnSerieLote_Click(sender As Object, e As EventArgs) Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c) LbProducto.Text = Argumentos(2) LbCantidad.Text = Argumentos(3).FormatoNumero CveConsecSerieLote = Argumentos(4).ToEntero CvePSSerieLote = Argumentos(0).ToEntero CveUMSerieLote = Argumentos(1).ToEntero RegistraScript("$('#DivSerie').modal('show')") CargaSerie(Argumentos(5).ToEntero) End Sub Private Sub CargaSerie(Tipo As Integer) GvSerie.DataSource = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote), "Consec DESC") GvSerie.DataBind() 'VALIDA QUE SIGA AGREGANDO If DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote)).Rows.Count = LbCantidad.Text.ToEntero Then BtnAgregarPS.Enabled = False If Tipo = 2 Then RegistraScript("$('#DivSerie').modal('hide')") End If Else BtnAgregarPS.Enabled = True End If 'SERIE LOTE RECOMENDADO Dim DtSerieLote As New DataTable Dim VariableCampoSerie = "" If TipoMovimiento = 1 Then Dim ObjInventarios As New ClsInventarios If ObjInventarios.SerieLoteRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, If(TipoMovimiento = 1, CveAlmacenArmado, CveAlmacenDesarmado)) Then DtSerieLote = ObjInventarios.DtResultados End If ObjInventarios.Dispose() VariableCampoSerie = "SerieLote" Else DtSerieLote = If(DtExistenciasDesarmado IsNot Nothing, DtExistenciasDesarmado.Copy, Nothing) VariableCampoSerie = "SeriePS" End If 'SERIE LOTE RECOMENDADO - QUITA YA COMPLETADOS EN EL CLIENTE If DtSerieLote IsNot Nothing AndAlso DtSerieLote.Rows.Count > 0 Then 'CALCULA YA COMPLETADOS DtSerieLote.Columns.Add("CantidadSeleccionada", GetType(Integer)) Dim DrsRemove As New List(Of DataRow) For Each dr As DataRow In DtSerieLote.Rows dr("CantidadSeleccionada") = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND Serie = '{1}'", CveConsecSerieLote, dr(VariableCampoSerie).ToString.Replace("'", "''"))).Rows.Count If dr("CantidadSeleccionada").ToString.ToDecimal = dr("Existencia").ToString.ToDecimal Then DrsRemove.Add(dr) End If Next 'ELIMINA YA COMPLETADOS EN PAGINA For Each dr As DataRow In DrsRemove DtSerieLote.Rows.Remove(dr) Next If DtSerieLote.Rows.Count > 0 Then Dim Mensaje As New StringBuilder Mensaje.AppendFormat("Serie / Lote Recomendado: {0}", DtSerieLote.Rows(0)(VariableCampoSerie)) LbSerieLoteRecomendado.Text = Mensaje.ToString 'String.Format("Serie / Lote Recomendado: {0}, Caducicdad: {1}", ObjInventarios.DtResultados.Rows(0)("SerieLote"), ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString) Else LbSerieLoteRecomendado.Text = "No se encontro ningun Serie/Lote." End If Else LbSerieLoteRecomendado.Text = "No se encontro ningun Serie/Lote." End If If DtSerieLote IsNot Nothing Then DtSerieLote.Dispose() UpSerie.Update() End Sub Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs) AgregaSerieLote(TxtSerieLote.Text.Trim, 1) End Sub Private Sub AgregaSerieLote(SerieLote As String, Tipo As Integer) If SerieLote.Trim = "" Then Alert("El campo Serie es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim SeriesArreglo = SerieLote.Split(";"c) 'VALIDACION DE SERIES DUPLICADAS Dim MensajeAlert As New StringBuilder Dim DtDuplicado As New DataTable Dim DtSeriesNuevas As New DataTable DtSeriesNuevas.Columns.Add("Serie", GetType(String)) For Each Serie In SeriesArreglo DtDuplicado = DtDatosDetalle.FiltraParametros($"ConsecId = {CveConsecSerieLote} AND Serie = '{Serie}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
El numero de Serie ""{Serie}"" proporcionado ya se encuentra ingresado.") End If DtDuplicado = DtSeriesNuevas.FiltraParametros($"Serie = '{Serie}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
El numero de Serie ""{Serie}"" proporcionado se encuentra duplicado.") End If Dim Row = DtSeriesNuevas.NewRow Row("Serie") = Serie DtSeriesNuevas.Rows.Add(Row) Next If MensajeAlert.ToString <> "" Then Alert(MensajeAlert.ToString, TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If Dim MensajeSinExistencias As New StringBuilder Dim ObjInventarios As New ClsInventarios For Each Serie In SeriesArreglo Dim Row = DtDatosDetalle.NewRow 'VERIFICA EXISTENCIAS Dim Existencia = 0.0D If TipoMovimiento = 1 Then Existencia = ObjInventarios.GetExistenciasPS(CvePSSerieLote, CveUMSerieLote, UsuarioActual.CveEmpresa, DdlAlmacenArmado.SelectedValue.ToEntero, FechaMovto:=TxtFechaArmado.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Serie, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) Else Existencia = If(DtExistenciasDesarmado Is Nothing, 0, DtExistenciasDesarmado.FiltraParametros($"CvePS={CvePSSerieLote} AND SeriePS='{Serie}'").Rows.Count.ToString.ToDecimal) End If If Existencia < 1 Then Alert($"No hay existencia suficiente con la Serie definida ""{Serie}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", "")) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") If Tipo = 1 Then RegistraScript("$('#DivSerie').modal('show')") End If Exit Sub End If Dim AplicaCaducidad = False If GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0) IsNot Nothing Then AplicaCaducidad = If(GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0)("AplicaCaducidad").ToString = "True", True, False) End If Row("ConsecId") = CveConsecSerieLote Row("Consec") = DtDatosDetalle.Rows.Count + 1 Row("CvePS") = CvePSSerieLote Row("CveUM") = CveUMSerieLote Row("Serie") = Serie If TipoMovimiento = 2 Then Row("SeriePaquete") = DtExistenciasDesarmado.FiltroPrimeroValor("SeriePaquete", $"CvePS={CvePSSerieLote} AND SeriePS='{Serie}'") End If DtDatosDetalle.Rows.Add(Row) Next ObjInventarios.Dispose() If Tipo = 1 Then TxtSerieLote.Text = "" End If CargaSerie(2) If MensajeAlert.ToString <> "" Then RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Else If MensajeSinExistencias.ToString <> "" Then Alert($"Las siguientes Series no cuentan con la existencia suficiente por lo cual se omitieron.
{MensajeSinExistencias.ToString}", TipoMensaje.MsgAdvertencia) End If RegistraScript("playsonidito('beep-07.wav')") End If End Sub Protected Sub GvSerie_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSerie.RowDeleting DtDatosDetalle.Rows.Remove(DtDatosDetalle.Rows(e.RowIndex)) CargaSerie(2) End Sub #End Region #Region " SERIE DEL PAQUETE " 'SERIES ARMADO Protected Sub BtnSeriePaquete_Click(sender As Object, e As EventArgs) Dim i = 1 Dim Dt As New DataTable Dt.Columns.Add("Row", GetType(Integer)) Dt.Columns.Add("Serie", GetType(String)) For Each Row As DataRow In DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CType(sender, LinkButton).CommandArgument.ToEntero)).Rows If i > LbCantidadArmado.Text.ToEntero Then Exit For End If Dim Row2 = Dt.NewRow Row2("Row") = i Row2("Serie") = Row("Serie") Dt.Rows.Add(Row2) i = i + 1 Next GvSeriesPaqueteArmado.DataSource = Dt GvSeriesPaqueteArmado.DataBind() UpSeriesPaqueteArmado.Update() End Sub 'SERIES DESARMADO Private Sub CreaDtSeriesDesarmado() If DtSeriesDesarmado Is Nothing Then DtSeriesDesarmado = New DataTable DtSeriesDesarmado.Columns.Add("Row", GetType(Integer)) DtSeriesDesarmado.Columns.Add("Serie", GetType(String)) End If End Sub Protected Sub BtnAgregarSerieDesarmado_Click(sender As Object, e As EventArgs) Dim SerieLote = TxtSerieDesarmado.Text.Trim 'VERIFICA EXISTENCIAS Dim ObjInventarios As New ClsInventarios Dim CveUMTemp = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePaqueteDesarmado).FiltroPrimeroValor("CveUM").ToEntero Dim Existencia = ObjInventarios.GetExistenciasPS(CvePaqueteDesarmado, CveUMTemp, UsuarioActual.CveEmpresa, CveAlmacenDesarmado, FechaMovto:=LbFechaDesarmado.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=SerieLote, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente)) If Existencia < 1 Then Alert($"No hay existencia suficiente con la Serie definida ""{SerieLote}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If If ObjInventarios.GetPaqueteRelacionSeries(CvePaqueteDesarmado, SerieLote) Then If DtExistenciasDesarmado Is Nothing Then DtExistenciasDesarmado = ObjInventarios.DtResultados.Copy Else DtExistenciasDesarmado.Merge(ObjInventarios.DtResultados) End If End If ObjInventarios.Dispose() Dim Row = DtSeriesDesarmado.NewRow Row("Row") = DtSeriesDesarmado.MAX("Row").ToEntero + 1 Row("Serie") = TxtSerieDesarmado.Text.Trim DtSeriesDesarmado.Rows.Add(Row) TxtSerieDesarmado.Text = "" If DtSeriesDesarmado.Rows.Count >= LbCantidadDesarmado.Text.ToEntero Then BtnAgregarSerieDesarmado.Enabled = False Else BtnAgregarSerieDesarmado.Enabled = True End If GvSeriesPaqueteDesarmado.DataSource = DtSeriesDesarmado GvSeriesPaqueteDesarmado.DataBind() UpSeriesPaqueteDesarmado.Update() End Sub Protected Sub GvSeriesPaqueteDesarmado_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSeriesPaqueteDesarmado.RowDeleting Dim SerieEliminada = DtSeriesDesarmado.Rows(e.RowIndex)("Serie").ToString DtSeriesDesarmado.Rows.Remove(DtSeriesDesarmado.Rows(e.RowIndex)) 'ELIMINA EXISTENCIAS DEL PAQUETE Dim dtTemp As DataTable = DtExistenciasDesarmado.FiltraParametros($"SeriePaquete<>'{SerieEliminada}'") DtExistenciasDesarmado.Clear() DtExistenciasDesarmado.Merge(dtTemp) 'ELIMINA SERIES DE COMPONENTES DEPENDIENTES DEL PAQUETE ELIMINADO dtTemp = DtDatosDetalle.FiltraParametros($"SeriePaquete<>'{SerieEliminada}'") DtDatosDetalle.Clear() DtDatosDetalle.Merge(dtTemp) dtTemp.Dispose() If DtSeriesDesarmado.Rows.Count >= LbCantidadDesarmado.Text.ToEntero Then BtnAgregarSerieDesarmado.Enabled = False Else BtnAgregarSerieDesarmado.Enabled = True End If GvSeriesPaqueteDesarmado.DataSource = DtSeriesDesarmado GvSeriesPaqueteDesarmado.DataBind() UpSeriesPaqueteDesarmado.Update() End Sub #End Region End Class