Option Explicit On Option Strict On Imports System.Data Imports Extensiones Partial Class Inventarios_Apartados Inherits ClsPaginas #Region " PROPIEDADES " Public Property DtMovimientos() As DataTable Get Return CType(ViewState("DtMovimientos"), DataTable) End Get Set(value As DataTable) ViewState("DtMovimientos") = value End Set End Property Private Property DtTraslado As DataTable Get Return CType(ViewState("DtTraslado"), DataTable) End Get Set(value As DataTable) ViewState("DtTraslado") = value End Set End Property Private Property CargadoDeMov As Boolean Get Return CType(ViewState("CargadoDeMov"), Boolean) End Get Set(value As Boolean) ViewState("CargadoDeMov") = 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 CveCliente As Integer Get Return CType(ViewState("CveCliente"), Integer) End Get Set(value As Integer) ViewState("CveCliente") = 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 DtSeccionAlmacen As DataTable Get Return CType(ViewState("DtSeccionAlmacen"), DataTable) End Get Set(value As DataTable) ViewState("DtSeccionAlmacen") = value End Set End Property Private Property IndexSeccionAlmacen As Integer Get Return CType(ViewState("IndexSeccionAlmacen"), Integer) End Get Set(value As Integer) ViewState("IndexSeccionAlmacen") = value End Set End Property Private Property CantidadTotal As Decimal Get Return CType(ViewState("CantidadTotal"), Decimal) End Get Set(value As Decimal) ViewState("CantidadTotal") = value End Set End Property Private Property CvePS As Integer Get Return CType(ViewState("CvePS"), Integer) End Get Set(value As Integer) ViewState("CvePS") = value End Set End Property Private Property TipoSeccionAlmacen As Integer Get Return CType(ViewState("TipoSeccionAlmacen"), Integer) End Get Set(value As Integer) ViewState("TipoSeccionAlmacen") = 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() TxtFecha.Text = Now.ToShortDateString TxtFechaDesapartado.Text = Now.ToShortDateString CargaCombos() CreaDT() If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then DivCodigoSeriePS.Visible = True Else DivCodigoSeriePS.Visible = False End If CveCliente = -1 CveVendedor = -1 CantidadTotal = 0 IndexSeccionAlmacen = 0 CvePS = 0 CreaDtSeccionAlmacen() CargaDdlAlmacen() TipoSeccionAlmacen = 0 GvDatos.Columns(5).Visible = UsuarioActual.Empresa.Funcionalidad(563) = "1" GvDatosDesapartado.Columns(6).Visible = UsuarioActual.Empresa.Funcionalidad(563) = "1" End Sub Private Sub CargaCombos() DdlSubProyecto.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa) DdlSubProyecto.DataBind() DdlSubProyecto.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlSubProyectoDesapartado.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa) DdlSubProyectoDesapartado.DataBind() DdlSubProyectoDesapartado.Items.Insert(0, New ListItem(" Todas ", "-1")) DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltraParametros(" Codigo = '' OR Codigo IS NULL ", Orderby:="Clasificacion") DdlClasificacion.DataBind() DdlUnidad.DataSource = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa) DdlUnidad.DataBind() CargaAlmacenOrigen() CargaAlmacenDestino() CargaPS() DdlCliente.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlCliente.DataBind() DdlCliente.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlClienteDesapartado.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClienteDesapartado.DataBind() DdlClienteDesapartado.Items.Insert(0, New ListItem(" Todos ", "-1")) DdlVendedor.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa) DdlVendedor.DataBind() DdlVendedor.Items.Insert(0, New ListItem(" Seleccione ", "-1")) Dim DTVendedores As New DataTable DTVendedores = GlobalDTVendedores(UsuarioActual.CveEmpresa, True) DTVendedores.Merge(GlobalDTVendedores(UsuarioActual.CveEmpresa, False)) DdlVendedorDesapartado.DataSource = DTVendedores DdlVendedorDesapartado.DataBind() DdlVendedorDesapartado.Items.Insert(0, New ListItem(" Todos ", "-1")) End Sub Private Sub CargaPS() DdlProducto2.setEsWebService(UsuarioActual.Empresa.Funcionalidad(105) = "1") If UsuarioActual.CveEmpresa = 66 Then DdlProducto2.ddlWS.Attributes.Add("data-pagina", "Inventarios") DdlProducto2.ddlWS.Attributes.Add("data-cveclasificacion", DdlClasificacion.SelectedValue.ToString) End If If Not DdlProducto2.UsaWebService AndAlso CType(DdlProducto2.DataSource, DataTable) Is Nothing Then DdlProducto2.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) DdlProducto2.DataBind() End If End Sub Protected Sub CreaDT() Dim dt As New DataTable Dim column As DataColumn = New DataColumn("No") column.DataType = Type.GetType("System.Int32") With column .AutoIncrement = True .AutoIncrementSeed = 1 .AutoIncrementStep = 1 End With dt.Columns.Add(column) dt.Columns.Add("Cantidad", Type.GetType("System.Double")) dt.Columns.Add("CveUM", Type.GetType("System.Int32")) dt.Columns.Add("UnidadMedida") dt.Columns.Add("CvePS", Type.GetType("System.Int32")) dt.Columns.Add("CveAF", Type.GetType("System.Int32")) dt.Columns.Add("PS") dt.Columns.Add("SerieLote") dt.Columns.Add("CveClasificacion", Type.GetType("System.Int32")) dt.Columns.Add("EstatusExistencia") DtMovimientos = dt CargaGvDatos() End Sub #End Region #Region " APARTADOS " #Region " DDL CLASIFICACION " Protected Sub DdlClasificacion_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlClasificacion.SelectedIndexChanged ChangeDdlProducto() End Sub Private Sub ChangeDdlProducto() If UsuarioActual.Empresa.Funcionalidad(105) = "" Then DdlProducto2.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=DdlClasificacion.SelectedValue.ToEntero).FiltraParametros("", "PSCodigo") DdlProducto2.DataBind() DdlProducto2.ddl.Items.Insert(0, New ListItem(" ", "-1")) Else DdlProducto2.ddlWS.Attributes.Add("data-cveclasificacion", DdlClasificacion.SelectedValue) DdlProducto2.SelectedText = "Seleccione" DdlProducto2.SelectedValue = "-1" End If End Sub Protected Sub DdlProducto_ValueChanged(sender As Object, e As EventArgs) Handles DdlProducto2.selectedindexchange ElProductoChange() End Sub Private Sub ElProductoChange() TxtnSerieLote.Visible = False If DdlProducto2.SelectedValue.ToEntero > 0 Then If GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlProducto2.SelectedValue.ToEntero).FiltraParametros("Inv_CveMetodoInventario = 5 ", "PSCodigo").Rows.Count > 0 Then ThSerieLote.Visible = True TdSerieLote.Visible = True TxtnSerieLote.Visible = True GvDatos.Columns(4).Visible = True End If End If DdlUnidad.Items.Clear() DdlUnidad.DataSource = GlobalDTProductosServiciosEquivalencias(DdlProducto2.SelectedValue.ToEntero, -1) DdlUnidad.DataBind() UpDatos.Update() End Sub Private Function isWhitFamily() As Boolean Return (UsuarioActual.CveEmpresa = 66) End Function Protected Sub DdlClasificacion_GV(sender As Object, e As System.EventArgs) Dim pDdlClasificacion As DropDownList = CType(sender, DropDownList) Dim pDdlProducto As DropDownList = CType(pDdlClasificacion.NamingContainer.FindControl("DdlProducto"), DropDownList) If pDdlClasificacion.SelectedValue = "-1" Then pDdlProducto.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) Else pDdlProducto.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=pDdlClasificacion.SelectedValue.ToEntero) End If 'If pDdlClasificacion.SelectedValue = "-1" Then ' pDdlProducto.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa) 'Else ' If isWhitFamily() Then ' pDdlProducto.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveSubFamilia={0}", DdlClasificacion.SelectedValue)) ' Else ' pDdlProducto.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveClasificacion={0}", DdlClasificacion.SelectedValue)) ' End If 'End If pDdlProducto.DataBind() pDdlProducto.Items.Insert(0, New ListItem("----", "-1")) End Sub #End Region #Region " DDL SUCURSAL " Protected Sub DdlSubProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) CargaAlmacenes() End Sub Private Sub CargaAlmacenes() CargaAlmacenOrigen(DdlSubProyecto.SelectedValue.ToEntero) CargaAlmacenDestino(DdlSubProyecto.SelectedValue.ToEntero) End Sub Private Sub CargaAlmacenOrigen(Optional CveSubProyecto As Integer = -1) DdlAlmacenOrigen.Items.Clear() If CveSubProyecto > 0 Then DdlAlmacenOrigen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros($"CveTipoAlmacen NOT IN (3,9) {If(CveSubProyecto > 0, $" AND CveSubProyecto = {CveSubProyecto}", "")}") End If DdlAlmacenOrigen.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacenOrigen.SelectedValue = "-1" DdlAlmacenOrigen.DataBind() End Sub Private Sub CargaAlmacenDestino(Optional CveSubProyecto As Integer = -1) DivAdvertencia.Visible = False BtnGuardar.Enabled = True DdlAlmacenDestino.Items.Clear() Dim DtDestinos As New DataTable If CveSubProyecto > 0 Then DtDestinos = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveTipoAlmacen IN (9) AND Estatus = 'Activo' {If(CveSubProyecto > 0, $" And CveSubProyecto = {CveSubProyecto}", "")}") DdlAlmacenDestino.DataSource = DtDestinos If DtDestinos.Rows.Count = 0 Then DivAdvertencia.Visible = True BtnGuardar.Enabled = False End If End If DdlAlmacenDestino.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenDestino.DataBind() If DtDestinos.Rows.Count > 0 Then DdlAlmacenDestino.SelectedIndex = 1 Else DdlAlmacenDestino.SelectedValue = "-1" End If End Sub #End Region #Region " DDL CLIENTE " Protected Sub DdlCliente_SelectedIndexChanged(sender As Object, e As EventArgs) SeleccionaVendedor() End Sub Private Sub SeleccionaVendedor() DdlVendedor.SelectedValue = "-1" DdlVendedor.SelectedValueExist(GlobalDTCliente(UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("CveVendedor", $"CveCliente = {DdlCliente.SelectedValue}")) End Sub #End Region #Region " AGREGAR " #Region " AGREGAR CON CODIGO DE BARRAS " Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs) If TxtCodigoPS.Text = "" Then Exit Sub End If TdSeriePS.Visible = False Dim DrPS = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{TxtCodigoPS.Text}'") If DrPS Is Nothing Then Alert($"No se ha encontrado un producto del Codigo ""{TxtCodigoPS.Text}"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") TxtCodigoPS.Text = "" Exit Sub End If If DrPS("Inv_CveMetodoInventario").ToString.ToEntero = 5 Then TdSeriePS.Visible = True TxtSeriePS.Focus() CvePSSerieLote = DrPS("CvePS").ToString.ToEntero CveUMSerieLote = DrPS("CveUnidadMedida").ToString.ToEntero Exit Sub End If AgregarPS(1, DrPS("CvePS").ToString.ToEntero, DrPS("CveUnidadMedida").ToString.ToEntero) TxtCodigoPS.Text = "" End Sub Protected Sub BtnSeriePS_Click(sender As Object, e As EventArgs) If TxtSeriePS.Text.Trim = "" Then Exit Sub End If txtCantidad.Text = "1" Dim Valido = ValidaExistencia(1, CvePSSerieLote, CveUMSerieLote, TxtSeriePS.Text.Trim) If Valido Then AgregarPS(1, CvePSSerieLote, CveUMSerieLote, TxtSeriePS.Text.Trim) Else TxtSeriePS.Text = "" TxtSeriePS.Focus() Exit Sub End If TdSeriePS.Visible = False TxtSeriePS.Text = "" TxtCodigoPS.Text = "" TxtCodigoPS.Focus() End Sub #End Region Protected Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles LbAgregar.Click BtnAgregarPS(txtCantidad.Text.ToDouble) End Sub Protected Sub BtnSerieAddNew_Click(sender As Object, e As EventArgs) BtnAgregarPS(1) End Sub Private Sub BtnAgregarPS(Cantidad As Double) Dim CveProducto As Integer = DdlProducto2.SelectedValue.ToEntero Dim FuncionalidadSinSerie = True If CveProducto > 0 Then If TxtnSerieLote.Visible Then Cantidad = 1 If TxtnSerieLote.Text = "" Then Alert("Serie-Lote es necesario", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") Exit Sub End If If txtCantidad.Text.ToDouble > 1 Then FuncionalidadSinSerie = False End If End If Dim Valido = ValidaExistencia(Cantidad, CveProducto, DdlUnidad.SelectedValue.ToEntero, If(TxtnSerieLote.Visible, TxtnSerieLote.Text, "-1")) If Valido Then AgregarPS(Cantidad, CveProducto, DdlUnidad.SelectedValue.ToEntero, If(TxtnSerieLote.Visible, TxtnSerieLote.Text, "-1"), FuncionalidadSinSerie) End If End If End Sub Private Function ValidaExistencia(Cantidad As Double, CvePS As Integer, CveUnidadMedida As Integer, Optional SerieLote As String = "-1") As Boolean Dim Retorno = True Dim Inv As New ClsInventarios Dim Existencia As Double = Inv.GetExistenciasPS(CvePS, CveUnidadMedida, UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDate.ToString("yyyy/MM/dd 23:59"), SerieLote:=SerieLote) Inv.Dispose() If Existencia - Cantidad - DtMovimientos.SUM("Cantidad", $"CvePS = {CvePS} AND CveUM = {CveUnidadMedida} {If(SerieLote <> "-1", $" AND SerieLote = '{SerieLote}'", "")}") < 0 Then If Existencia < 0 Then Alert("No hay existencia del producto", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") Else Alert(String.Format("Solo hay en existencia: {0}", Existencia), TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") End If Retorno = False End If Return Retorno End Function Private Sub AgregarPS(Cantidad As Double, CvePS As Integer, CveUnidadMedida As Integer, Optional SerieLote As String = "-1", Optional Limpia As Boolean = True) If Cantidad <= 0 Then Alert("La cantidad debe ser mayor a cero (0). Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If Dim CveClasificacion As Integer Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPS IsNot Nothing Then CveClasificacion = DrPS("CveClasificacion").ToString.ToEntero Dim DrUM = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa).FiltroPrimero($"CveUnidadMedida = {CveUnidadMedida}") Dim registro As DataRow = DtMovimientos.NewRow registro.Item("Cantidad") = Cantidad registro.Item("CveUM") = CveUnidadMedida registro.Item("UnidadMedida") = DrUM("UnidadMedida") registro.Item("CvePS") = CvePS registro.Item("PS") = DrPS("PSCodigo") registro.Item("SerieLote") = SerieLote registro.Item("CveClasificacion") = CveClasificacion registro.Item("CveAF") = -1 registro.Item("EstatusExistencia") = "1" DtMovimientos.Rows.Add(registro) RegistraScript("playsonidito('beep-07.wav')") CargaGvDatos(Limpia) If Limpia Then LimpiaAgregar() Else txtCantidad.Text = (txtCantidad.Text.ToDouble - 1.0).ToString TxtnSerieLote.Text = "" TxtnSerieLote.Focus() End If End Sub Private Sub LimpiaAgregar() DdlClasificacion.SelectedValue = "-1" DdlClasificacion_SelectedIndexChanged(DdlClasificacion, EventArgs.Empty) txtCantidad.Text = "" TxtnSerieLote.Text = "" TxtnSerieLote.Visible = False txtCantidad.Focus() If TxtCodigoPS.Visible Then TxtCodigoPS.Focus() End If End Sub #End Region #Region " GV DATOS " Private Sub CargaGvDatos(Optional EscondeSerie As Boolean = True) If EscondeSerie Then TxtnSerieLote.Visible = False ThSerieLote.Visible = False TdSerieLote.Visible = False GvDatos.Columns(4).Visible = False End If GvDatos.DataSource = DtMovimientos GvDatos.DataBind() UpDatos.Update() End Sub Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("EstatusExistencia").ToEntero < 0 Then e.Row.Cells(0).BackColor = Drawing.Color.Red End If If CargadoDeMov Then e.Row.FCLiteral("ltlCantidad").Visible = False e.Row.FCTextBox("TxtCantidad2").Visible = True e.Row.FCTextBox("TxtCantidad2").Attributes.Add("onblur", String.Format("ValidaCantidad(this,{0})", e.Row.DBCampo("Cantidad"))) End If If If(e.Row.DBCampo("SerieLote").ToString = "", "-1", e.Row.DBCampo("SerieLote").ToString) <> "-1" Then TxtnSerieLote.Visible = True ThSerieLote.Visible = True TdSerieLote.Visible = True GvDatos.Columns(4).Visible = True e.Row.Cells(4).Text = e.Row.DBCampo("SerieLote").ToString Else e.Row.Cells(4).Text = "" End If If DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {e.Row.RowIndex}").SUMD("CantidadSeccionAlmacen") > 0 Then e.Row.FCLinkButton("lnkRemove").Visible = False e.Row.FCLinkButton("lnkRemove").ToolTip = "Cuenta con sección almacen" End If End If End Sub Protected Sub GvPS_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvDatos.RowDeleting Dim DbRow As DataRow = Nothing DbRow = DtMovimientos.Rows(e.RowIndex) DtMovimientos.Rows.Remove(DbRow) CargaGvDatos() End Sub #End Region #Region " GUARDAR " Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click 'VALIDA ALMACEN ORIGEN Y DESTINO If DdlAlmacenOrigen.SelectedValue = DdlAlmacenDestino.SelectedValue Then Alert("No se puede realizar un traspaso entre el mismo almacén.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'VALIDA QUE TENGA MOVTOS If Not GvDatos.Rows.Count > 0 Then Alert("No hay movimientos para el traspaso", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If 'VALIDA ESTATUS EXISTENCIA For Each dr As DataRow In DtMovimientos.Rows If dr("EstatusExistencia").ToString = "-1" Then Alert("Tiene que rectificar los movimientos con error.", TipoMensaje.MsgError) Exit Sub End If Next Dim TotalCantidad As Double = DtMovimientos.SUMD("Cantidad") If UsuarioActual.Empresa.Funcionalidad(563) = "1" Then If TotalCantidad <> DtSeccionAlmacen.FiltraParametros("TipoSeccionAlmacen = 1").SUMD("CantidadSeccionAlmacen") Then Alert("La seccion de almacen no ha sido agregada completamente.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Dim ObjInventario As New ClsInventarios 'VALIDA LA EXISTENCIA DEL ALMACEN DE ORIGEN Dim ErrorExistencia = False Dim TextoExistencia As StringBuilder = New StringBuilder Dim Existencia As Double TextoExistencia.Append("Los siguiente productos se ajustaron por falta de exitencia:
") If Not CargadoDeMov Then For Each dr As DataRow In DtMovimientos.Rows Existencia = ObjInventario.GetExistenciasPS(dr("CvePS").ToString.ToEntero, dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDate.ToString("yyyy/MM/dd 23:59"), SerieLote:=If(dr("SerieLote").ToString = "", "-1", dr("SerieLote").ToString)) Existencia -= DtMovimientos.SUM("Cantidad", $"CvePS = {dr("CvePS").ToString.ToEntero} AND CveUM = {dr("CveUM").ToString.ToEntero} {If(dr("SerieLote").ToString <> "-1", $" AND SerieLote = '{dr("SerieLote").ToString}'", "")}") 'DtMovimientos.SUM("Cantidad", String.Format("CvePS = {0}", dr("CvePS").ToString.ToEntero)) If Existencia < 0 Then ErrorExistencia = True dr("EstatusExistencia") = "-1" dr("Cantidad") = Existencia TextoExistencia.AppendFormat("- #{0} {1}
", dr("No").ToString, dr("PS").ToString) End If Next Else For Each gvr As GridViewRow In GvDatos.Rows Existencia = ObjInventario.GetExistenciasPS(gvr.DataKey("CvePS").ToString.ToEntero, gvr.DataKey("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDate.ToString("yyyy/MM/dd 23:59"), SerieLote:=If(gvr.DataKey("SerieLote").ToString = "", "-1", gvr.DataKey("SerieLote").ToString)) Existencia -= gvr.FCTextBox("TxtCantidad2").Text.ToEntero If Existencia < 0 Then ErrorExistencia = True gvr.FCTextBox("TxtCantidad2").Text = (Existencia + gvr.FCTextBox("TxtCantidad2").Text.ToEntero).ToString TextoExistencia.AppendFormat("- #{0} {1}
", gvr.DataKey("No").ToString, gvr.DataKey("PS").ToString) End If Next End If 'VALIDACIONES If ErrorExistencia Then Alert(TextoExistencia.ToString, TipoMensaje.MsgError) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") ObjInventario.Dispose() Exit Sub End If 'Inicia la transacción ObjInventario.IniciaTransacSQL() Dim CveMovimientoSalida = 0 Dim CveMovimientoEntrada = 0 Dim IDPoliza As Integer = 0 Dim FolioSalida = 0 Dim FolioEntrada = 0 Dim AlmacenEntrada = -1 Dim Fecha As Date = TxtFecha.Text.ToDate Dim ErrorMovInv As Boolean = False Dim ErrorAC As Boolean = False Dim TextoError = "" 'AGREGAMOS LA SALIDA DEL ALMACEN ORIGEN CveMovimientoSalida = ObjInventario.AddMovimiento(DdlAlmacenOrigen.SelectedValue.ToEntero, 8, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Recibio:="", CveAlmacenDestino:=DdlAlmacenDestino.SelectedValue.ToEntero, CveCliente:=DdlCliente.SelectedValue.ToEntero, CveVendedor:=DdlVendedor.SelectedValue.ToEntero) FolioSalida = ObjInventario.Folio Dim Cont As Integer = 0 If CveMovimientoSalida <= 0 Then TextoError = "No se pudo generar el movimiento de salida correctamente" ErrorMovInv = True Else For Each Dr As DataRow In DtMovimientos.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" Exit For Else If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont} AND TipoSeccionAlmacen = 1").Rows If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacenOrigen").ToString.ToEntero, -Dr2("CantidadSeccionAlmacen").ToString.ToDecimal) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar." Exit For End If Next End If End If Cont += 1 Next End If 'AGREGAMOS LA ENTRADA If Not ErrorMovInv Then Cont = 0 AlmacenEntrada = DdlAlmacenDestino.SelectedValue.ToEntero CveMovimientoEntrada = ObjInventario.AddMovimiento(AlmacenEntrada, 9, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Recibio:="-1", CveAlmacenDestino:=-1, CveMovimientoRelacionado:=CveMovimientoSalida, CveCliente:=DdlCliente.SelectedValue.ToEntero, CveVendedor:=DdlVendedor.SelectedValue.ToEntero) FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada <= 0 Then TextoError = "No se pudo generar el movimiento de entrada correctamente" ErrorMovInv = True Else If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de entrada" Exit For Else If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont} AND TipoSeccionAlmacen = 1").Rows If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacenDestino").ToString.ToEntero, Dr2("CantidadSeccionAlmacen").ToString.ToDecimal) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar." Exit For End If Next End If End If Cont += 1 Next End If End If End If If Not ErrorMovInv Then ObjInventario.Commit() Dim Mensaje As StringBuilder = New StringBuilder Mensaje.Append("Se realizó con éxito el apartado.") Mensaje.AppendFormat("

