Option Strict On Option Explicit On Imports System.Data Imports Extensiones Partial Class Inventarios_RecepcionEntrega Inherits ClsPaginas #Region "PROPIEDADES" Private Property DtDatos As DataTable Get Return CType(ViewState("DtDatos"), DataTable) End Get Set(value As DataTable) ViewState("DtDatos") = 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 PSSerieLote As String Get Return CType(ViewState("PSSerieLote"), String) End Get Set(value As String) ViewState("PSSerieLote") = 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 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 CveVentaSurtir As Integer Get Return CType(ViewState("CveVentaSurtir"), Integer) End Get Set(value As Integer) ViewState("CveVentaSurtir") = value End Set End Property Private Property CveContrato As Integer Get Return CType(ViewState("CveContrato"), Integer) End Get Set(value As Integer) ViewState("CveContrato") = value End Set End Property Private Property CveAlmacenTraspasoOrigen As Integer Get Return CType(ViewState("CveAlmacenTraspasoOrigen"), Integer) End Get Set(value As Integer) ViewState("CveAlmacenTraspasoOrigen") = value End Set End Property Private Property CveAlmacenTraspasoDestino As Integer Get Return CType(ViewState("CveAlmacenTraspasoDestino"), Integer) End Get Set(value As Integer) ViewState("CveAlmacenTraspasoDestino") = value End Set End Property 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 TipoDocto As String Get Return CType(ViewState("TipoDocto"), String) End Get Set(value As String) ViewState("TipoDocto") = value End Set End Property Private Property DtExistencias As DataTable Get Return CType(ViewState("DtExistencias"), DataTable) End Get Set(value As DataTable) ViewState("DtExistencias") = value End Set End Property Private Property RowIndexCantidadEspecial As Integer Get Return CType(ViewState("RowIndexCantidadEspecial"), Integer) End Get Set(value As Integer) ViewState("RowIndexCantidadEspecial") = value End Set End Property Private Property CantidadEspecialTemp As Decimal Get Return CType(ViewState("CantidadEspecialTemp"), Decimal) End Get Set(value As Decimal) ViewState("CantidadEspecialTemp") = value End Set End Property Private Property EsDevolucionVenta As Integer Get Return CType(ViewState("EsDevolucionVenta"), Integer) End Get Set(value As Integer) ViewState("EsDevolucionVenta") = 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 CveMovimiento As Integer Get Return CType(ViewState("CveMovimiento"), Integer) End Get Set(value As Integer) ViewState("CveMovimiento") = 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() CveVendedor = -1 CveCliente = -1 DdlClientes.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa) DdlClientes.DataBind() DdlClientes.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros("CveTipoAlmacen IN (1,2)") 'GlobalDTAlmacen(UsuarioActual.CveEmpresa) DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacen.SelectedValue = "-1" DdlAlmacen.DataBind() DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen) 'DdlAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1")) TxtFechaPendientes.Text = Now.ToShortDateString TxtFechaCaducidad.Text = Now.ToShortDateString TxtFecha.Text = Now.ToShortDateString DdlSucursal.DataSource = GlobalDTSucursales.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa) DdlSucursal.DataBind() DdlSucursal.SelectedValueExist(UsuarioActual.CveSucursal.ToString) If UsuarioActual.TienePermisoProceso(152) Then DdlSucursal.Enabled = False CreaDtDetalle() CargaPendientes() End Sub #End Region #Region " CARGA PENDIENTES POR SURTIR " Protected Sub DdlCliente_SelectedIndexChanged(sender As Object, e As EventArgs) CargaFolios() End Sub Private Sub CargaFolios() Dim ObjInventarios As New ClsInventarios DdlFolio.Items.Clear() If DdlClientes.SelectedValue.ToEntero > 0 Then If ObjInventarios.VentasPendientesAlmacenGet(DdlClientes.SelectedValue.ToEntero, MinFecha, DdlSucursal.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then DdlFolio.DataSource = ObjInventarios.DtResultados Else Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError) End If End If ObjInventarios.Dispose() DdlFolio.DataBind() DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1")) UpFiltros.Update() End Sub Protected Sub TimmerRefresh_Tick(sender As Object, e As EventArgs) CargaPendientes() End Sub Protected Sub BtnConsultarPendientes_Click(sender As Object, e As EventArgs) CargaPendientes() End Sub Private Sub CargaPendientes() Dim ObjInventarios As New ClsInventarios Dim DtPendientes As New DataTable If ObjInventarios.VentasPendientesAlmacenGet(-1, TxtFechaPendientes.Text.ToDate, DdlSucursal.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then DtPendientes = ObjInventarios.DtResultados 'If DtPendientes.Rows.Count > 0 Then ' TipoMovimiento = If(DtPendientes.Rows(0)("TipoDocto").ToString.Contiene({"Rem", "Ing"}), 1, 2) 'End If Else DtPendientes = Nothing Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError) End If ObjInventarios.Dispose() If DtPendientes IsNot Nothing Then GVPendientes.DataSource = DtPendientes End If LtActualizado.Text = String.Format("Actualizado: {0}", Now.ToString("H:mm")) GVPendientes.DataBind() UpPendientes.Update() End Sub Protected Sub GVPendientes_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GVPendientes.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCLinkButton("BtnSurtir").CommandArgument = e.Row.DBCampo("CveVenta") If e.Row.DBCampo("TipoDocto").ToString.Contiene({"Rem", "Ing", "Ped"}) And e.Row.DBCampo("EsDevolucionVenta").ToString.ToEntero = 0 Then e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary " e.Row.FCLinkButton("BtnSurtir").Text = " Surtir " Else e.Row.FCLinkButton("BtnSurtir").CssClass = "btn yellow-gold " e.Row.FCLinkButton("BtnSurtir").Text = " Recibir" End If End If End Sub #End Region #Region " CARGA VENTA POR SURTIR " Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs) If CType(sender, LinkButton).CommandArgument.ToEntero > 0 Then CargaVentaPorSurtir(CType(sender, LinkButton).CommandArgument.ToEntero) TimmerRefresh.Enabled = False End If End Sub Protected Sub BtnBuscar_Click(sender As Object, e As EventArgs) CargaVentaPorSurtir(DdlFolio.SelectedValue.ToEntero) End Sub Private Sub CargaVentaPorSurtir(CveVenta As Integer) LbSurtida.Visible = False CveContrato = -1 Dim ObjInventario As New ClsInventarios If ObjInventario.EntregaAlmacenGet(CveVenta) Then If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then DtDatos = ObjInventario.DtResultados DtDatos.Columns.Add("Consec", GetType(Integer)) DtDatos.Columns.Add("CantidadGV", GetType(Double)) DtDatos.Columns.Add("CantidadTraspaso", GetType(Double)) Dim Index = 1 For Each Dr As DataRow In DtDatos.Rows Dr("Consec") = Index Index += 1 Next DtDatosDetalle = Nothing CreaDtDetalle() If DtDatos.Rows(0) IsNot Nothing Then EsDevolucionVenta = DtDatos.Rows(0)("EsDevolucionVenta").ToString.ToEntero TipoMovimiento = If(DtDatos.Rows(0)("TipoDocto").ToString.Contiene({"Rem", "Ing", "Ped"}) And EsDevolucionVenta = 0, 1, 2) TipoDocto = DtDatos.Rows(0)("TipoDocto").ToString LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString LbFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString LbOberservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString CveVentaSurtir = CveVenta CveAlmacenTraspasoDestino = DtDatos.Rows(0)(If(EsDevolucionVenta = 1, "CveAlmacenTraspasoOrigen", "CveAlmacenTraspasoDestino")).ToString.ToEntero CveAlmacenTraspasoOrigen = DtDatos.Rows(0)(If(EsDevolucionVenta = 1, "CveAlmacenTraspasoDestino", "CveAlmacenTraspasoOrigen")).ToString.ToEntero CveContrato = DtDatos.Rows(0)("CveContrato").ToString.ToEntero CveVendedor = DtDatos.Rows(0)("CveVendedor").ToString.ToEntero CveCliente = DtDatos.Rows(0)("CveCliente").ToString.ToEntero If DtDatos.SUM("CantidadS") <= 0 Then GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna" Else GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario" End If If CveAlmacenTraspasoDestino > 0 Then DivTipoCambioAdvertencia.Visible = True LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: {GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}" Else DivTipoCambioAdvertencia.Visible = False End If DdlAlmacen.Items.Clear() If CveAlmacenTraspasoOrigen > 0 Then DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString)) Else DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros("CveTipoAlmacen IN (1,2)") 'GlobalDTAlmacen(UsuarioActual.CveEmpresa) End If DdlAlmacen.DataBind() DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacen.SelectedValue = "-1" DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen) If CveAlmacenTraspasoOrigen > 0 Then DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen) End If TxtFecha.Text = DtDatos.Rows(0)("Fecha").ToString End If If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then DivCodigoSeriePS.Visible = True Else DivCodigoSeriePS.Visible = False End If If TipoMovimiento = 2 Then Dim Filtro = If(ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString.Contiene({"Ing", "Dev"}), "CveConcepto = 3", "CveConcepto = 9") If ObjInventario.GetInv_Mov(ObjInventario.DtResultados.Rows(0)("CveVentaPadre").ToString.ToEntero, UsuarioActual.CveEmpresa) Then DtExistencias = ObjInventario.DtResultados.FiltraParametros($"CvePS Is Not NULL AND {Filtro}") If Not DtExistencias.Rows.Count > 0 Then Alert("La Venta original de la Devolución no tiene salida de Almacén.", TipoMensaje.MsgAdvertencia) End If Else Alert("Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If End If Else Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) End If Else DtDatos = Nothing End If ObjInventario.Dispose() UpGenerales.Update() CargaGvDatos() End Sub Private Sub CargaGvDatos() If DtDatos IsNot Nothing Then GvDatos.DataSource = DtDatos End If GvDatos.DataBind() UpDatos.Update() UpVenta.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("Inv_CveMetodoInventario") = "5" Then e.Row.FCButton("BtnSerieLote").Visible = True e.Row.FCButton("BtnSerieLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec")) e.Row.FCTextBox("TbCantidadF").Enabled = False e.Row.FCCheckBox("cbInv").Enabled = False Dim Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DBCampo("Consec"))).Rows.Count e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString 'e.Row.FCTextBox("TbCantidadF").Text = "0" Else e.Row.FCButton("BtnSerieLote").Visible = False e.Row.FCTextBox("TbCantidadF").Enabled = True e.Row.FCTextBox("TbCantidadF").Attributes.Add("onblur", String.Format("ValidarCantidad(this, {0})", e.Row.DBCampo("CantidadF"))) 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 " AGREGA POR SERIE/LOTE " Private Sub CreaDtDetalle() If DtDatosDetalle Is Nothing Then DtDatosDetalle = New DataTable DtDatosDetalle.Columns.Add("CveVentaDetalle", GetType(Integer)) 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("SerieLote", GetType(String)) DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(String)) DtDatosDetalle.Columns.Add("FueTraspaso", GetType(Integer)) End If End Sub Private Sub CargaSerie() 'RegistraScript("document.getElementById(""TxtSerieLote"").focus();") Dim AplicaCaducidad = False If GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0}", CvePSSerieLote)).Rows(0) IsNot Nothing Then AplicaCaducidad = If(GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0}", CvePSSerieLote)).Rows(0)("AplicaCaducidad").ToString = "True", True, False) End If If AplicaCaducidad Then GvSerie.Columns(1).Visible = True TdCaducidad1.Visible = True TdCaducidad2.Visible = True Else GvSerie.Columns(1).Visible = False TdCaducidad1.Visible = False TdCaducidad2.Visible = False End If 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 Else BtnAgregarPS.Enabled = True End If 'SERIE LOTE RECOMENDADO Dim DtSerieLote As New DataTable If TipoMovimiento = 1 Then Dim ObjInventarios As New ClsInventarios If ObjInventarios.SerieLoteRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) Then DtSerieLote = ObjInventarios.DtResultados End If ObjInventarios.Dispose() Else DtSerieLote = DtExistencias.FiltraParametros("SerieLote <> ''") End If Dim DrsRemove As New List(Of DataRow) If DtSerieLote.Rows.Count > 0 Then 'CALCULA YA COMPLETADOS DtSerieLote.Columns.Add("CantidadSeleccionada", GetType(Integer)) For Each dr As DataRow In DtSerieLote.Rows dr("CantidadSeleccionada") = DtDatosDetalle.FiltraParametros(String.Format("Consec = {0} AND SerieLote = '{1}'", CveConsecSerieLote, dr("SerieLote"))).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)("SerieLote")) If AplicaCaducidad Then Mensaje.AppendFormat(", Caducicdad: {0}", DtSerieLote.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString) 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 'SI TIENE SALIDA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD Dim Contador = 0 For Each Gvr As GridViewRow In GvDatos.Rows If Gvr.DataKey("CvePS").ToEntero = CvePSSerieLote Then Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count Gvr.FCCheckBox("cbInv").Enabled = False Gvr.FCCheckBox("cbInv").Checked = True Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString End If Next UpDatos.Update() 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) CveConsecSerieLote = Argumentos(4).ToEntero CvePSSerieLote = Argumentos(0).ToEntero PSSerieLote = Argumentos(2).ToString CveUMSerieLote = Argumentos(1).ToEntero DivSerie.Visible = True RegistraScript(String.Format("$('#{0}').modal('show')", DivSerie.ClientID)) CargaSerie() 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 If DtDatosDetalle.FiltraParametros($"CvePS = {CvePSSerieLote} AND SerieLote = '{SerieLote}'").Rows.Count > 0 Then Alert("La SerieLote indicada ya esta registrada. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") TxtSerieLote.Text = "" Exit Sub End If Dim AplicaCaducidad = False If GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0}", CvePSSerieLote)).Rows(0) IsNot Nothing Then AplicaCaducidad = If(GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0}", CvePSSerieLote)).Rows(0)("AplicaCaducidad").ToString = "True", True, False) End If 'Valida Existencia If TipoMovimiento = 1 Then Dim ObjInventarios As New ClsInventarios Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerieLote, CveUMSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=SerieLote, CveVendedor:=CveVendedor, CveCliente:=CveCliente) If Existencia < 1 Then Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con la SerieLote definida ""{SerieLote}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", "")) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") ObjInventarios.Dispose() If Tipo = 1 Then DivSerie.Visible = True RegistraScript(String.Format("$('#{0}').modal('show')", DivSerie.ClientID)) End If Exit Sub End If Else If DtExistencias IsNot Nothing Then Dim Existencia = DtExistencias.SUM("Cantidad", $"CvePS = {CvePSSerieLote} AND CveUM = {CveUMSerieLote} AND SerieLote = '{SerieLote}'") If Existencia < 1 Then Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con la SerieLote definida ""{SerieLote}"". 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 DivSerie.Visible = True RegistraScript(String.Format("$('#{0}').modal('show')", DivSerie.ClientID)) End If Exit Sub End If End If End If Dim Row = DtDatosDetalle.NewRow Row("ConsecId") = CveConsecSerieLote Row("Consec") = DtDatosDetalle.Rows.Count + 1 Row("PS") = PSSerieLote Row("CvePS") = CvePSSerieLote Row("CveUM") = CveUMSerieLote Row("SerieLote") = SerieLote Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidad.Text, MinFecha.ToShortDateString) DtDatosDetalle.Rows.Add(Row) RegistraScript("playsonidito('beep-07.wav')") If Tipo = 1 Then TxtSerieLote.Text = "" TxtFechaCaducidad.Text = Now.ToShortDateString End If CargaSerie() End Sub Protected Sub GvSerie_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSerie.RowDeleting Dim keySerieLote As String = e.Keys("SerieLote").ToString Try For Each dr As DataRow In DtDatosDetalle.Rows If dr("SerieLote").ToString = keySerieLote Then dr.Delete() End If Next Catch ex As Exception End Try DtDatosDetalle.AcceptChanges() CargaSerie() End Sub #End Region #Region " AGREGA CON TXT | CODIGO - SERIE " Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs) If TxtCodigoPS.Text = "" Then Exit Sub End If TdSeriePS.Visible = False Dim Existe = False Dim PSTemp = "" For Each Gvr As GridViewRow In GvDatos.Rows If Gvr.DataKey("CodigoBarras") = TxtCodigoPS.Text.Trim Then Dim TxtCantidad = GvDatos.Rows(Gvr.RowIndex).FCTextBox("TbCantidadF") If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then ''VALIDA EXISTENCIA If TipoMovimiento = 1 Then Dim ObjInventario As New ClsInventarios Dim Existencia = ObjInventario.GetExistenciasPS(Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.DataKey("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveCliente:=CveCliente) ObjInventario.Dispose() If Not Existencia >= TxtCantidad.Text.ToDecimal + 1 Then TxtCodigoPS.Text = "" Alert($"No hay existencias suficientes del producto: ""{Gvr.DataKey("PS")}"". Solo hay disponibles {Existencia.FormatoNumero} en Almacen. Por favor Verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If Else If DtExistencias IsNot Nothing Then Dim Existencia = DtExistencias.SUM("Cantidad", $"CvePS = {Gvr.DataKey("CvePS")} AND CveUM = {Gvr.DataKey("CveUM").ToString.ToEntero}") If Not Existencia >= TxtCantidad.Text.ToDecimal + 1 Then TxtCodigoPS.Text = "" Alert($"No hay existencias suficientes del producto: ""{Gvr.DataKey("PS")}"". Solo hay disponibles {Existencia.FormatoNumero} en Almacen. Por favor Verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If End If End If If Gvr.DataKey("AplicaSerieLote") = "True" Then TdSeriePS.Visible = True TxtSeriePS.Focus() CveConsecSerieLote = Gvr.DataKey("Consec").ToString.ToEntero PSSerieLote = Gvr.DataKey("PS").ToString CvePSSerieLote = Gvr.DataKey("CvePS").ToEntero CveUMSerieLote = Gvr.DataKey("CveUM").ToEntero Exit Sub End If Dim CantidadEspecial = If(Gvr.DataKey("CveClasificacion").ToString.ToEntero = 17601, True, False) If CantidadEspecial Then RegistraScript("CantidadEspecial();window.setTimeout(FocusCantidadEspecial,200);") LtlProductoCantidad.Text = $"{Gvr.DataKey("Codigo")}" RowIndexCantidadEspecial = Gvr.RowIndex CantidadEspecialTemp = Gvr.DataKey("CantidadF").ToDecimal TxtCodigoPS.Text = "" Exit Sub Else TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + 1).ToString.FormatoNumero TxtCodigoPS.Text = "" UpDatos.Update() Exit Sub End If VerificaVentaSurtida() Exit Sub End If Existe = True PSTemp = Gvr.DataKey("PS").ToString 'Alert($"Ya se ha cargado la totalidad del Producto ""{Gvr.DataKey("PS").ToString}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") 'VerificaVentaSurtida() 'Exit Sub End If Next VerificaVentaSurtida() If Existe Then Alert($"Ya se ha cargado la totalidad del Producto ""{PSTemp}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") Else Alert($"No se ha encontrado un producto para surtir con el Codigo ""{TxtCodigoPS.Text}"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") End If RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") TxtCodigoPS.Text = "" End Sub Private Sub VerificaVentaSurtida() Dim Surtida = True For Each Gvr As GridViewRow In GvDatos.Rows If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then Surtida = False Exit Sub End If Next If Surtida Then LbSurtida.Visible = True End If End Sub Protected Sub BtnSeriePS_Click(sender As Object, e As EventArgs) AgregaSerieLote(TxtSeriePS.Text.Trim, 2) TdSeriePS.Visible = False TxtSeriePS.Text = "" TxtCodigoPS.Text = "" TxtCodigoPS.Focus() VerificaVentaSurtida() End Sub Protected Sub BtnGuardarCantidadEspecial_Click(sender As Object, e As EventArgs) AgregaCantidadEspecial() End Sub Private Sub AgregaCantidadEspecial() Dim TxtCantidad = GvDatos.Rows(RowIndexCantidadEspecial).FCTextBox("TbCantidadF") If CantidadEspecialTemp - TxtCantidadEspecialDiv.Text.ToDecimal - TxtCantidad.Text.ToDecimal >= 0 Then TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + TxtCantidadEspecialDiv.Text.ToDecimal).ToString.FormatoNumero 'RegistraScript("$('#ModalCantidad').modal('hide');") RegistraScript("$('#DivCantidadEspecial').hide(200);") UpDatos.Update() TxtCodigoPS.Focus() Else Alert("La cantidad excede la pendiente por surtir. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If TxtCantidadEspecialDiv.Text = "1" End Sub #End Region #Region " GUARDAR " Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) 'VALIDA CANTIDAD DE SALIDA Dim Cantidad = 0.0D For Each Gvr As GridViewRow In GvDatos.Rows If Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then Cantidad = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Exit For End If Next If Not Cantidad > 0 Then Alert("No se detecto ningun movimiento por hacer. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'PROCESO , si tiene proceso "X" no lo valida If Not UsuarioActual.TienePermisoProceso(176) Then For Each Gvr As GridViewRow In GvDatos.Rows If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then Alert("En la factura no se han especificado todos los productos a entregar, favor de especificarlos para poder dar salida.", TipoMensaje.MsgAdvertencia) Exit Sub End If Next End If If EsDevolucionVenta = 1 Or TipoDocto.Contiene({"Ped"}) Then For Each Gvr As GridViewRow In GvDatos.Rows If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString.ToDecimal) Then Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If Next End If Dim ObjInventario As New ClsInventarios Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL()) Dim ObjVentas As New ClsVentas(ObjInventario.IniciaTransacSQL()) Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL()) Dim CveMovimiento As Integer Dim Folio As Integer Dim ErrorMovInv As Boolean Dim DtDetalle As New DataTable Dim TextoError = "" 'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH Dim Index = 0 For Each gvr As GridViewRow In GvDatos.Rows If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDouble End If Index += 1 Next 'VALIDA EXISTENCIA 2 If TipoMovimiento = 1 Then For Each Dr As DataRow In DtDatos.Rows If Dr("CantidadGV").ToString.ToDouble > 0 Then If Dr("AplicaSerieLote").ToString = "True" Then DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows If Not ObjInventario.GetExistenciasPS(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr1("SerieLote").ToString, CveVendedor:=CveVendedor, CveCliente:=CveCliente) >= 1 Then TextoError += String.Format("No hay existencias suficientes del producto: {0}
", Dr("PS")) End If Next Else If Not ObjInventario.GetExistenciasPS(Dr("CvePS").ToString.ToEntero, Dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveCliente:=CveCliente) >= Dr("CantidadGV").ToString.ToDecimal Then TextoError += String.Format("No hay existencias suficientes del producto: {0}
", Dr("PS")) End If End If End If Next If TextoError <> "" Then Alert(TextoError, TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") ObjInventario.RollBack() ObjInventario.Dispose() Exit Sub End If Else If DtExistencias IsNot Nothing Then For Each Dr As DataRow In DtDatos.Rows If Dr("CantidadGV").ToString.ToDouble > 0 Then If Dr("AplicaSerieLote").ToString = "True" Then DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr1("CvePS").ToString.ToEntero} AND CveUM = {Dr1("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'") >= 1 Then TextoError += String.Format(" - {0}
", Dr1("PS")) End If Next Else If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero}") >= Dr("CantidadGV").ToString.ToDouble Then TextoError += String.Format(" - {0}
", Dr("PS")) End If End If End If Next If TextoError <> "" Then Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:

{TextoError}", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") ObjInventario.RollBack() ObjInventario.Dispose() Exit Sub End If End If End If '' COMIENZA: APARTADOS Dim DtTraspasos As New DataTable DtTraspasos.Columns.Add("CveAlmacen", GetType(Integer)) DtTraspasos.Columns.Add("Almacen", GetType(String)) DtTraspasos.Columns.Add("CveMovimientoSalida", GetType(Integer)) DtTraspasos.Columns.Add("FolioSalida", GetType(Integer)) DtTraspasos.Columns.Add("CveMovimientoEntrada", GetType(Integer)) DtTraspasos.Columns.Add("FolioEntrada", GetType(Integer)) Dim DtMovtosDetalle As New DataTable DtMovtosDetalle.Columns.Add("CveVentaDetalle", GetType(Integer)) DtMovtosDetalle.Columns.Add("CveMovimientoDetalle1", GetType(Integer)) DtMovtosDetalle.Columns.Add("CveMovimientoDetalle2", GetType(Integer)) DtMovtosDetalle.Columns.Add("CveMovimientoDetalle3", GetType(Integer)) Dim CveMovimientoSalida = -1, FolioSalida = -1, CveMovimientoEntrada = -1, CveMovimientoEntradaApartado = -1, FolioEntrada = -1 Dim CantidadPendiente = 0.0 Dim CantidadSaldo = 0.0 If TipoMovimiento = 1 Then ' SI ES DEVOLUCION NO APLICA APARTADO ' SALIDA POR TRASPASO DE LOS ALMACENES DE APARTADO For Each Dr As DataRow In DtDatos.Rows If Dr("CantidadGV").ToString.ToDouble > 0 Then If Dr("AplicaSerieLote").ToString = "True" Then DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr1("SerieLote").ToString, CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveCliente:=CveCliente) Then For Each Dr2 As DataRow In ObjInventario.DtResultados.Rows 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero If Not CveMovimientoSalida > 0 Then CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero) FolioSalida = ObjInventario.Folio If Not CveMovimientoSalida > 0 Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Dim DrMovto = DtTraspasos.NewRow DrMovto("Almacen") = Dr2("Almacen").ToString.ToEntero DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString.ToEntero DrMovto("CveMovimientoSalida") = CveMovimientoSalida DrMovto("FolioSalida") = FolioSalida DtTraspasos.Rows.Add(DrMovto) End If CantidadPendiente = 1 If ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, SerieLote:=Dr1("SerieLote").ToString) Then Dim Row = DtMovtosDetalle.NewRow Row("CveVentaDetalle") = Dr("CveVentaDetalle").ToString.ToEntero Row("CveMovimientoDetalle1") = ObjInventario.CveMovimientoDetalle DtMovtosDetalle.Rows.Add(Row) Else ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1 DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle") Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDouble + CantidadPendiente Exit For Next End If Next Else If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString.ToEntero, Dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveCliente:=CveCliente) Then CantidadSaldo = Dr("CantidadGV").ToString.ToDouble For Each Dr1 As DataRow In ObjInventario.DtResultados.Rows 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr1("CveAlmacen")}").ToEntero If Not CveMovimientoSalida > 0 Then CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero) FolioSalida = ObjInventario.Folio If Not CveMovimientoSalida > 0 Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Dim DrMovto = DtTraspasos.NewRow DrMovto("CveAlmacen") = Dr1("CveAlmacen").ToString.ToEntero DrMovto("CveMovimientoSalida") = CveMovimientoSalida DrMovto("FolioSalida") = FolioSalida DtTraspasos.Rows.Add(DrMovto) End If CantidadPendiente = If(Dr1("Existencia").ToString.ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("Existencia").ToString.ToDecimal) If ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then Dim Row = DtMovtosDetalle.NewRow Row("CveVentaDetalle") = Dr("CveVentaDetalle").ToString.ToEntero Row("CveMovimientoDetalle1") = ObjInventario.CveMovimientoDetalle DtMovtosDetalle.Rows.Add(Row) Else ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If CantidadSaldo -= CantidadPendiente Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDouble + CantidadPendiente If CantidadSaldo <= 0 Then Exit For Next If ErrorMovInv Then Exit For End If End If End If Next 'ENTRADA POR TRASPASO AL ALMACEN GENERAL If Not ErrorMovInv Then For Each Dr1 As DataRow In DtTraspasos.Rows CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente) FolioEntrada = ObjInventario.Folio If Not CveMovimientoEntradaApartado > 0 Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado Dr1("FolioEntrada") = FolioEntrada If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero) Then DtMovtosDetalle.Select($"CveMovimientoDetalle1 = {Dr("CveMovimientoDetalle")}")(0)("CveMovimientoDetalle2") = ObjInventario.CveMovimientoDetalle Else ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Next End If If ErrorMovInv Then Exit For Next End If End If '' TERMINA: APARTADOS Dim ConceptoMovimiento = 3 ConceptoMovimiento = If(TipoMovimiento = 1, ConceptoMovimiento, 18) ConceptoMovimiento = If(CveAlmacenTraspasoDestino > 0, 8, ConceptoMovimiento) CveMovimiento = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveAlmacenDestino:=CveAlmacenTraspasoDestino) Folio = ObjInventario.Folio If CveMovimiento > 0 Then 'SACA LO DE TRASPASOS - APARTADO For Each Dr1 As DataRow In DtTraspasos.Rows CveMovimientoSalida = Dr1("CveMovimientoEntrada").ToString.ToEntero If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=DtMovtosDetalle.Select($"CveMovimientoDetalle2 = {Dr("CveMovimientoDetalle")}")(0)("CveVentaDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Next End If If ErrorMovInv Then Exit For Next CantidadPendiente = 0.0 For Each Dr As DataRow In DtDatos.Rows CantidadPendiente = Dr("CantidadGV").ToString.ToDouble - Dr("CantidadTraspaso").ToString.ToDouble If CantidadPendiente > 0 Then Dim PU = 0.0 'SI FUE POR SERIE LOTE DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec"))) If DtDetalle.Rows.Count > 0 Then For Each Dr1 As DataRow In DtDetalle.Rows If TipoMovimiento = 2 Then PU = DtExistencias.FiltroPrimero($"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'")("PU").ToString.ToDouble End If If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar." Exit For End If Next Else If TipoMovimiento = 2 Then PU = DtExistencias.FiltroPrimero($"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero}")("PU").ToString.ToDouble End If If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, CantidadPendiente, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar." Exit For End If End If End If Next If Not ErrorMovInv Then If CveAlmacenTraspasoDestino > 0 Then ' TRASPASO CUANDO ES REMISION CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenTraspasoDestino, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=DdlAlmacen.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(CveMovimiento, 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, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de entrada" Exit For End If Next End If End If Else 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN - SALIDA ALMACEN Dim DtCostos As DataTable = Nothing Dim ValorInventario As Decimal = 0 If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then DtCostos = ObjInventario.DtResultados Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"}) Dim IdCtaContable As Integer = 0 If tmpCostos.Rows.Count > 0 Then If ObjVentas.GetVenta(CveVentaSurtir, UsuarioActual.CveEmpresa) Then Dim CvePrePoliza As Integer = ObjVentas.DtResultados(0)("CvePrePoliza").ToString.ToEntero Dim Fecha As Date = ObjVentas.DtResultados(0)("Fecha").ToString.ToDate Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero Dim SerieFolio As String = ObjVentas.DtResultados(0)("SerieFolio").ToString 'Se agrega movimiento separado por la cuenta de ventas (ER) For Each RowInv As DataRow In tmpCostos.Rows ValorInventario = DtCostos.SUM("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").ToString.ToDecimal 'Concepto = String.Format("{0} - {1}", Row2("Clasificacion").ToString, Row2("SubProyecto").ToString) IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaGasto", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero If ValorInventario <> 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, If(TipoMovimiento = 1, 1, -1) * ValorInventario, SerieFolio, 68, SerieFolio, Fecha, IdCtaContable, -1, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=If(TipoMovimiento = 1, 1, -1) * ValorInventario) Then ErrorMovInv = True End If If Not ErrorMovInv Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, If(TipoMovimiento = 1, 1, -1) * ValorInventario, SerieFolio, 69, SerieFolio, Fecha, IdCtaContable, -1, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=If(TipoMovimiento = 1, 1, -1) * ValorInventario) Then ErrorMovInv = True End If End If End If Next Else ErrorMovInv = True TextoError = "Ocurrió un Error al ingresar las prepolizas" End If End If End If End If 'DEVOLUCION If TipoMovimiento = 2 Then 'APARTADOS If ObjInventario.VentasAlmacenApartadosGet(CveVentaSurtir) Then Dim DtTempApartados = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 9", "CveAlmacen") Dim CveMovimientoSalidaApartado = -1 Dim CveAlmacenApartado = -1 Dim CveAlmacenOrigen = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero) For Each Dr As DataRow In DtTempApartados.Rows If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString.ToEntero Then CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, CveAlmacenDestino:=Dr("CveAlmacen").ToString.ToEntero) FolioSalida = ObjInventario.Folio CveAlmacenApartado = Dr("CveAlmacen").ToString.ToEntero End If If CveMovimientoSalidaApartado > 0 Then Dim DrMovto = DtTraspasos.NewRow DrMovto("Almacen") = Dr("Almacen").ToString.ToEntero DrMovto("CveAlmacen") = Dr("CveAlmacen").ToString.ToEntero DrMovto("CveMovimientoSalida") = CveMovimientoSalidaApartado DrMovto("FolioSalida") = FolioSalida DtTraspasos.Rows.Add(DrMovto) Else ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de control de apartados" Exit For End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de control de apartados" Exit For End If Next If Not ErrorMovInv Then For Each Dr1 As DataRow In DtTraspasos.Rows CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente) FolioEntrada = ObjInventario.Folio If Not CveMovimientoEntradaApartado > 0 Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado Dr1("FolioEntrada") = FolioEntrada If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero) Then ErrorMovInv = True TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar." Exit For End If Next End If If ErrorMovInv Then Exit For Next End If End If End If End If Else ErrorMovInv = True End If If Not ErrorMovInv And EsDevolucionVenta = 1 Then If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then TextoError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar." ErrorMovInv = True End If End If If Not ErrorMovInv Then If Not ObjEventos.AddEventoBitacora(String.Format("Venta Surtida en Folio: {1}", CveMovimiento, Folio), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaSurtir) Then ErrorMovInv = True End If End If If Not ErrorMovInv Then ObjInventario.Commit() RegistraScript("playsonidito('beep-07.wav')") Dim Msg As New StringBuilder Msg.AppendFormat("Movimiento Salida: {1}", CveMovimiento, Folio) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento))) 'Msg.AppendFormat("") 'Dim script As String = "$('#TxtNumeroGuia').val($('#NumeroGuia').val());$('#BtnNumeroGuia').click();" If CveMovimientoEntrada > 0 Then Msg.AppendFormat("

