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 CvePSSerie As Integer Get Return CType(ViewState("CvePSSerie"), Integer) End Get Set(value As Integer) ViewState("CvePSSerie") = value End Set End Property Private Property CveUMSerie As Integer Get Return CType(ViewState("CveUMSerie"), Integer) End Get Set(value As Integer) ViewState("CveUMSerie") = 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 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 TipoSeccionAlmacen = 0 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() Dim EsWS = If(UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1", True, False) If EsWS Then DdlClientes.setEsWebService(True) DdlClienteDesapartado.setEsWebService(True) Else DdlClientes.setEsWebService(False) DdlClientes.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClientes.DataBind() DdlClientes.ddl.Items.Insert(0, New ListItem("Todos", "-1")) DdlClienteDesapartado.setEsWebService(False) DdlClienteDesapartado.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClienteDesapartado.DataBind() DdlClienteDesapartado.ddl.Items.Insert(0, New ListItem("Todos", "-1")) End If '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")) DdlVendedorDesapartado.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa, Estatus:=-1) 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("CveSeccionAlmacen", Type.GetType("System.Int32")) dt.Columns.Add("SeccionAlmacen") dt.Columns.Add("Serie") dt.Columns.Add("Lote") dt.Columns.Add("FechaCaducidad", Type.GetType("System.DateTime")) 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() TxtnSerie.Visible = False If DdlProducto2.SelectedValue.ToEntero > 0 Then Dim drP As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlProducto2.SelectedValue.ToEntero).FiltroPrimero("") If drP IsNot Nothing Then If CBool(drP("AplicaSerie")) Then ThSerie.Visible = True TdSerie.Visible = True TxtnSerie.Visible = True GvDatos.Columns(4).Visible = True End If If CBool(drP("AplicaLote")) Then ThLote.Visible = True TdLote.Visible = True GvDatos.Columns(5).Visible = True End If If CBool(drP("AplicaCaducidad")) Then ThCaducidad.Visible = True TdCaducidad.Visible = True GvDatos.Columns(6).Visible = True End If If CBool(drP("AplicaSeccion")) Then ThSeccion.Visible = True TdSeccionAlmacen.Visible = True CargaSeccionesAlmacen(DdlSeccionAlmacen, DdlAlmacenOrigen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) 'DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) 'DdlSeccionAlmacen.DataBind() GvDatos.Columns(7).Visible = True End If End If End If DdlUnidad.Items.Clear() DdlUnidad.DataSource = GlobalDTProductosServiciosEquivalencias(DdlProducto2.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa) DdlUnidad.DataBind() UpDatos.Update() End Sub 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 = {DdlClientes.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() CvePSSerie = DrPS("CvePS").ToString.ToEntero CveUMSerie = 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, CvePSSerie, CveUMSerie, TxtSeriePS.Text.Trim) If Valido Then AgregarPS(1, CvePSSerie, CveUMSerie, Serie:=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 TxtnSerie.Visible Then Cantidad = 1 If TxtnSerie.Text = "" Then Alert("Serie 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, CveSeccionAlmacen:=DdlSeccionAlmacen.SelectedValue.ToEntero, Serie:=If(TxtnSerie.Visible, TxtnSerie.Text, "-1")) If Valido Then Dim StrSeccion As String = If(DdlSeccionAlmacen.SelectedValue.ToEntero > 0, DdlSeccionAlmacen.SelectedItem.Text, "") AgregarPS(Cantidad, CveProducto, DdlUnidad.SelectedValue.ToEntero, CveSeccionAlmacen:=DdlSeccionAlmacen.SelectedValue.ToEntero, SeccionAlmacen:=StrSeccion, Serie:=If(TxtnSerie.Text <> "", TxtnSerie.Text, ""), Limpia:=FuncionalidadSinSerie) End If End If End Sub Private Function ValidaExistencia(Cantidad As Double, CvePS As Integer, CveUnidadMedida As Integer, Optional Serie As String = "-1", Optional Lote As String = "-1", Optional FechaCaducidad As Date = MinFecha, Optional CveSeccionAlmacen As Integer = -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"), CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Serie, Lote:=Lote, FechaCaducidad:=FechaCaducidad) Inv.Dispose() If Existencia - Cantidad - DtMovimientos.SUM("Cantidad", $"CvePS = {CvePS} AND CveUM = {CveUnidadMedida} {If(Serie <> "-1", $" AND Serie = '{Serie}'", "")}") < 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 CveSeccionAlmacen As Integer = -1, Optional Serie As String = "", Optional Lote As String = "", Optional FechaCaducidad As Date = MinFecha, Optional Limpia As Boolean = True, Optional SeccionAlmacen As String = "") 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("Serie") = Serie registro.Item("Lote") = Lote registro.Item("FechaCaducidad") = FechaCaducidad registro.Item("CveClasificacion") = CveClasificacion registro.Item("CveAF") = -1 registro.Item("EstatusExistencia") = "1" registro.Item("CveSeccionAlmacen") = CveSeccionAlmacen registro.Item("SeccionAlmacen") = If(CveSeccionAlmacen > 0, SeccionAlmacen, "") DtMovimientos.Rows.Add(registro) RegistraScript("playsonidito('beep-07.wav')") CargaGvDatos(Limpia) If Limpia Then LimpiaAgregar() Else txtCantidad.Text = (txtCantidad.Text.ToDouble - 1.0).ToString TxtnSerie.Text = "" TxtnSerie.Focus() End If End Sub Private Sub LimpiaAgregar() DdlClasificacion.SelectedValue = "-1" DdlClasificacion_SelectedIndexChanged(DdlClasificacion, EventArgs.Empty) txtCantidad.Text = "" TxtnSerie.Text = "" TxtnSerie.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 ' TxtnSerie.Visible = False ' ThSerie.Visible = False ' TdSerie.Visible = False ' GvDatos.Columns(4).Visible = False 'End If GvDatos.Columns(4).Visible = DtMovimientos.MAX("Serie").ToString <> "" GvDatos.Columns(5).Visible = DtMovimientos.MAX("Lote").ToString <> "" GvDatos.Columns(6).Visible = DtMovimientos.MAX("FechaCaducidad").ToString.ToDate > MinFecha GvDatos.Columns(7).Visible = DtMovimientos.MAX("CveSeccionAlmacen").ToString.ToEntero > 0 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("Serie").ToString = "", "-1", e.Row.DBCampo("Serie").ToString) <> "-1" Then ' TxtnSerie.Visible = True ' ThSerie.Visible = True ' TdSerie.Visible = True ' GvDatos.Columns(4).Visible = True ' e.Row.Cells(4).Text = e.Row.DBCampo("Serie").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") 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"), CveSeccionAlmacen:=dr("CveSeccionAlmacen").ToString.ToEntero, Serie:=If(dr("Serie").ToString = "", "-1", dr("Serie").ToString)) Existencia -= DtMovimientos.SUM("Cantidad", $"CvePS = {dr("CvePS").ToString.ToEntero} AND CveUM = {dr("CveUM").ToString.ToEntero} {If(dr("Serie").ToString <> "-1", $" AND Serie = '{dr("Serie").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"), CveSeccionAlmacen:=gvr.DataKey("CveSeccionAlmacen").ToString.ToEntero, Serie:=If(gvr.DataKey("Serie").ToString = "", "-1", gvr.DataKey("Serie").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:=DdlClientes.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, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, Serie:=Dr("Serie").ToString) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" Exit For 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:=DdlClientes.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 Dim CveSec As Integer = 0 For Each Dr As DataRow In ObjInventario.DtResultados.Rows CveSec = -3 'GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenDestino.SelectedValue.ToEntero, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen", "").ToEntero If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=CveSec, Serie:=Dr("Serie").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de entrada" Exit For 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() DdlClientes.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"))) If CBool(e.Row.DBCampo("AplicaSeccion")) AndAlso DdlAlmacenDestinoDesapartado.SelectedValue.ToEntero > 0 Then Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenDestinoDesapartado.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero).FiltraParametros("Predeterminado = 1") e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtt e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() If dtt.Rows.Count = 0 Then e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) End If dtt.Dispose() End If 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.Columns(5).Visible = DtTemp.MAX("Serie").ToString <> "" GvDatosDesapartado.Columns(6).Visible = DtTemp.MAX("Lote").ToString <> "" GvDatosDesapartado.Columns(7).Visible = DtTemp.MAX("FechaCaducidad").ToString.ToDate > MinFecha GvDatosDesapartado.Columns(8).Visible = DtTemp.MAX("AplicaSeccion") = "True" GvDatosDesapartado.DataSource = DtTemp GvDatosDesapartado.DataBind() UpDatosDesapartado.Update() 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 '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 Diccionario As New HybridDictionary 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.ToDecimal, -1, CveSeccionAlmacen:=Gvr.DataKey("CveSeccionAlmacen").ToEntero, Serie:=Gvr.DataKey("Serie").ToString, Lote:=Gvr.DataKey("Lote").ToString, FechaCaducidad:=Gvr.DataKey("FechaCaducidad").ToString.ToDate, CveMovimientoDetalleEntrada:=Gvr.DataKey("CveMovimientoDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" Exit For Else Diccionario.Add(ObjInventario.CveMovimientoDetalle, Gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue) 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 Dim i As Integer = 0 For Each Dr As DataRow In ObjInventario.DtResultados.Rows Dim CveSeccionAlmacen As Integer = Diccionario(Dr("CveMovimientoDetalle").ToString.ToEntero).ToString.ToEntero If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de entrada" Exit For 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 Private Sub DdlAlmacenDestinoDesapartado_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlAlmacenDestinoDesapartado.SelectedIndexChanged CargaExistencias() End Sub #End Region #End Region End Class