Folio de Salida: {0}", FolioSalida, CveMovimientoSalida) Mensaje.AppendFormat("
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalida))) Mensaje.AppendFormat("

Folio de Entrada: {0}", FolioEntrada, CveMovimientoEntrada) Mensaje.AppendFormat("
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada))) LimpiaMovimiento() Alert(Mensaje.ToString, TipoMensaje.MsgInformacion) Else ObjInventario.RollBack() Alert(TextoError, TipoMensaje.MsgError) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") End If 'SI OCURRIO UN ERROR EN LA EXISTENCIA RECARGAMOS EL GRID PARA COLOREAR LOS DETALLES CON ERROR If ErrorExistencia Then CargaGvDatos() End If ObjInventario.Dispose() End Sub #End Region #Region " NUEVO - LIMPIA - MOVIMIENTO DE APARTADO " Protected Sub BtnNuevo_Click(sender As Object, e As EventArgs) LimpiaMovimiento() End Sub Private Sub LimpiaMovimiento() CargaAlmacenOrigen() TxtFecha.Text = Now.ToShortDateString TxtObservaciones.Text = "" txtCantidad.Text = "" DdlSubProyecto.SelectedValue = "-1" CargaAlmacenes() DdlCliente.SelectedValue = "-1" SeleccionaVendedor() CargadoDeMov = False DtMovimientos.Rows.Clear() CargaGvDatos() End Sub #End Region #End Region #Region " DESAPARTADOS " #Region " DDL CLIENTE FILTRO " Protected Sub DdlClienteDesapartado_SelectedIndexChanged(sender As Object, e As EventArgs) SeleccionaVendedorFiltro() End Sub Private Sub SeleccionaVendedorFiltro() DdlVendedorDesapartado.SelectedValue = "-1" DdlVendedorDesapartado.SelectedValueExist(GlobalDTCliente(UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("CveVendedor", $"CveCliente = {DdlClienteDesapartado.SelectedValue}")) End Sub #End Region Protected Sub GvDatosDesapartado_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatosDesapartado.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCTextBox("TxtCantidad").Attributes.Add("onblur", String.Format("ValidaCantidad(this,{0})", e.Row.DBCampo("Cantidad"))) End If End Sub Protected Sub BtnVerificarExistenciasDesarmado_Click(sender As Object, e As EventArgs) LblSucursal.Text = DdlSubProyectoDesapartado.SelectedItem.Text CargaAlmacenDestinoDesapartado(DdlSubProyectoDesapartado.SelectedValue.ToEntero) CveCliente = DdlClienteDesapartado.SelectedValue.ToEntero CveVendedor = DdlVendedorDesapartado.SelectedValue.ToEntero CargaExistencias() UpDatosGenerales.Update() End Sub Private Sub CargaExistencias() Dim DtTemp = GetExistenciasDT() If DtTemp IsNot Nothing Then GvDatosDesapartado.DataSource = DtTemp GvDatosDesapartado.DataBind() UpDatosDesapartado.Update() DtSeccionAlmacen.Rows.Clear() End If End Sub Private Function GetExistenciasDT() As DataTable Dim DtRetorno As New DataTable Dim CveAlmacenApartado = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen IN (9) AND Estatus = 'Activo' And CveSubProyecto = {DdlSubProyectoDesapartado.SelectedValue.ToEntero}").ToEntero If CveAlmacenApartado <= 0 Then Alert("No se encontro el almacen de Apartado de la sucursal seleccionada. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return DtRetorno End If Dim ObjInventarios As New ClsInventarios If ObjInventarios.DesapartadosGet(CveAlmacenApartado, DdlClienteDesapartado.SelectedValue.ToEntero, DdlVendedorDesapartado.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then DtRetorno = ObjInventarios.DtResultados End If ObjInventarios.Dispose() Return DtRetorno End Function Private Sub CargaAlmacenDestinoDesapartado(Optional CveSubProyecto As Integer = -1) DdlAlmacenDestinoDesapartado.Items.Clear() If CveSubProyecto > 0 Then DdlAlmacenDestinoDesapartado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros($"CveTipoAlmacen NOT IN (3,9) {If(CveSubProyecto > 0, $" AND CveSubProyecto = {CveSubProyecto}", "")}") End If DdlAlmacenDestinoDesapartado.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacenDestinoDesapartado.SelectedValue = "-1" DdlAlmacenDestinoDesapartado.DataBind() End Sub #Region " GUARDAR " Protected Sub BtnGuardarDesapartado_Click(sender As Object, e As EventArgs) Handles BtnGuardarDesapartado.Click 'VALIDA ALMACEN ORIGEN Y DESTINO Dim CveAlmacenApartado = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen IN (9) AND Estatus = 'Activo' And CveSubProyecto = {DdlSubProyectoDesapartado.SelectedValue.ToEntero}").ToEntero If DdlAlmacenDestinoDesapartado.SelectedValue.ToEntero = CveAlmacenApartado Then Alert("No se puede realizar un traspaso entre el mismo almacén.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'VALIDA QUE TENGA MOVTOS Dim TieneMovto = False For Each Gvr As GridViewRow In GvDatosDesapartado.Rows If Gvr.FCTextBox("TxtCantidad").Text.ToDouble > 0 Then TieneMovto = True Exit For End If Next If Not TieneMovto Then Alert("No hay movimientos para el traspaso", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If Dim TotalCantidad As Double = 0 For Each Gvr As GridViewRow In GvDatosDesapartado.Rows If Gvr.FCTextBox("TxtCantidad").Text.ToDouble > 0 Then TotalCantidad += Gvr.FCTextBox("TxtCantidad").Text.ToDecimal End If Next If UsuarioActual.Empresa.Funcionalidad(563) = "1" Then If TotalCantidad <> DtSeccionAlmacen.FiltraParametros("TipoSeccionAlmacen = 2").SUMD("CantidadSeccionAlmacen") Then Alert("La seccion de almacen no ha sido agregada completamente.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA Dim CantidadGV = GvDatosDesapartado.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("Cantidad").ToDouble) 'Alert($"Cantidad GV {CantidadGV}
Cantidad DT {GetExistenciasDT().SUM("Cantidad")}") 'Exit Sub If CantidadGV <> GetExistenciasDT().SUM("Cantidad") Then Alert("Ah ocurrido un cambio en las existencias del apartado, por lo cual la pagina ah sido actualizada con los nuevos valores", TipoMensaje.MsgAdvertencia) CargaExistencias() Exit Sub End If 'Inicia la transacción Dim ObjInventario As New ClsInventarios ObjInventario.IniciaTransacSQL() Dim CveMovimientoSalida = 0 Dim CveMovimientoEntrada = 0 Dim FolioSalida = 0 Dim FolioEntrada = 0 Dim Fecha As Date = TxtFechaDesapartado.Text.ToDate Dim ErrorMovInv As Boolean = False Dim TextoError = "" 'AGREGAMOS LA SALIDA DEL ALMACEN ORIGEN CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenApartado, 8, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, MovimientoFijo:=True, Observaciones:=TxtObservacionesDesapartado.Text.Trim, Recibio:="", CveAlmacenDestino:=DdlAlmacenDestinoDesapartado.SelectedValue.ToEntero, CveCliente:=CveCliente, CveVendedor:=CveVendedor) FolioSalida = ObjInventario.Folio Dim Cont As Integer = 0 If CveMovimientoSalida <= 0 Then ErrorMovInv = True TextoError = "No se pudo generar el movimiento de salida correctamente" Else For Each Gvr As GridViewRow In GvDatosDesapartado.Rows If Gvr.FCTextBox("TxtCantidad").Text.ToDouble > 0 Then If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Gvr.FCTextBox("TxtCantidad").Text.ToDouble, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.DataKey("PU").ToString.ToDouble, -1, -1, Gvr.DataKey("SerieLote").ToString, CveMovimientoDetalleEntrada:=Gvr.DataKey("CveMovimientoDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" Exit For Else If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont} AND TipoSeccionAlmacen = 2").Rows If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacenOrigen").ToString.ToEntero, -Dr2("CantidadSeccionAlmacen").ToString.ToDecimal) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar." Exit For End If Next End If End If End If Cont += 1 Next End If 'AGREGAMOS LA ENTRADA If Not ErrorMovInv Then CveMovimientoEntrada = ObjInventario.AddMovimiento(DdlAlmacenDestinoDesapartado.SelectedValue.ToEntero, 9, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, Observaciones:=TxtObservacionesDesapartado.Text.Trim, CveMovimientoRelacionado:=CveMovimientoSalida) FolioEntrada = ObjInventario.Folio Cont = 0 If CveMovimientoEntrada <= 0 Then TextoError = "No se pudo generar el movimiento de entrada correctamente" ErrorMovInv = True Else If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de entrada" Exit For Else If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont} AND TipoSeccionAlmacen = 2").Rows If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacenDestino").ToString.ToEntero, Dr2("CantidadSeccionAlmacen").ToString.ToDecimal) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar." Exit For End If Next End If End If Cont += 1 Next End If End If End If If Not ErrorMovInv Then ObjInventario.Commit() Dim Mensaje As StringBuilder = New StringBuilder Mensaje.Append("Se realizó con éxito el apartado.") Mensaje.AppendFormat("