Movimiento Entrada (Traspaso): {1}", CveMovimientoEntrada, FolioEntrada) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada))) End If If DtTraspasos.Rows.Count > 0 Then Msg.AppendFormat("

Movimientos de Control (Apartados):") For Each Dr As DataRow In DtTraspasos.Rows Msg.AppendFormat("
Almacén {0} | Salida por Traspaso: {2} | Entrada por Traspaso: {4} ", Dr("Almacen"), Dr("CveMovimientoSalida"), Dr("FolioSalida"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada")) Next End If Alert(Msg.ToString, TipoMensaje.MsgInformacion) Limpia() CargaPendientes() Else Alert(TextoError, TipoMensaje.MsgError) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") ObjInventario.RollBack() End If ObjInventario.Dispose() End Sub Private Sub Limpia() 'DATOS DE LA VENTA LbCantidad.Text = "" LbCliente.Text = "" LbOberservaciones.Text = "" LbFolio.Text = "" 'DATOS DEL MOVIMINETO TxtObservaciones.Text = "" TxtFecha.Text = Now.ToShortDateString DdlAlmacen.SelectedValueExist(-1) CargaFolios() 'VARIABLES GENERALES CveVentaSurtir = -1 DtDatosDetalle = Nothing DtDatos = Nothing DivTipoCambioAdvertencia.Visible = False LbSurtida.Visible = False TimmerRefresh.Enabled = True UpGenerales.Update() CargaGvDatos() End Sub Private Sub BtnNumeroGuia_Click(sender As Object, e As EventArgs) Handles BtnNumeroGuia.Click Dim Objeto As New ClsInventarios If Objeto.UpdateMovimientoGuia(TxtGuia.Text, CveMovimiento, UsuarioActual.CveEmpresa) Then Alert("Se ha guardado correctamente la póliza", TipoMensaje.MsgConfirmacion) End If Objeto.Dispose() End Sub #End Region End Class