Folio de Salida: {0}", FolioSalida, CveMovimientoSalida) Mensaje.AppendFormat("
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalida))) Mensaje.AppendFormat("

Folio de Entrada: {0}", FolioEntrada, CveMovimientoEntrada) Mensaje.AppendFormat("
Imprimir Reporte", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada))) TxtObservacionesDesapartado.Text = "" DdlAlmacenDestinoDesapartado.SelectedValueExist("-1") CargaExistencias() LblSucursal.Text = "" UpDatosGenerales.Update() Alert(Mensaje.ToString, TipoMensaje.MsgInformacion) Else ObjInventario.RollBack() Alert(TextoError, TipoMensaje.MsgError) RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") End If ObjInventario.Dispose() End Sub #End Region #End Region #Region "SECCION ALMACEN" Private Sub CreaDtSeccionAlmacen() DtSeccionAlmacen = New DataTable DtSeccionAlmacen.Columns.Add("CantidadSeccionAlmacen", GetType(Decimal)) DtSeccionAlmacen.Columns.Add("IndexSeccionAlmacen", GetType(Integer)) DtSeccionAlmacen.Columns.Add("CveSeccionAlmacenOrigen", GetType(Integer)) DtSeccionAlmacen.Columns.Add("CveSeccionAlmacenDestino", GetType(Integer)) DtSeccionAlmacen.Columns.Add("CvePS", GetType(Integer)) DtSeccionAlmacen.Columns.Add("SeccionAlmacenOrigen", GetType(String)) DtSeccionAlmacen.Columns.Add("SeccionAlmacenDestino", GetType(String)) DtSeccionAlmacen.Columns.Add("Consec", GetType(Integer)) DtSeccionAlmacen.Columns.Add("TipoSeccionAlmacen", GetType(Integer)) End Sub Private Sub CargaDdlAlmacen() DdlSeccionAlmacenOrigen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa) DdlSeccionAlmacenOrigen.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlSeccionAlmacenOrigen.DataBind() DdlSeccionAlmacenDestino.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa) DdlSeccionAlmacenDestino.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlSeccionAlmacenDestino.DataBind() End Sub Protected Sub LnkSeccionAlmacen_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) If Not DdlAlmacenOrigen.SelectedValue.ToEntero > 0 Then Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen origen.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'If Not DdlAlmacenDestino.SelectedValue.ToEntero > 0 AndAlso Not ChkTransitorio.Checked Then ' Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen destino.", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If GvSeccion.Columns(2).Visible = True DivSeccionAlmacenDestino.Visible = True DivSeccionAlmacenOrigen.Visible = True GvSeccion.Columns(1).Visible = True CantidadTotal = gvRow.DataKey("Cantidad").ToDecimal IndexSeccionAlmacen = gvRow.RowIndex CvePS = gvRow.DataKey("CvePS").ToEntero TipoSeccionAlmacen = 1 CargaSeccionAlmacen() RegistraScript("$('#DModalSeccionAlmacen').modal()") End Sub Protected Sub LnkSeccionAlmacenDestino_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim CveAlmacenApartado = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen IN (9) AND Estatus = 'Activo' And CveSubProyecto = {DdlSubProyectoDesapartado.SelectedValue.ToEntero}").ToEntero If Not CveAlmacenApartado > 0 Then Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen destino.", TipoMensaje.MsgAdvertencia) Exit Sub End If DivSeccionAlmacenOrigen.Visible = True DivSeccionAlmacenDestino.Visible = True GvSeccion.Columns(1).Visible = True GvSeccion.Columns(2).Visible = True CantidadTotal = gvRow.FCTextBox("TxtCantidad").Text.ToDecimal IndexSeccionAlmacen = gvRow.RowIndex CvePS = gvRow.DataKey("CvePS").ToEntero TipoSeccionAlmacen = 2 CargaSeccionAlmacen() RegistraScript("$('#DModalSeccionAlmacen').modal()") End Sub Private Sub CargaSeccionAlmacen() Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen} AND TipoSeccionAlmacen = {TipoSeccionAlmacen}").SUMD("CantidadSeccionAlmacen") GvSeccion.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen} AND TipoSeccionAlmacen = {TipoSeccionAlmacen}") GvSeccion.DataBind() TxtCantidadSeccion.Text = "" DdlSeccionAlmacenOrigen.SelectedIndex = 0 DdlSeccionAlmacenDestino.SelectedIndex = 0 Dim CantidadRestante As Decimal = CantidadTotal - CantidadTotalSeccion If CantidadRestante = 0 Then RVTxtCantidad.MaximumValue = "1" TxtCantidadSeccion.Enabled = False Else RVTxtCantidad.MaximumValue = CantidadRestante.ToString TxtCantidadSeccion.Enabled = True End If If TipoSeccionAlmacen = 1 Then If CantidadTotalSeccion > 0 Then GvDatos.Rows(IndexSeccionAlmacen).FCLinkButton("lnkRemove").Visible = False GvDatos.Rows(IndexSeccionAlmacen).FCLinkButton("lnkRemove").ToolTip = "Cuenta con sección almacen" Else GvDatos.Rows(IndexSeccionAlmacen).FCLinkButton("lnkRemove").Visible = True GvDatos.Rows(IndexSeccionAlmacen).FCLinkButton("lnkRemove").ToolTip = "" End If If DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") > 0 Then DdlAlmacenOrigen.Enabled = False DdlAlmacenOrigen.ToolTip = "Cuenta con sección almacen" Else DdlAlmacenOrigen.Enabled = True DdlAlmacenOrigen.ToolTip = "" End If UpDatos.Update() ElseIf TipoSeccionAlmacen = 2 Then If CantidadTotalSeccion > 0 Then GvDatosDesapartado.Rows(IndexSeccionAlmacen).FCTextBox("TxtCantidad").Enabled = False GvDatosDesapartado.Rows(IndexSeccionAlmacen).FCTextBox("TxtCantidad").ToolTip = "Cuenta con sección almacen" Else GvDatosDesapartado.Rows(IndexSeccionAlmacen).FCTextBox("TxtCantidad").Enabled = True GvDatosDesapartado.Rows(IndexSeccionAlmacen).FCTextBox("TxtCantidad").ToolTip = "" End If UpDatosDesapartado.Update() End If UpModalSeccionAlmacen.Update() End Sub Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs) Dim CveAlmacenApartado As Integer = 0 If TipoSeccionAlmacen = 2 Then CveAlmacenApartado = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen IN (9) AND Estatus = 'Activo' And CveSubProyecto = {DdlSubProyectoDesapartado.SelectedValue.ToEntero}").ToEntero End If Dim ObjInv As New ClsInventarios Dim CantidadDisponible As Decimal = 0 If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlSeccionAlmacenOrigen.SelectedValue.ToEntero, If(TipoSeccionAlmacen = 1, DdlAlmacenOrigen.SelectedValue.ToEntero, CveAlmacenApartado), CvePS, UsuarioActual.CveEmpresa) Then If ObjInv.DtResultados.Rows.Count > 0 Then CantidadDisponible = ObjInv.DtResultados.Rows(0)("CantidadRestante").ToString.ToDecimal End If End If ObjInv.Dispose() CantidadDisponible -= DtSeccionAlmacen.FiltraParametros($"CvePS = {CvePS} AND CveSeccionAlmacenOrigen = {DdlSeccionAlmacenOrigen.SelectedValue} AND TipoSeccionAlmacen = {TipoSeccionAlmacen}").SUMD("CantidadSeccionAlmacen") If TxtCantidadSeccion.Text.ToDecimal > CantidadDisponible Then Alert($"No tiene cantidad de producto suficiente en esta seccion de almacen, su cantidad restante es: {CantidadDisponible}", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim Row As DataRow = Nothing DtSeccionAlmacen.AcceptChanges() Row = DtSeccionAlmacen.NewRow Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal Row("IndexSeccionAlmacen") = IndexSeccionAlmacen Row("CveSeccionAlmacenOrigen") = DdlSeccionAlmacenOrigen.SelectedValue.ToEntero Row("SeccionAlmacenOrigen") = DdlSeccionAlmacenOrigen.SelectedItem.Text Row("CveSeccionAlmacenDestino") = DdlSeccionAlmacenDestino.SelectedValue.ToEntero Row("SeccionAlmacenDestino") = DdlSeccionAlmacenDestino.SelectedItem.Text Row("CvePS") = CvePS Row("Consec") = DtSeccionAlmacen.Rows.Count + 1 Row("TipoSeccionAlmacen") = TipoSeccionAlmacen DtSeccionAlmacen.Rows.Add(Row) DtSeccionAlmacen.AcceptChanges() CargaSeccionAlmacen() End Sub Protected Sub LnkEliminarSeccion_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim Index As Integer = 0 For Each Dr As DataRow In DtSeccionAlmacen.Rows If Dr("Consec").ToString.ToEntero = gvRow.DataKey("Consec").ToEntero() Then Exit For End If Index += 1 Next DtSeccionAlmacen.Rows.RemoveAt(Index) DtSeccionAlmacen.AcceptChanges() CargaSeccionAlmacen() End Sub 'Protected Sub LnkVerSecciones_Click(sender As Object, e As EventArgs) ' If Not CveVentaSurtir > 0 Then ' Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia) ' Exit Sub ' End If ' If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then ' Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia) ' Exit Sub ' End If ' Dim ObjInv As New ClsInventarios ' If ObjInv.GetExistenciaSeccionAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then ' GvVerSeccionesAlmacen.DataSource = ObjInv.DtResultados ' End If ' ObjInv.Dispose() ' GvVerSeccionesAlmacen.DataBind() ' UpVerSeccionesAlmacen.Update() ' RegistraScript("$('#ModalVerSeccionesAlmacen').modal()") 'End Sub #End Region End Class