Option Strict On Option Explicit On Imports Microsoft.Reporting.WebForms Imports System.Data Imports Extensiones Imports System.IO Imports System.Linq Partial Class Inventarios_RecepcionAlmacen Inherits ClsPaginas #Region "PROPIEDADES" Private Shared missing As Object = System.Reflection.Missing.Value Private Property EstatusInicial As String Get EstatusInicial = ViewState("EstatusInicial").ToString End Get Set(value As String) ViewState("EstatusInicial") = value End Set End Property Private Property EstatusFinalOK As String Get EstatusFinalOK = ViewState("EstatusFinalOK").ToString End Get Set(value As String) ViewState("EstatusFinalOK") = value End Set End Property Private Property DtInv As DataTable Get Return CType(ViewState("DtInv"), DataTable) End Get Set(value As DataTable) ViewState("DtInv") = 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 dt As DataTable Get Return CType(ViewState("dt"), DataTable) End Get Set(value As DataTable) ViewState("dt") = value End Set End Property Private Property CveMoneda As Integer Get Return CType(ViewState("CveMoneda"), Integer) End Get Set(value As Integer) ViewState("CveMoneda") = value End Set End Property Private Property CveCompraParametro As Integer Get Return CType(ViewState("CveCompraParametro"), Integer) End Get Set(value As Integer) ViewState("CveCompraParametro") = value End Set End Property Private Property CveTipoCompra As Integer Get Return CType(IfNull(ViewState("CveTipoCompra"), 0), Integer) End Get Set(value As Integer) ViewState("CveTipoCompra") = value End Set End Property Private Property DtCuentas As DataTable Get Return CType(ViewState("DtCuentas"), DataTable) End Get Set(value As DataTable) ViewState("DtCuentas") = value End Set End Property Private ReadOnly Property IdPoliza As Integer Get Return ViewState("IdPoliza").ToString.ToEntero End Get 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 DtDatosLoteDetalle As DataTable Get Return CType(ViewState("DtDatosLoteDetalle"), DataTable) End Get Set(value As DataTable) ViewState("DtDatosLoteDetalle") = 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 CantidadTotal As Decimal Get Return CType(ViewState("CantidadTotal"), Decimal) End Get Set(value As Decimal) ViewState("CantidadTotal") = 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 PUSerieLote As Decimal Get Return CType(ViewState("PUSerieLote"), Decimal) End Get Set(value As Decimal) ViewState("PUSerieLote") = 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 TotalGV As Decimal Get Return CType(ViewState("TotalGV"), Decimal) End Get Set(value As Decimal) ViewState("TotalGV") = value End Set End Property Private Property TotalCompraOC As Decimal Get Return CType(ViewState("TotalCompraOC"), Decimal) End Get Set(value As Decimal) ViewState("TotalCompraOC") = value End Set End Property Private Property TipoCambio As Double Get Return ViewState("TipoCambio").ToString.ToDouble End Get Set(value As Double) ViewState("TipoCambio") = value End Set End Property Private Property DtBitacora As DataTable Get Return CType(ViewState("DtBitacora"), DataTable) End Get Set(value As DataTable) ViewState("DtBitacora") = 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 EntregaDirecta As Boolean Get Return CBool(ViewState("EntregaDirecta")) End Get Set(value As Boolean) ViewState("EntregaDirecta") = value End Set End Property Private Property RecibidaCompleta As Boolean Get Return CBool(ViewState("RecibidaCompleta")) End Get Set(value As Boolean) ViewState("RecibidaCompleta") = value End Set End Property Private Property Apartado As Boolean Get Return CBool(ViewState("Apartado")) End Get Set(value As Boolean) ViewState("Apartado") = value End Set End Property Private Property BuscaEntregaDirecta As Integer Get Return CType(ViewState("BuscaEntregaDirecta"), Integer) End Get Set(value As Integer) ViewState("BuscaEntregaDirecta") = value End Set End Property Private Property CveAlmacenApartado As Integer Get Return CType(ViewState("CveAlmacenApartado"), Integer) End Get Set(value As Integer) ViewState("CveAlmacenApartado") = 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 CveCompraSurtir As Integer Get Return CType(ViewState("CveCompraSurtir"), Integer) End Get Set(value As Integer) ViewState("CveCompraSurtir") = value End Set End Property Private Property CvePrePolizaCompra As Integer Get Return CType(ViewState("CvePrePolizaCompra"), Integer) End Get Set(value As Integer) ViewState("CvePrePolizaCompra") = value End Set End Property Private Property CveOCSurtir As Integer Get Return CType(ViewState("CveOCSurtir"), Integer) End Get Set(value As Integer) ViewState("CveOCSurtir") = value End Set End Property Private Property CveImportacionSurtir As Integer Get Return CType(ViewState("CveImportacionSurtir"), Integer) End Get Set(value As Integer) ViewState("CveImportacionSurtir") = value End Set End Property Private Property CveImportacionCompra As Integer Get Return CType(ViewState("CveImportacionCompra"), Integer) End Get Set(value As Integer) ViewState("CveImportacionCompra") = value End Set End Property Private Property CveImportacionProveedor As Integer Get Return CType(ViewState("CveImportacionProveedor"), Integer) End Get Set(value As Integer) ViewState("CveImportacionProveedor") = value End Set End Property Private Property CveFleteSurtir As Integer Get Return CType(ViewState("CveFleteSurtir"), Integer) End Get Set(value As Integer) ViewState("CveFleteSurtir") = value End Set End Property Private Property CveFleteOrdenCompra As Integer Get Return CType(ViewState("CveFleteOrdenCompra"), Integer) End Get Set(value As Integer) ViewState("CveFleteOrdenCompra") = value End Set End Property Private Property CveFleteCompra As Integer Get Return CType(ViewState("CveFleteCompra"), Integer) End Get Set(value As Integer) ViewState("CveFleteCompra") = 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 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 #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then InicializaValores() CargaUrlParametros() CargaPendientes() CargaPermisos() End If End Sub #Region " PERMISOS PAGINAS " Private Sub CargaPermisos() 'IMPORTES Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) GvInv.Columns(8).Visible = TienePermisoImportes GvInv.Columns(11).Visible = TienePermisoImportes 'SECCION ALMACEN GvInv.Columns(10).Visible = UsuarioActual.Empresa.Funcionalidad(147) = "1" 'SECCION ALMACEN EXISTENCIAS GvInv.Columns(11).Visible = UsuarioActual.Empresa.Funcionalidad(563).ToString = "1" End Sub #End Region #Region " INICIALIZA VALORES " Private Sub InicializaValores() CveCompraParametro = -1 CveCompraSurtir = -1 CvePrePolizaCompra = -1 CveOCSurtir = -1 CveImportacionSurtir = -1 CveImportacionProveedor = -1 CveImportacionCompra = -1 CveFleteSurtir = -1 CveFleteOrdenCompra = -1 CveFleteCompra = -1 BuscaEntregaDirecta = -1 CveAlmacenApartado = -1 TipoMovimiento = 1 CantidadTotal = 0 IndexSeccionAlmacen = 0 CreaDtSeccionAlmacen() CargaDdlAlmacen() ddlAlmacenAdd.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen NOT IN (9)") ddlAlmacenAdd.DataBind() CargaAlmacenes(-1) ddlProveedor.setEsWebService(UsuarioActual.Empresa.Funcionalidad(105) = "1") If ddlProveedor.UsaWebService Then ddlProveedor.Attributes.Add("data-metodo", "getproveedores") Else ddlProveedor.DataSource = GlobalDTCompProveedores(UsuarioActual.CveEmpresa) ddlProveedor.DataBind() ddlProveedor.ddl.Items.Insert(0, New ListItem("Seleccione el Proveedor", "-1")) ddlProveedor.SelectedValue = "-1" End If DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlFolioOC.Items.Insert(0, New ListItem("Seleccione", "-1")) ConfiguraTipoRecepcion() If UsuarioActual.CveEmpresa = 119 Then DivRemision.Visible = True End If TxtFechaCaducidad.Text = Now.ToShortDateString TxtFechaPendientes.Text = Now.ToShortDateString TipoCambio = -1 CreaDtDetalle() ImgClose.Attributes.Add("onclick", "$('#DivAlmacen').hide();") ImgAdd.Attributes.Add("onclick", "$('#DivAlmacen').hide();") BtnGuardar.Visible = False TxtFecha.Text = Now.ToShortDateString RVFecha.MaximumValue = MaxFecha.ToShortDateString If UsuarioActual.CveEmpresa.Contiene(119) Then RVFecha.MinimumValue = Now.ToShortDateString : CEFecha.StartDate = Now Else RVFecha.MinimumValue = MinFecha.ToShortDateString InicializaBitacoraTemporal() DdlMonedaTC.Enabled = False End Sub ''' ''' Recarga los almacenes [DdlAlmacen] que se pueden usar para el movimiento ''' ''' ''' Parametro sin espacios y separado por comas ["1,2,3,21"] Private Sub CargaAlmacenes(CveSubProyecto As Integer, Optional CveTiposAlmacen As String = "") Dim StrAlmacenes As String = "" If UsuarioActual.CveSubProyecto = 8804 Then 'AGS StrAlmacenes = $"CveTipoAlmacen IN ({If(CveTiposAlmacen.Length > 0, CveTiposAlmacen, "1,2,12,15")}) {If(CveSubProyecto > 0, $"And CveSubProyecto = {CveSubProyecto}", "")}" Else StrAlmacenes = $"CveTipoAlmacen IN ({If(CveTiposAlmacen.Length > 0, CveTiposAlmacen, "1,2,15,6")}) {If(CveSubProyecto > 0, $"And CveSubProyecto = {CveSubProyecto}", "")}" End If DdlAlmacen.Items.Clear() DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros(StrAlmacenes) 'GlobalDTAlmacen(UsuarioActual.CveEmpresa) DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacen.SelectedValue = "-1" DdlAlmacen.DataBind() DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen) UpGenerales.Update() End Sub Private Sub ConfiguraTipoRecepcion() DdlTipo.Items.Insert(0, New ListItem("Compra", "1")) If UsuarioActual.Empresa.Funcionalidad(131).ToEntero > 0 Then DdlTipo.Items.Insert(1, New ListItem("OC", "2")) If UsuarioActual.Empresa.Funcionalidad(153).ToEntero > 0 Then DdlTipo.Items.RemoveAt(0) DdlTipo.SelectedValue = "2" ModalidadRecepcion() End If End If If UsuarioActual.Empresa.Funcionalidad(155).ToEntero > 0 Then DdlTipo.Items.Insert(DdlTipo.Items.Count - 1, New ListItem("Importación", "3")) End If If UsuarioActual.Empresa.Funcionalidad(158).ToEntero > 0 Then DdlTipo.Items.Insert(DdlTipo.Items.Count - 1, New ListItem("Costo Indirecto", "4")) End If UpFiltros.Update() End Sub #End Region #Region " CARGA URL PARAMETROS " Private Sub CargaUrlParametros() CveCompraParametro = IfNull(Request("CveCompra"), "-1").ToString.ToEntero BuscaEntregaDirecta = IfNull(Request("ED"), "-1").ToString.ToEntero If CveCompraParametro > 0 Then Dim ObjCompras As New ClsCompras If ObjCompras.GetCompras(CveCompraParametro, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then If ObjCompras.DtResultados.Rows.Count >= 1 Then ddlProveedor.SelectedValue = ObjCompras.DtResultados.Rows(0)("CveProveedor").ToString ddlProveedor.SelectedText = ObjCompras.DtResultados.Rows(0)("RazonSocial").ToString ddlProveedor_SelectedIndexChanged(ddlProveedor, EventArgs.Empty) If (DdlFolio.Items.FindByValue(CveCompraParametro.ToString) Is Nothing) Then DdlFolio.Items.Insert(1, New ListItem(ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString, CveCompraParametro.ToString)) ' lo genera Obj.SelectedValue = Valor.ToString End If DdlFolio.SelectedValueExist(CveCompraParametro.ToString) btnBuscar_Click(BtnBuscar, EventArgs.Empty) Else Alert("La Compra solicitada no se pudo encontrar. Por favor vuelva a intentar.", TipoMensaje.MsgAdvertencia) End If Else Alert("Ocurrió un error al cargar los datos de la Compra. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If ObjCompras.Dispose() End If End Sub #End Region #Region " MODALIDAD RECEPCION " Protected Sub DdlTipo_SelectedIndexChanged(sender As Object, e As EventArgs) ModalidadRecepcion() End Sub Private Sub ModalidadRecepcion() LblCompra.Visible = False DivCompra.Visible = False LblOC.Visible = False DivOC.Visible = False LblImportacion.Visible = False DivImportacion.Visible = False LblFletes.Visible = False DivFletes.Visible = False LblFactura.Visible = False DivDdlFactura.Visible = False Select Case DdlTipo.SelectedValue.ToEntero Case 1 LblCompra.Visible = True DivCompra.Visible = True Case 2 LblOC.Visible = True DivOC.Visible = True Case 3 LblImportacion.Visible = True DivImportacion.Visible = True LblFactura.Visible = True DivDdlFactura.Visible = True Case 4 LblFletes.Visible = True DivFletes.Visible = True End Select CargaFoliosRecepcion() End Sub #End Region #Region " CARGA FOLIOS RECEPCION " Protected Sub ddlProveedor_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlProveedor.selectedindexchange CargaFoliosRecepcion() 'DdlTipo_SelectedIndexChanged(DdlTipo, EventArgs.Empty) End Sub Private Sub CargaFoliosRecepcion() Select Case DdlTipo.SelectedValue.ToEntero Case 1 CargaFolios() Case 2 CargaFoliosOC() Case 3 CargaFoliosImportacion() Case 4 CargaFletes() End Select UpFiltros.Update() End Sub Private Sub CargaFolios() DdlFolio.Items.Clear() Dim ObjInventarios As New ClsInventarios If ddlProveedor.SelectedValue.ToEntero > 0 Then If ObjInventarios.ComprasPendientesAlmacenGet(ddlProveedor.SelectedValue.ToEntero, MinFecha.ToShortDateString.ToDate, UsuarioActual.CveEmpresa) Then Dim FiltroTemporal = If(UsuarioActual.CveEmpresa = 119, "AND TipoDocto IN ('Fac','NC')", "AND TipoDocto IN ('Fac')") DdlFolio.DataSource = ObjInventarios.DtResultados.FiltraParametros($"CantOC >= 0 {FiltroTemporal}") 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")) End Sub Private Sub CargaFoliosImportacion() DdlFolioImportacion.Items.Clear() Dim ObjInventarios As New ClsInventarios If ddlProveedor.SelectedValue.ToEntero > 0 Then If ObjInventarios.PendientesAlmacenImportacionGet(ddlProveedor.SelectedValue.ToEntero, MinFecha.ToShortDateString.ToDate, UsuarioActual.CveEmpresa) Then DdlFolioImportacion.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() DdlFolioImportacion.DataBind() DdlFolioImportacion.Items.Insert(0, New ListItem("Seleccione", "-1")) CargaFactura() End Sub Protected Sub DdlFolioImportacion_SelectedIndexChanged(sender As Object, e As EventArgs) CargaFactura() End Sub Private Sub CargaFactura() DdlFactura.Items.Clear() Dim ObjInventarios As New ClsInventarios If DdlFolioImportacion.SelectedValue.ToEntero > 0 Then If ObjInventarios.PendientesAlmacenImportacionComprasGet(DdlFolioImportacion.SelectedValue.ToEntero, ddlProveedor.SelectedValue.ToEntero) Then DdlFactura.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() DdlFactura.DataBind() DdlFactura.Items.Insert(0, New ListItem("Todos", "-1")) End Sub Private Sub CargaFletes() DdlFletes.Items.Clear() Dim ObjInventarios As New ClsInventarios If ddlProveedor.SelectedValue.ToEntero > 0 Then If ObjInventarios.GetFletes(UsuarioActual.CveEmpresa, CveProveedor:=ddlProveedor.SelectedValue.ToEntero) Then DdlFletes.DataSource = ObjInventarios.DtResultados.FiltraParametros("CantRest > 0") Else Alert("Ocurrió un error al obtener las ordenes de compra pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError) End If End If ObjInventarios.Dispose() DdlFletes.DataBind() DdlFletes.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub #End Region #Region " CARGA POR SURTIR - GV " 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.ComprasPendientesAlmacenGet(-1, TxtFechaPendientes.Text.ToDate, UsuarioActual.CveEmpresa) Then Dim FiltroTemporal = If(UsuarioActual.CveEmpresa.Contiene(119, 140), "AND TipoDocto IN ('Fac','NC','DEV')", "AND TipoDocto IN ('Fac')") DtPendientes = ObjInventarios.DtResultados.FiltraParametros($"CantOC >= 0 {FiltroTemporal}") 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 'If UsuarioActual.Empresa.Funcionalidad(539) = "1" Then ' BtnGuardar.Enabled = False ' Dim FI As Date = Now.AddDays(-1) ' Dim FF As Date = Now.AddDays(-7) ' If ObjInventarios.RepNotasSinAlmacen(2, -1, FI, FF, "-1", -1, UsuarioActual.Empresa.CveEmpresa) Then ' If ObjInventarios.DtResultados IsNot Nothing AndAlso ObjInventarios.DtResultados.Rows.Count > 1 Then ' BtnGuardar.Enabled = False ' Alert("No se podrá realizar recepción de mercancía si no se les da entrada a los documentos pendientes. Para más información ver el Reporte de notas sin entrada en la sección Compras.", TipoMensaje.MsgAdvertencia) ' Else ' BtnGuardar.Enabled = True ' End If ' End If '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("CveCompra") If e.Row.DBCampo("TipoDocto").ToString.Contiene({"Fac"}) And e.Row.DBCampo("EstatusAlmacen").ToString.ToEntero = 0 Then e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary" e.Row.FCLinkButton("BtnSurtir").Text = " Recibir" Else e.Row.FCLinkButton("BtnSurtir").CssClass = "btn yellow-gold" e.Row.FCLinkButton("BtnSurtir").Text = " Devolver " End If If UsuarioActual.TienePermisoProceso(201) Then Dim Css = "Texto" Dim Liga = $"/Compras/Compras.aspx?&CveCompra={e.Row.DataKey("CveCompra")}" e.Row.FCLabel("LblSerieFolio").Text = "" + e.Row.FCLabel("LblSerieFolio").Text + "" End If End If End Sub #End Region #Region " CARGA POR SURTIR " Protected Sub btnBuscar_Click(sender As Object, e As EventArgs) Handles BtnBuscar.Click 'REINICIA VALORES DdlMonedaTC.SelectedValueExist("1") TipoCambio = -1 DivBitacora.Visible = False DtBitacora.Clear() GvInv.Columns(2).Visible = False GvInv.Columns(3).Visible = False CveCompraSurtir = -1 CvePrePolizaCompra = -1 CveOCSurtir = -1 CveImportacionSurtir = -1 CveImportacionProveedor = -1 CveImportacionCompra = -1 CveFleteSurtir = -1 CveFleteOrdenCompra = -1 CveFleteCompra = -1 DivAdvertencia.Visible = False EntregaDirecta = False DivTipoCambio.Visible = False Apartado = False CveAlmacenApartado = -1 BtnGuardar.Enabled = True CargaAlmacenes(-1) DtInv = Nothing TxtObservaciones.Text = "" TxtOC.Text = "" TxtFecha.Text = Now.ToShortDateString DdlAlmacen.SelectedValueExist(-1) TxtRemision.Text = "" UpTipoCambio.Update() UPInv.Update() UpGenerales.Update() UpFiltros.Update() UpDatosCompra.Update() If TxtOC.Text <> "" Then LtDocumento.Text = "ORDEN DE COMPRA" CargaOC() ElseIf DdlFolioOC.SelectedValue.ToEntero > 0 Then LtDocumento.Text = "ORDEN DE COMPRA" CargaOCPorSurtir(DdlFolioOC.SelectedValue.ToEntero) ElseIf DdlFolio.SelectedValue.ToEntero > 0 Then LtDocumento.Text = "COMPRA" CargaCompra(DdlFolio.SelectedValue.ToEntero, ddlProveedor.SelectedValue.ToEntero) ElseIf DdlFolioImportacion.SelectedValue.ToEntero > 0 Then LtDocumento.Text = "IMPORTACIÓN" CargaImportacionSurtir(DdlFolioImportacion.SelectedValue.ToEntero) ElseIf DdlFletes.SelectedValue.ToEntero > 0 Then LtDocumento.Text = "FLETE" CargaFleteSurtir(DdlFletes.SelectedValue.ToEntero) Else Alert("Debe seleccionar algun criterio de busqueda (Compra, OC, Importación). Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) BtnGuardar.Visible = False End If CargaGVInv() DtSeccionAlmacen.Rows.Clear() DtSeccionAlmacen.AcceptChanges() End Sub Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs) If CType(sender, LinkButton).CommandArgument.ToEntero > 0 Then CargaCompra(CType(sender, LinkButton).CommandArgument.ToEntero, -1) TimmerRefresh.Enabled = False End If End Sub Private Sub CargaCompra(pCveCompra As Integer, pCveProveedor As Integer) Dim ObjCompras As New ClsCompras Dim ObjInventario As New ClsInventarios If ObjCompras.GetCompras(pCveCompra, "-1", "-1", pCveProveedor, -1, UsuarioActual.CveEmpresa) Then If ObjCompras.DtResultados.Rows.Count > 0 Then CveCompraSurtir = pCveCompra CvePrePolizaCompra = ObjCompras.DtResultados.Rows(0)("CvePrePoliza").ToString.ToEntero LbProveedor.Text = ObjCompras.DtResultados.Rows(0)("RazonSocial").ToString HLFolio.Text = ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString If UsuarioActual.TienePermisoProceso(201) Then HLFolio.NavigateUrl = $"/Compras/Compras.aspx?CveCompra={CveCompraSurtir}" End If LbDescripcionCompra.Text = ObjCompras.DtResultados.Rows(0)("Descripcion").ToString UpDatosCompra.Update() CveMoneda = ObjCompras.DtResultados.Rows(0)("CveMoneda").ToString.ToEntero lbDescripcion.Text = ObjCompras.DtResultados.Rows(0)("Descripcion").ToString HdnTipoDocto.Value = ObjCompras.DtResultados.Rows(0)("TipoDocto").ToString TipoCambio = ObjCompras.DtResultados.Rows(0)("TipoCambio").ToString.ToDecimal TipoMovimiento = If(ObjCompras.DtResultados.Rows(0)("EstatusAlmacen").ToString.ToEntero = 1, 2, 1) TipoMovimiento = If(ObjCompras.DtResultados.Rows(0)("TipoDocto").ToString.Contiene("NC", "DEV"), 3, TipoMovimiento) TotalCompraOC = ObjCompras.DtResultados.Rows(0)("SubTotal").ToString.ToDecimal CveTipoCompra = ObjCompras.DtResultados.Rows(0)("CveTipoCompra").ToString.ToEntero If TipoMovimiento = 3 Then CargaAlmacenes(-1, "21,2") End If RecibidaCompleta = False If ObjInventario.RecepcionAlmacenGet(pCveCompra, BuscaEntregaDirecta, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then DtDatosDetalle = Nothing CreaDtDetalle() DtDatosLoteDetalle = Nothing CreaDtLoteDetalle() CreaDTInv(ObjInventario.DtResultados) BtnGuardar.Visible = True 'cuando están todos los detalles de la compra, nos indica que se va a recibir la totalidad de la compra If ObjInventario.DtResultados.Rows.Count = ObjInventario.DtResultados.Rows(0)("NumDetalles").ToString.ToEntero Then RecibidaCompleta = True End If ''MONEDA DIFERENTE If CveMoneda <> 1 Then 'DivTipoCambio.Visible = True DdlMonedaTC.SelectedValueExist("2") DdlMonedaTC_SelectedIndexChanged(DdlMonedaTC, EventArgs.Empty) 'TxtTipoCambio.Text = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate).ToString, TipoCambio.ToString) TipoCambio = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate), TipoCambio) LtAdvertencia.Text = "El cambio de moneda se aplicara al guardar el movimiento con el tipo de cambio indicado." DivAdvertencia.Visible = True End If UpTipoCambio.Update() ''ENTREGA DIRECTA If BuscaEntregaDirecta > 0 Then If UsuarioActual.Empresa.Funcionalidad(149) = "1" Then LtAdvertencia.Text = "La mercancía tendra salida inmediata por ser entrega directa al cliente" DivAdvertencia.Visible = True EntregaDirecta = True CveCliente = ObjInventario.DtResultados.Rows(0)("CveCliente").ToString.ToEntero CveVendedor = ObjInventario.DtResultados.Rows(0)("CveVendedor").ToString.ToEntero If DtInv.COUNT("EntregaDirecta") <> DtInv.Rows.Count Then Alert("Todos los conceptos deben estar facturados.", TipoMensaje.MsgAdvertencia) BtnGuardar.Enabled = False End If End If End If If DtInv.Rows.Count = 0 Then Alert("No hay productos pendientes de surtir de esta compra. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Else If ObjInventario.DtResultados.Rows(0)("CveVendedor").ToString.ToEntero > 0 And ObjInventario.DtResultados.Rows(0)("CveCliente").ToString.ToEntero > 0 Then If DtInv.SUM("EntregaDirecta") > 0 Then ''ENTREGA DIRECTA 'LtAdvertencia.Text = "La mercancía tendra salida inmediata por ser entrega directa al cliente" 'DivAdvertencia.Visible = True 'EntregaDirecta = True Else 'APARTADO 'If UsuarioActual.CveUsuario.Contiene(100) Or (ObjInventario.DtResultados.Rows(0)("CveUsuarioOC").ToString.ToEntero = 1559 And ObjInventario.DtResultados.Rows(0)("FechaIngOC").ToString.ToDateTime > "2017-04-24 12:00".ToDateTime) Then If UsuarioActual.Empresa.Funcionalidad(148) = "1" Then CveAlmacenApartado = ObjInventario.DtResultados.Rows(0)("CveAlmacenApartado").ToString.ToEntero DivAdvertencia.Visible = True Apartado = True If CveAlmacenApartado <= 0 Then BtnGuardar.Enabled = False LtAdvertencia.Text = "No se puede recibir la mercancía por ser de apartados y no contar con un almacen de apartado." Else LtAdvertencia.Text = "La mercancía sera traspasada ha apartados" CargaAlmacenes(ObjInventario.DtResultados.Rows(0)("CveSubProyecto").ToString.ToEntero) End If End If 'End If End If End If End If Dim CantidadFaltante As Double = ObjInventario.DtResultados.SUM("CantidadC", "CantidadF > 0") If UsuarioActual.Empresa.UsaAC AndAlso CantidadFaltante > 0 Then PnlAC.Visible = True CargaAC() LbTotalPorDevengar.Text = ObjInventario.DtResultados.SUM("Total", "CantidadF > 0").FormatoNumero End If 'Existencias If TipoMovimiento = 2 Then If ObjInventario.ComprasDevolucionExistenciasGet(CveCompraSurtir) Then DtExistencias = ObjInventario.DtResultados Else Alert("No se pudieron cargar las existencias del movimiento de entrada, por lo cual no se podra hacer la devolución.", TipoMensaje.MsgError) BtnGuardar.Enabled = False End If End If End If DivBitacora.Visible = True If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then DivCodigoSeriePS.Visible = True Else DivCodigoSeriePS.Visible = False End If If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then DivVirtualAdvertencia.Visible = True End If End If Else BtnGuardar.Visible = False End If ObjCompras.Dispose() ObjInventario.Dispose() CargaGVInv() End Sub Private Sub CargaImportacionSurtir(pCveImportacion As Integer) Dim ObjCompras As New ClsCompras Dim ObjInventario As New ClsInventarios If ObjCompras.GetImportaciones(pCveImportacion, -1, -1, "-1", "-1", UsuarioActual.CveEmpresa) Then If ObjCompras.DtResultados.Rows.Count > 0 Then CveImportacionSurtir = pCveImportacion CveImportacionProveedor = ddlProveedor.SelectedValue.ToEntero CveImportacionCompra = DdlFactura.SelectedValue.ToEntero LbProveedor.Text = ObjCompras.DtResultados.Rows(0)("Aduanal").ToString HLFolio.Text = ObjCompras.DtResultados.Rows(0)("PedimentoDescripcion").ToString If UsuarioActual.TienePermisoProceso(201) Then HLFolio.NavigateUrl = $"/Compras/Importaciones.aspx?CveImportacion={CveImportacionSurtir}" End If UpDatosCompra.Update() CveMoneda = 1 lbDescripcion.Text = "" TipoMovimiento = 1 If ObjInventario.RecepcionAlmacenImportacionGet(CveImportacionSurtir, DdlFactura.SelectedValue.ToEntero, CveImportacionProveedor, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then DtDatosDetalle = Nothing CreaDtDetalle() DtDatosLoteDetalle = Nothing CreaDtLoteDetalle() CreaDTInv(ObjInventario.DtResultados) BtnGuardar.Visible = True End If If DtInv Is Nothing OrElse DtInv.Rows.Count = 0 Then Alert("No hay productos pendientes de surtir de esta importación. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) End If DivBitacora.Visible = True If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then DivCodigoSeriePS.Visible = True Else DivCodigoSeriePS.Visible = False End If End If Else BtnGuardar.Visible = False End If ObjCompras.Dispose() ObjInventario.Dispose() CargaGVInv() End Sub Private Sub CargaFleteSurtir(pCveImportacion As Integer) Dim ObjInventario As New ClsInventarios If ObjInventario.GetFletes(UsuarioActual.CveEmpresa, CveFlete:=pCveImportacion) Then If ObjInventario.DtResultados.Rows.Count > 0 Then CveFleteSurtir = pCveImportacion CveFleteOrdenCompra = ObjInventario.DtResultados.Rows(0)("CveOC").ToString.ToEntero CveFleteCompra = ObjInventario.DtResultados.Rows(0)("CveCompra").ToString.ToEntero LbProveedor.Text = ObjInventario.DtResultados.Rows(0)("RazonSocial").ToString HLFolio.Text = ObjInventario.DtResultados.Rows(0)("Folio").ToString If UsuarioActual.TienePermisoProceso(201) Then HLFolio.NavigateUrl = $"/Inventarios/Fletes.aspx?CveFlete={CveFleteSurtir}" End If UpDatosCompra.Update() CveMoneda = 1 lbDescripcion.Text = "" TipoMovimiento = 1 If ObjInventario.RecepcionAlmacenFleteGet(CveFleteSurtir, CveFleteOrdenCompra, CveFleteCompra, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then DtDatosDetalle = Nothing CreaDtDetalle() DtDatosLoteDetalle = Nothing CreaDtLoteDetalle() CreaDTInv(ObjInventario.DtResultados) BtnGuardar.Visible = True End If If DtInv Is Nothing OrElse DtInv.Rows.Count = 0 Then Alert("No hay productos pendientes de surtir de esta importación. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) End If DivBitacora.Visible = True If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then DivCodigoSeriePS.Visible = True Else DivCodigoSeriePS.Visible = False End If End If Else BtnGuardar.Visible = False End If ObjInventario.Dispose() CargaGVInv() End Sub #End Region #Region " GVINV " Private Sub CreaDTInv(TmDT As DataTable) TmDT.Columns.Add("CveAlmacen", GetType(Integer)) TmDT.Columns.Add("PUExtranjero", GetType(Double)) TmDT.Columns.Add("CostoIndirectoExtranjero", GetType(Double)) TmDT.Columns.Add("Consec", GetType(Integer)) TmDT.Columns.Add("CantidadSurtidaPantalla", GetType(Double)) If Not TmDT.Columns.Contains("CostoIndirecto") Then TmDT.Columns.Add("CostoIndirecto", GetType(Double)) End If GvInv.Columns(2).Visible = False GvInv.Columns(3).Visible = False GvInv.Columns(9).Visible = TmDT.SUM("CostoIndirecto") > 0 Dim VariableCampo = If(TipoMovimiento.Contiene(1, 3), "CantidadF", "CantidadS") Dim Index = 1 For Each Dr As DataRow In TmDT.Rows Dr("PUExtranjero") = Dr("PU") Dr("CostoIndirectoExtranjero") = Dr("CostoIndirecto") Dr("Consec") = Index Index += 1 Dr("CantidadF") = Dr(VariableCampo) If Dr(VariableCampo).ToString.ToDecimal <> Dr("CantidadC").ToString.ToDecimal Then GvInv.Columns(3).Visible = True End If Next DtInv = TmDT '.FiltraParametros("CantidadF > 0") dt = TmDT If DtInv.SUM("CantidadS") > 0 Then GvInv.Columns(2).Visible = True End If End Sub Private Sub CargaGVInv() If UsuarioActual.CveEmpresa = 119 Then DtInv = DtInv.FiltraParametros("", "PS") End If GvInv.DataSource = DtInv GvInv.DataBind() UPInv.Update() End Sub Protected Sub GVINV_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvInv.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveMetodoInventario").ToString.Contiene("5", "6") Then If e.Row.DBCampo("CveMetodoInventario").ToString = "5" Then e.Row.FCButton("BtnSerieLote").Visible = True e.Row.FCButton("BtnSerieLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PU"), 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.DataKey("Consec"))).Rows.Count e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString ElseIf e.Row.DBCampo("CveMetodoInventario").ToString = "6" Then e.Row.FCButton("BtnLote").Visible = True e.Row.FCButton("BtnLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PU"), 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 = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DataKey("Consec"))).Rows.Count e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString End If Else e.Row.FCButton("BtnSerieLote").Visible = False e.Row.FCButton("BtnLote").Visible = False e.Row.FCTextBox("TbCantidadF").Enabled = True e.Row.FCTextBox("TbCantidadF").Attributes.Add("onblur", String.Format("ValidarCantidad(this,{0})", e.Row.DBCampo("CantidadF"))) e.Row.FCCheckBox("cbInv").Attributes.Add("onclick", String.Format("Check(this, {0}, {1});", e.Row.FCTextBox("TbCantidadF").ClientID, e.Row.DBCampo("CantidadF"))) If e.Row.DBCampo("EntregaDirecta").ToString = "1" And TipoMovimiento = 1 Then e.Row.FCCheckBox("cbInv").Checked = True e.Row.FCCheckBox("cbInv").Enabled = False e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero e.Row.FCTextBox("TbCantidadF").Enabled = False End If End If 'FUNCIONALIDAD PISTOLA DE CODIGOS If UsuarioActual.Empresa.Funcionalidad(132) = "1" And e.Row.DBCampo("CodigoBarras").Trim <> "" And Not UsuarioActual.TienePermisoProceso(174) Then e.Row.FCTextBox("TbCantidadF").Enabled = False End If If e.Row.DBCampo("CantidadF").ToDecimal = 0 Then e.Row.FCTextBox("TbCantidadF").Visible = False e.Row.Cells(3).Text = "0" e.Row.FCCheckBox("cbInv").Visible = False End If 'TotalGV += e.Row.DBCampo("PU").ToString.ToDecimal * e.Row.DBCampo("CantidadF").ToString.ToDecimal If UsuarioActual.Empresa.Funcionalidad(147) = "1" Then e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa) e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) End If e.Row.FCLabel("LbTotal").Text = ((e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal).FormatoNumero TotalGV += (e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal End If If e.Row.RowType = DataControlRowType.Footer Then Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) e.Row.FCLabel("LbTotal").Visible = TienePermisoImportes If TienePermisoImportes Then e.Row.FCLabel("LbTotal").Text = TotalGV.FormatoNumero TotalGV = 0.0D e.Row.Font.Bold = True e.Row.Cells(6).Text = "Total" e.Row.Cells(6).HorizontalAlign = HorizontalAlign.Right End If End If End Sub #End Region #Region " AGREGAR " #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 For Each Gvr As GridViewRow In GvInv.Rows If Gvr.DataKey("CodigoBarras") = TxtCodigoPS.Text.Trim Then Dim TxtCantidad = GvInv.Rows(Gvr.RowIndex).FCTextBox("TbCantidadF") If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then If Gvr.DataKey("AplicaSerieLote") = "True" Then TdSeriePS.Visible = True TxtSeriePS.Focus() CveConsecSerieLote = Gvr.DataKey("Consec").ToEntero CvePSSerieLote = Gvr.DataKey("CvePS").ToEntero CveUMSerieLote = Gvr.DataKey("CveUM").ToEntero Exit Sub End If Dim CantidadEspecial = Gvr.DataKey("CveClasificacion").ToString.ToEntero.Contiene(17601, 17881) OrElse Gvr.DataKey("CvePS").ToString.ToEntero.Contiene(343032, 343033) 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 'VERIFICA EXISTENCIAS Dim MensajeSinExistencias As New StringBuilder If TipoMovimiento > 1 Then Dim ExistenciaActual = DtInv.SUM("CantidadSurtidaPantalla", $"CvePS = {Gvr.DataKey("CvePS").ToEntero} AND CveUM = {Gvr.DataKey("CveUM").ToEntero} ") + 1 Dim ObjInventarios As New ClsInventarios Dim Existencia = ObjInventarios.GetExistenciasPS(Gvr.DataKey("CvePS").ToEntero, Gvr.DataKey("CveUM").ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm")) ObjInventarios.Dispose() If Existencia < ExistenciaActual Then Alert($"El producto con el codigo de barras {TxtCodigoPS.Text} no tiene la existencia suficiente.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'EXISTENCIAS DE LA COMPRAR - PARA DEVOLUCION If TipoMovimiento = 2 Then If DtExistencias.SUM("Existencia", $"CvePS = {Gvr.DataKey("CvePS").ToEntero} AND CveUM = {Gvr.DataKey("CveUM").ToEntero}") < ExistenciaActual Then Alert($"El producto con el codigo de barras {TxtCodigoPS.Text} no tiene la existencia suficiente de recepción.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + 1).ToString.FormatoNumero TxtCodigoPS.Text = "" RegistraScript("playsonidito('beep-07.wav')") UPInv.Update() Dim Dr = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0) Dr("CantidadSurtidaPantalla") = TxtCantidad.Text.ToDouble DtInv.AcceptChanges() Exit Sub End If End If Alert($"Ya se ha cargado la totalidad del Producto ""{Gvr.DataKey("PS").ToString}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If Next Alert($"No se ha encontrado un producto para surtir con el Codigo ""{TxtCodigoPS.Text}"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);") RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") TxtCodigoPS.Text = "" 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() End Sub Protected Sub BtnGuardarCantidadEspecial_Click(sender As Object, e As EventArgs) AgregaCantidadEspecial() End Sub Private Sub AgregaCantidadEspecial() Dim TxtCantidad = GvInv.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);") UPInv.Update() TxtCodigoPS.Focus() RegistraScript("playsonidito('beep-07.wav')") 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 " AGREGA POR SERIE/LOTE " Protected Sub BtnSerieLote_Click(sender As Object, e As EventArgs) Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c) LbProducto.Text = Argumentos(3) LbCantidad.Text = Argumentos(4).FormatoNumero TxtFechaCaducidad.Text = Now.ToShortDateString() CvePSSerieLote = Argumentos(0).ToEntero CveUMSerieLote = Argumentos(1).ToEntero PUSerieLote = Argumentos(2).ToDecimal CveConsecSerieLote = Argumentos(5).ToEntero CargaSerie(1) End Sub Private Sub CreaDtDetalle() If DtDatosDetalle Is Nothing Then DtDatosDetalle = New DataTable DtDatosDetalle.Columns.Add("Consec", GetType(Integer)) DtDatosDetalle.Columns.Add("ConsecId", GetType(Integer)) DtDatosDetalle.Columns.Add("CvePS", GetType(Integer)) DtDatosDetalle.Columns.Add("CveUM", GetType(Integer)) DtDatosDetalle.Columns.Add("PU", GetType(Decimal)) DtDatosDetalle.Columns.Add("Serie", GetType(String)) DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(String)) End If End Sub Private Sub CargaSerie(Tipo As Integer, Optional CerrarCompletado As Boolean = False) 'RegistraScript("document.getElementById(""TxtSerieLote"").focus();") RegistraScript("$('#DivSerie').modal();", "ModalLote") Dim AplicaCaducidad = False If GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0) IsNot Nothing Then AplicaCaducidad = If(GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0)("AplicaCaducidad").ToString = "True", True, False) End If 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 Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote)).Rows.Count < LbCantidad.Text.ToEntero Then BtnAgregarPS.Enabled = False If CerrarCompletado Then RegistraScript("$('#DivSerie').modal('hide');") End If Else BtnAgregarPS.Enabled = True End If 'SI TIENE ENTRADA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD Dim Contador = 0 For Each Gvr As GridViewRow In GvInv.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.FCTextBox("TbCantidadF").Enabled = False If DtDatosDetalle IsNot Nothing AndAlso Contador > 0 Then Gvr.FCCheckBox("cbInv").Checked = True Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString ElseIf Gvr.DataKey("CantidadF").ToString.ToDecimal <> 0 Then Gvr.FCCheckBox("cbInv").Checked = False Gvr.FCTextBox("TbCantidadF").Text = "0" End If End If Dim Dr = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0) Dr("CantidadSurtidaPantalla") = Gvr.FCTextBox("TbCantidadF").Text.ToDouble DtInv.AcceptChanges() Next UPInv.Update() UpSerie.Update() TxtSerieLote.Text = "" TxtSerieLote.Focus() If Tipo = 1 Then RegistraScript(String.Format("$('#{0}').on('shown.bs.modal', function () {{$('#{0}').focus(); $('#{0}').trigger(jQuery.Event('keypress', {{which: 13}})); }});$('#DivSerie').modal('show'); ", TxtSerieLote.ClientID)) End If End Sub Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs) AgregaSerieLote(TxtSerieLote.Text.Replace(" ", String.Empty), 1) End Sub Private Sub AgregaSerieLote(SerieLote As String, Tipo As Integer) 'SerieLote = SerieLote.Trim.Replace(" ", " ") If SerieLote.Trim = "" Then Alert("El campo Serie es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim SeriesArreglo = SerieLote.Trim.Split(";"c) 'VALIDACION DE SERIES DUPLICADAS Dim MensajeAlert As New StringBuilder Dim DtDuplicado As New DataTable Dim DtSeriesNuevas As New DataTable DtSeriesNuevas.Columns.Add("Serie", GetType(String)) 'PARA VALIDAR SI LA SERIE ES IGUAL AL CODIGO O CODIGOBARRAS Dim dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltroPrimero("", "PS") For Each Serie In SeriesArreglo DtDuplicado = DtDatosDetalle.FiltraParametros($"ConsecId = {CveConsecSerieLote} AND Serie = '{Serie}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
El numero de Serie ""{Serie}"" proporcionado ya se encuentra ingresado.") Continue For End If DtDuplicado = DtSeriesNuevas.FiltraParametros($"Serie = '{Serie}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
El numero de Serie ""{Serie}"" proporcionado se encuentra duplicado.") Continue For End If 'PARA VALIDAR SI LA SERIE ES IGUAL AL CODIGO O CODIGOBARRAS If Serie.ToUpper = dr("Codigo").ToString.ToUpper Or Serie.ToUpper = dr("CodigoBarras").ToString.ToUpper Then MensajeAlert.Append($"
El numero de Serie {Serie} coincide con el codigo o codigo de barras del producto. Por favor rectifique y vuelva a intentar.") Continue For End If Dim Row = DtSeriesNuevas.NewRow Row("Serie") = Serie DtSeriesNuevas.Rows.Add(Row) Next If MensajeAlert.ToString <> "" Then Alert(MensajeAlert.ToString, TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If Dim MensajeSinExistencias As New StringBuilder Dim ObjInventarios As New ClsInventarios Dim Index = 0 For Each Serie In SeriesArreglo Dim Row = DtDatosDetalle.NewRow Index = Index + 1 If Index > LbCantidad.Text.ToEntero Then Exit For End If 'VALIDA QUE SIGA AGREGANDO If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote)).Rows.Count < LbCantidad.Text.ToEntero Then Exit For End If 'VERIFICA EXISTENCIAS If TipoMovimiento > 1 Then Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerieLote, CveUMSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Serie) If Existencia < 1 Then MensajeSinExistencias.Append($"Serie: {Serie}.
") Continue For End If If TipoMovimiento = 2 Then If DtExistencias.SUM("Existencia", $"SerieLote = {Serie}") = 0 Then MensajeSinExistencias.Append($"Serie: {Serie}.
") Continue For End If End If End If Dim AplicaCaducidad = False If GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0) IsNot Nothing Then AplicaCaducidad = If(GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0)("AplicaCaducidad").ToString = "True", True, False) End If Row("ConsecId") = CveConsecSerieLote Row("Consec") = DtDatosDetalle.Rows.Count + 1 Row("CvePS") = CvePSSerieLote Row("CveUM") = CveUMSerieLote Row("PU") = PUSerieLote Row("Serie") = Serie Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidad.Text, MinFecha.ToShortDateString) DtDatosDetalle.Rows.Add(Row) Next ObjInventarios.Dispose() If Tipo = 1 Then TxtSerieLote.Text = "" TxtFechaCaducidad.Text = Now.ToShortDateString End If CargaSerie(Tipo, True) If MensajeAlert.ToString <> "" Then RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Else If MensajeSinExistencias.ToString <> "" Then Alert($"Las siguientes Series no cuentan con la existencia suficiente por lo cual se omitieron.
{MensajeSinExistencias.ToString}", TipoMensaje.MsgAdvertencia) End If RegistraScript("playsonidito('beep-07.wav')") End If End Sub Protected Sub GvSerie_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSerie.RowDeleting Dim keySerieLote As String = e.Keys("Serie").ToString Try For Each dr As DataRow In DtDatosDetalle.Rows If dr("Serie").ToString = keySerieLote Then dr.Delete() End If Next Catch ex As Exception End Try DtDatosDetalle.AcceptChanges() CargaSerie(1) End Sub #End Region #Region " AGREGAR POR LOTE BATCH " Private Sub CreaDtLoteDetalle() If DtDatosLoteDetalle Is Nothing Then DtDatosLoteDetalle = New DataTable DtDatosLoteDetalle.Columns.Add("Consec", GetType(Integer)) DtDatosLoteDetalle.Columns.Add("ConsecId", GetType(Integer)) DtDatosLoteDetalle.Columns.Add("Cantidad", GetType(Double)) DtDatosLoteDetalle.Columns.Add("CvePS", GetType(Integer)) DtDatosLoteDetalle.Columns.Add("CveUM", GetType(Integer)) DtDatosLoteDetalle.Columns.Add("PU", GetType(Decimal)) DtDatosLoteDetalle.Columns.Add("Lote", GetType(String)) DtDatosLoteDetalle.Columns.Add("Batch", GetType(String)) DtDatosLoteDetalle.Columns.Add("FechaCaducidad", GetType(String)) End If End Sub Protected Sub BtnLote_Click(sender As Object, e As EventArgs) Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c) LbLoteProducto2.Text = Argumentos(3) LbLoteCantidad2.Text = Argumentos(4).FormatoNumero CvePSSerieLote = Argumentos(0).ToEntero CveUMSerieLote = Argumentos(1).ToEntero PUSerieLote = Argumentos(2).ToDecimal CveConsecSerieLote = Argumentos(5).ToEntero CargaLote(1) End Sub Private Sub CargaLote(Tipo As Integer, Optional CerrarCompletado As Boolean = False) RegistraScript("$('#DivLote').modal();", "ModalLote") GvLote.DataSource = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote), "Consec DESC") GvLote.DataBind() 'VALIDA QUE SIGA AGREGANDO If Not DtDatosLoteDetalle.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerieLote)) < LbLoteCantidad2.Text.ToDouble Then BtnAddPSLote.Enabled = False If CerrarCompletado Then RegistraScript("$('#DivLote').modal('hide');") End If Else BtnAddPSLote.Enabled = True End If 'SI TIENE ENTRADA POR LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD Dim Contador = 0.0 For Each Gvr As GridViewRow In GvInv.Rows If Gvr.DataKey("CvePS").ToEntero = CvePSSerieLote Then Contador = DtDatosLoteDetalle.SUM("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))) Gvr.FCCheckBox("cbInv").Enabled = False Gvr.FCTextBox("TbCantidadF").Enabled = False If DtDatosLoteDetalle IsNot Nothing AndAlso Contador > 0 Then Gvr.FCCheckBox("cbInv").Checked = True Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString ElseIf Gvr.DataKey("CantidadF").ToString.ToDecimal <> 0 Then Gvr.FCCheckBox("cbInv").Checked = False Gvr.FCTextBox("TbCantidadF").Text = "0" End If End If Dim Dr = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0) Dr("CantidadSurtidaPantalla") = Gvr.FCTextBox("TbCantidadF").Text.ToDouble DtInv.AcceptChanges() Next RVCantidadLote.MaximumValue = (If((LbLoteCantidad2.Text.ToDouble - Contador) = 0, 0.02, LbLoteCantidad2.Text.ToDouble - Contador)).ToString.FormatoNumero TxtCantidadLote.Text = "1" TxtLote.Text = "" TxtBatch.Text = "" TxtFechaCaducidadLote.Text = If(TxtFechaCaducidadLote.Text.Trim = "", Now.ToShortDateString(), TxtFechaCaducidadLote.Text) TxtLote.Focus() UPInv.Update() UpLote.Update() If Tipo = 1 Then RegistraScript(String.Format("$('#{0}').on('shown.bs.modal', function () {{$('#{0}').focus(); $('#{0}').trigger(jQuery.Event('keypress', {{which: 13}})); }});$('#DivLote').modal('show'); ", TxtLote.ClientID)) End If End Sub Protected Sub BtnAddPSLote_Click(sender As Object, e As EventArgs) AgregaLote(TxtLote.Text.Trim, TxtBatch.Text.Trim, 1) End Sub Private Sub AgregaLote(Lote As String, Batch As String, Tipo As Integer) If Lote.Trim = "" Then Alert("El campo Lote es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'VALIDACION DE SERIES DUPLICADAS Dim MensajeAlert As New StringBuilder Dim DtDuplicado As New DataTable Dim DtSeriesNuevas As New DataTable DtSeriesNuevas.Columns.Add("Serie", GetType(String)) DtDuplicado = DtDatosLoteDetalle.FiltraParametros($"ConsecId = {CveConsecSerieLote} AND Lote = '{Lote}' AND Batch = '{Batch}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then Alert($"
El numero de Lote ""{Lote}"" y Batch = '{Batch}' proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Exit Sub End If Dim Row = DtDatosLoteDetalle.NewRow Dim CantidadLote = TxtCantidadLote.Text.ToDouble Dim MensajeSinExistencias As New StringBuilder Dim ObjInventarios As New ClsInventarios 'VERIFICA EXISTENCIAS If TipoMovimiento > 1 Then Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerieLote, CveUMSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Lote, Batch:=Batch) If Existencia < CantidadLote Then Alert($"
El numero de Lote ""{Lote}"" y Batch = '{Batch}' proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If If TipoMovimiento = 2 Then If Not DtExistencias.SUM("Existencia", $"Lote = '{Lote}' Batch = '{Batch}'") = 0 Then Alert($"
El numero de Lote ""{Lote}"" y Batch '{Batch}' proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If End If End If Row("ConsecId") = CveConsecSerieLote Row("Consec") = DtDatosDetalle.Rows.Count + 1 Row("Cantidad") = CantidadLote Row("CvePS") = CvePSSerieLote Row("CveUM") = CveUMSerieLote Row("PU") = PUSerieLote Row("Lote") = Lote Row("Batch") = Batch Row("FechaCaducidad") = If(IsDate(TxtFechaCaducidadLote.Text), TxtFechaCaducidadLote.Text, MinFecha.ToShortDateString) 'Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidadLote.Text, MinFecha.ToShortDateString) DtDatosLoteDetalle.Rows.Add(Row) ObjInventarios.Dispose() If Tipo = 1 Then TxtLote.Text = "" TxtBatch.Text = "" TxtFechaCaducidad.Text = Now.ToShortDateString End If CargaLote(1, True) End Sub Protected Sub GvLote_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvLote.RowDeleting Dim keyLote As String = e.Keys("Lote").ToString Dim keyBatch As String = e.Keys("Batch").ToString Try For Each dr As DataRow In DtDatosLoteDetalle.Rows If dr("Lote").ToString = keyLote And dr("Batch").ToString = keyBatch Then dr.Delete() End If Next Catch ex As Exception End Try DtDatosLoteDetalle.AcceptChanges() CargaLote(1) End Sub #End Region #End Region #Region " GUARDAR " Private Function ValidaGuardar() As Boolean Dim TotalCantidad As Double = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.FCTextBox("TbCantidadF").Text.ToDouble) If TotalCantidad <= 0 Then Alert("No se seleccionó ninguna cantidad de productos a guardar. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Return False End If 'verifica si recibió al 100% la compra 'bandera que me indica que se cargaron todos los productos, yque se verifique si los detalle s se van a recibir al 100 ' que la cantidad orginal sea igual a la recibida. para considedrarse completa If RecibidaCompleta Then For Each Gvr As GridViewRow In GvInv.Rows If Not Gvr.FCCheckBox("cbInv").Checked Or Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadF").ToString.ToDecimal OrElse Gvr.DataKey("CantidadC").ToString.ToDecimal <> Gvr.DataKey("CantidadF").ToString.ToDecimal Then RecibidaCompleta = False End If Next End If If EntregaDirecta Then For Each Gvr As GridViewRow In GvInv.Rows If Not Gvr.FCCheckBox("cbInv").Checked Or Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadF").ToString.ToDecimal Then Alert("La compra se debe surtir completa por ser entrega directa. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Return False End If Next End If Dim TotalPorDevengar As Double = 0.0 If UsuarioActual.Empresa.UsaAC Then TotalPorDevengar += GvAC.Rows.Cast(Of GridViewRow)().Sum(Function(Gvr) Gvr.FCTextBox("TxtImporte").Text.ToDouble) If TotalPorDevengar <= 0 Then Alert("Especifique el importe del presupuesto", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Return False End If End If If DdlMonedaTC.SelectedValue = "2" Then AplicarTipoCambio() If TipoCambio <= 0 Then Alert("Ocurrió un error al obtener el tipo de cambio. Por favor verifique e intente de nuevo.", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Return False End If End If 'VALIDA SI HUBO CAMBIOS EN LOS DETALLES COMPRA If CveCompraSurtir > 0 Then Dim VariableCampo = If(TipoMovimiento.Contiene(1, 3), "CantidadF", "CantidadS") Dim ObjComprasDif As New ClsInventarios Dim DtDatosCompra As New DataTable If ObjComprasDif.RecepcionAlmacenGet(CveCompraSurtir, BuscaEntregaDirecta, UsuarioActual.CveEmpresa) Then DtDatosCompra = ObjComprasDif.DtResultados End If Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDouble) Dim CantConsulta = DtDatosCompra.SUM(VariableCampo) If Math.Abs(CantidadGV - CantConsulta) > 0.01 Then CargaCompra(CveCompraSurtir, -1) CargaPendientes() Alert("Ha sido cambiada la información de existencias de la compra actual, se han recargado la información.", TipoMensaje.MsgAdvertencia) ObjComprasDif.Dispose() Return False End If ObjComprasDif.Dispose() End If 'VALIDA SI HUBO CAMBIOS EN LOS DETALLES OC If CveOCSurtir > 0 Then Dim VariableCampo = If(TipoMovimiento = 1, "CantidadF", "CantidadS") Dim ObjComprasDif As New ClsInventarios Dim DtDatosOC As New DataTable If ObjComprasDif.RecepcionAlmacenOCGet(CveOCSurtir, UsuarioActual.CveEmpresa) Then DtDatosOC = ObjComprasDif.DtResultados.FiltraParametros("CantidadCompra = 0") End If Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDouble) Dim CantConsulta = DtDatosOC.SUM(VariableCampo) If Math.Abs(CantidadGV - CantConsulta) > 0.1 Then CargaOCPorSurtir(CveOCSurtir) Alert("Ha sido cambiada la información de existencias de la orden de compra actual, se han recargado la información.", TipoMensaje.MsgAdvertencia) ObjComprasDif.Dispose() Return False End If ObjComprasDif.Dispose() End If 'VALIDA SI HUBO CAMBIOS EN LOS DETALLES IMPORTACION If CveImportacionSurtir > 0 Then Dim VariableCampo = If(TipoMovimiento = 1, "CantidadF", "CantidadS") Dim ObjComprasDif As New ClsInventarios Dim DtDatosImportacion As New DataTable If ObjComprasDif.RecepcionAlmacenImportacionGet(CveImportacionSurtir, CveImportacionCompra, CveImportacionProveedor, UsuarioActual.CveEmpresa) Then DtDatosImportacion = ObjComprasDif.DtResultados End If Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDouble) Dim CantConsulta = DtDatosImportacion.SUM(VariableCampo) If CantidadGV <> CantConsulta Then CargaImportacionSurtir(CveImportacionSurtir) Alert("Ha sido cambiada la información de existencias de la importación actual, se han recargado la información.", TipoMensaje.MsgAdvertencia) ObjComprasDif.Dispose() Return False End If ObjComprasDif.Dispose() End If 'VALIDA SI HUBO CAMBIOS EN LOS DETALLES FLETES If CveFleteSurtir > 0 Then Dim VariableCampo = If(TipoMovimiento = 1, "CantidadF", "CantidadS") Dim ObjComprasDif As New ClsInventarios Dim DtDatosImportacion As New DataTable If ObjComprasDif.RecepcionAlmacenFleteGet(CveFleteSurtir, CveFleteOrdenCompra, CveFleteCompra, UsuarioActual.CveEmpresa) Then DtDatosImportacion = ObjComprasDif.DtResultados End If Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDouble) Dim CantConsulta = DtDatosImportacion.SUM(VariableCampo) If CantidadGV <> CantConsulta Then CargaFleteSurtir(CveFleteSurtir) Alert("Ha sido cambiada la informacion de existencias costo indirecto actual, se han recargado la información.", TipoMensaje.MsgAdvertencia) ObjComprasDif.Dispose() Return False End If ObjComprasDif.Dispose() End If 'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH Dim Index = 0 For Each gvr As GridViewRow In GvInv.Rows If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then DtInv.Rows(Index)("CantidadSurtidaPantalla") = gvr.FCTextBox("TbCantidadF").Text.ToDouble End If Index += 1 Next 'VERIFICA EXISTENCIAS If TipoMovimiento > 1 Then Dim MensajeExistencias As New StringBuilder Dim ObjInventarios As New ClsInventarios For Each gvr As GridViewRow In GvInv.Rows Dim ExistenciaActual = DtInv.SUM("CantidadSurtidaPantalla", $"CvePS = {gvr.DataKey("CvePS").ToEntero} AND CveUM = {gvr.DataKey("CveUM").ToEntero} ") If TipoMovimiento = 2 Then 'If gvr.DataKey("CantidadC").ToString.ToDecimal <> ExistenciaActual Then ' Alert("La devolución debe de ser completa.", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If If DtExistencias.SUM("Existencia", $"CvePS = {gvr.DataKey("CvePS").ToEntero} AND CveUM = {gvr.DataKey("CveUM").ToEntero}") < ExistenciaActual Then MensajeExistencias.Append($"Producto: {GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=gvr.DataKey("CvePS").ToString.ToEntero).FiltroPrimeroValor("PSCodigo")}.
") Continue For End If End If Dim Existencia = ObjInventarios.GetExistenciasPS(gvr.DataKey("CvePS").ToEntero, gvr.DataKey("CveUM").ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm")) If Existencia < ExistenciaActual Then MensajeExistencias.Append($"Producto: {GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=gvr.DataKey("CvePS").ToString.ToEntero).FiltroPrimeroValor("PSCodigo")}.
") Continue For End If Next ObjInventarios.Dispose() If MensajeExistencias.ToString <> "" Then Alert($"Los siguientes productos no cuentan con la existencia suficiente para hacer la devolución.

{MensajeExistencias.ToString}", TipoMensaje.MsgAdvertencia) Return False End If End If If UsuarioActual.Empresa.Funcionalidad(563) = "1" Then If TotalCantidad <> DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") Then Alert("La seccion de almacen no ha sido agregada completamente.", TipoMensaje.MsgAdvertencia) Return False End If End If Return True End Function Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click 'VALIDACIONES If Not ValidaGuardar() Then Exit Sub End If If CveCompraSurtir > 0 Or CveOCSurtir > 0 Then GuardaCompraOC() ElseIf CveImportacionSurtir > 0 Then GuardaImportacionFlete() ElseIf CveFleteSurtir > 0 Then GuardaImportacionFlete() Else Alert("Ocurrio un error al procesar la informacion para guardar el movimiento. Por favor comuniquese con atencion SIG.", TipoMensaje.MsgError) End If End Sub Private Function GeneraPrePolizaSalidaEntregaDirecta(CveMovimiento As Integer, ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, ByRef ObjContaContPAQ As ClsContPAQi) As Boolean Dim Retorno As Boolean = True Try Dim DtCostos As DataTable = Nothing Dim ValorInventario As Decimal = 0 Dim ValorInventarioME As Decimal = 0 Dim CveConcepto As Integer = 3 ObjInventario.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) Dim CveVenta As Integer = ObjInventario.CveVenta Dim CveAlmacen As Integer = ObjInventario.CveAlmacen Dim SerieFolio As String = ObjInventario.DtResultados.Rows(0)("SerieFolioVenta").ToString Dim MovAlmacen As Boolean = True Dim OrigenMov As Integer = GlobalDTInvConceptos.FiltroPrimeroValor("Origen", "CveConcepto = " & CveConcepto).ToEntero If OrigenMov = 1 Then MovAlmacen = False Else MovAlmacen = True If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then DtCostos = ObjInventario.DtResultados Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"}) Dim IdCtaContable As Integer = 0 Dim ConceptoPoliza As String = String.Format("{0}-{1}", "Salida de Almacen", SerieFolio) If tmpCostos.Rows.Count > 0 Then Dim Concepto As String = ConceptoPoliza Dim CvePrePoliza = ObjConta.AddPrePolizas("Inv_EntradaSalida", 74, DtCostos.SUM("Total"), DtCostos.SUM("Total"), 1, TxtFecha.Text.ToDate, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Dim tCveSubProyecto = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen={CveAlmacen}").ToEntero Dim tCveConcepto As Integer = 69 For Each RowInv As DataRow In tmpCostos.Rows ValorInventario = DtCostos.SUM("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").ToString.ToDecimal.RoundSQL If tCveConcepto = 69 Then IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero End If If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not MovAlmacen, ValorInventario, Concepto, tCveConcepto, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ValorInventario, CveSubProyecto:=tCveSubProyecto) Then Retorno = False Exit For End If Next IdCtaContable = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen={CveAlmacen}").ToEntero If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, MovAlmacen, DtCostos.SUMD("Total").RoundSQL, Concepto, 68, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=DtCostos.SUMD("Total").RoundSQL) Then Retorno = False End If If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") Retorno = False End If End If 'CONTABILIZAR - SIMPLIFICAR If Retorno Then If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then Retorno = False End If End If If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then If ObjContaContPAQ Is Nothing Then ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) ObjContaContPAQ.IniciaTransacSQL() End If If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then Retorno = False End If End If End If Else Retorno = False End If Else Retorno = False End If Catch ex As Exception OnError("Ocurrió un error al guadar la prepoliza", ex) Retorno = False End Try Return Retorno End Function Private Sub GuardaCompraOC() Dim CveMovimiento As Integer Dim InvFolio As String = "" Dim FechaMovto As Date = TxtFecha.Text.ToDate Dim ErrorMovInv As Boolean Dim MensajeError = "" Dim ObjInventario As New ClsInventarios Dim ObjBitacora As New ClsOIEventos(ObjInventario.IniciaTransacSQL()) Dim ObjCompras As New ClsCompras(ObjInventario.IniciaTransacSQL()) Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL()) Dim ObjOC As New ClsOC(ObjInventario.IniciaTransacSQL()) Dim ObjAcum As New ClsAcumuladores(ObjInventario.IniciaTransacSQL()) Dim ObjContaAC As ClsContPAQi = Nothing Dim ObjContaContPAQ As ClsContPAQi = Nothing 'ENTREGA DIRECTA Dim CveMovtoSalidaDirecta = -1 Dim FolioSalidaDirecta = -1 'APARTADOS Dim MovtosSalida As New List(Of Integer) Dim FoliosSalida As New List(Of Integer) Dim MovtosEntrada As New List(Of Integer) Dim FoliosEntrada As New List(Of Integer) 'VIRUAL Dim CveMovimientoVirtual As Integer = -1 Dim FolioVirtual As Integer = -1 'CONTABILIDAD Dim CvePrePoliza = -1 Dim MensajeContabilidad = "" Try 'RECARGA TC CUANDO ES RECEPCION CON OC Y DOLARES If CveOCSurtir > 0 And CveMoneda <> 1 Then TipoCambio = GlobalTipoCambio(TxtFecha.Text.ToDate) End If If HdnTipoDocto.Value <> "Fac" Then RecibidaCompleta = False 'ENTRADA ALMACÉN CveMovimiento = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, If(TipoMovimiento > 1, 13, 2), 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), MovimientoFijo:=If(TipoMovimiento = 2, True, False), Remision:=TxtRemision.Text, Modulo:="RA/G") If CveMovimiento > 0 Then InvFolio = ObjInventario.Folio.ToString Dim DtDetalle As New DataTable Dim DtDetalleLote As New DataTable Dim PU As Decimal = 0.0D Dim PUExtranjero As Decimal = 0.0D Dim CostoIndirecto As Decimal = 0.0D Dim SumaTotal As Decimal = 0.0D Dim Cont As Integer = 0 For Each gvr As GridViewRow In GvInv.Rows If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then PU = DtInv.Rows(gvr.RowIndex)("PU").ToString.ToDecimal CostoIndirecto = DtInv.Rows(gvr.RowIndex)("CostoIndirecto").ToString.ToDecimal PUExtranjero = DtInv.Rows(gvr.RowIndex)("PUExtranjero").ToString.ToDecimal 'SI FUE POR SERIE LOTE DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) If DtDetalle.Rows.Count > 0 Then Dim ContDt As Integer = 0 For Each Dr As DataRow In DtDetalle.Rows SumaTotal += PU + CostoIndirecto If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalle.Rows.Count AndAlso Math.Round((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)), 2) <> SumaTotal Then If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then PU = Math.Round((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)), 2).ToDecimal - (SumaTotal - (PU)) End If End If If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), SerieLote:=Dr("Serie").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If ContDt += 1 Next ElseIf DtDetalleLote.Rows.Count > 0 Then Dim ContDt As Integer = 0 For Each Dr As DataRow In DtDetalleLote.Rows SumaTotal += Dr("Cantidad").ToString.ToDecimal * (PU + CostoIndirecto) If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalleLote.Rows.Count AndAlso Math.Round((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)), 2) <> SumaTotal Then If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then PU = (Math.Round((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)), 2).ToDecimal - (SumaTotal - (Dr("Cantidad").ToString.ToDecimal * (PU)))) / Dr("Cantidad").ToString.ToDecimal End If End If If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If ContDt += 1 Next Else SumaTotal += gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU + CostoIndirecto) ' considerar el costo indirecto para el ajuste If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso Math.Round((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)), 2) <> Math.Round(SumaTotal, 2) Then Dim tTotal As Decimal = gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU) If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then PU = (Math.Round((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)), 2).ToDecimal - (SumaTotal - tTotal)) / gvr.FCTextBox("TbCantidadF").Text.ToDecimal End If End If If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, gvr.FCTextBox("TbCantidadF").Text.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If End If If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then For Each Dr As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {gvr.RowIndex}").Rows If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr("CveSeccionAlmacen").ToString.ToEntero, Dr("CantidadSeccionAlmacen").ToString.ToDecimal) Then ErrorMovInv = True Exit For End If Next End If Cont += 1 End If Next Else ErrorMovInv = True End If ''VALIDACIÓN DE IMPORTES INGRESADOS VS LA COMPRA U OC If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If Not ErrorMovInv AndAlso RecibidaCompleta AndAlso ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then Dim dtt As DataTable = ObjInventario.DtResultados Dim tTotalInsertado As Decimal = dtt.SUMD("TotalOriginal") If CveTipoCompra = 8 Then 'entrada almacen con costo indirecto cargado en la misma compra tTotalInsertado = dtt.SUMD("Total") ' está incluido el costo indirecto en la factura End If If Math.Round(TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1), 2) <> Math.Round(tTotalInsertado, 2) Then ErrorMovInv = True Alert("La Entrada no coincide con el valor del documento." & Math.Round(TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1), 2) & " -" & tTotalInsertado, TipoMensaje.MsgError) GuardaLog("La Entrada no coincide con el valor del documento." & Math.Round(TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1), 2) & " -" & tTotalInsertado) End If End If End If 'SI RECEPCION VALIDA [ENTREGADIRECTA, APARTADOS, AC] If TipoMovimiento = 1 Then 'ENTREGA DIRECTA If EntregaDirecta Then If Not ErrorMovInv Then Dim CveVenta As Integer = 0 Dim Dt As DataTable = Nothing If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 Then Dt = ObjInventario.DtResultados CveVenta = ObjInventario.DtResultados.Rows(0)("CveVenta").ToString.ToEntero End If End If CveMovtoSalidaDirecta = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 3, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), MovimientoFijo:=True, CveMovimientoRelacionado:=CveMovimiento, Remision:=TxtRemision.Text, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RA/G") FolioSalidaDirecta = ObjInventario.Folio If Not CveMovtoSalidaDirecta > 0 Then ErrorMovInv = True End If If Not ErrorMovInv AndAlso Dt IsNot Nothing Then For Each Dr As DataRow In Dt.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovtoSalidaDirecta, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, Dr("CveSeccionAlmacen").ToString.ToEntero, Dr("SerieLote").ToString, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If Next End If If Not ErrorMovInv Then If Not ObjInventario.LimpiaEntregaDirecta(CveMovimiento) Then ErrorMovInv = True End If End If If Not ErrorMovInv Then If Not GeneraPrePolizaSalidaEntregaDirecta(CveMovtoSalidaDirecta, ObjInventario, ObjConta, ObjContaContPAQ) Then ErrorMovInv = True End If End If End If End If 'APARTADOS If Apartado Then If ObjInventario.GetMovimientosDetalleVendedor(CveMovimiento) Then Dim CveMovtoSalidaActual = -1 Dim CveMovtoEntradaActual = -1 Dim CveVendedorActual = -1 Dim CveClienteActual = -1 Dim CveAlmacenDestino = CveAlmacenApartado For Each Dr As DataRow In ObjInventario.DtResultados.Rows If CveVendedorActual = -1 Or (Dr("CveVendedor").ToString.ToEntero <> CveVendedorActual Or Dr("CveCliente").ToString.ToEntero <> CveClienteActual) Then CveMovtoSalidaActual = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 8, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), CveAlmacenDestino:=CveAlmacenDestino, MovimientoFijo:=True, CveVendedor:=Dr("CveVendedor").ToString.ToEntero, CveCliente:=Dr("CveCliente").ToString.ToEntero, Remision:=TxtRemision.Text, Modulo:="RA/G") MovtosSalida.Add(CveMovtoSalidaActual) FoliosSalida.Add(ObjInventario.Folio) CveMovtoEntradaActual = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), CveAlmacenDestino:=CveAlmacenDestino, CveMovimientoRelacionado:=CveMovtoSalidaActual, CveVendedor:=Dr("CveVendedor").ToString.ToEntero, CveCliente:=Dr("CveCliente").ToString.ToEntero, Remision:=TxtRemision.Text) MovtosEntrada.Add(CveMovtoEntradaActual) FoliosEntrada.Add(ObjInventario.Folio) CveVendedorActual = Dr("CveVendedor").ToString.ToEntero CveClienteActual = Dr("CveCliente").ToString.ToEntero End If If CveMovtoSalidaActual <= 0 Or CveMovtoEntradaActual <= 0 Then ErrorMovInv = True Exit For End If If Not ObjInventario.AddMovimientoDetalle(CveMovtoSalidaActual, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, Dr("CveSeccionAlmacen").ToString.ToEntero, Dr("SerieLote").ToString, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If If Not ObjInventario.AddMovimientoDetalle(CveMovtoEntradaActual, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, Dr("CveSeccionAlmacen").ToString.ToEntero, Dr("SerieLote").ToString, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If Next End If End If 'VIRTUAL If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then Dim DtPSVirtual As New DataTable("DtTamanios") DtPSVirtual.Columns.Add(New DataColumn("CvePS", GetType(Integer))) DtPSVirtual.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) DtPSVirtual.Columns.Add(New DataColumn("PU", GetType(Decimal))) DtPSVirtual.Columns.Add(New DataColumn("CveUM", GetType(Integer))) Dim DtComprasDetalle As DataTable = Nothing Dim DtTamanios As DataTable = Nothing If ObjCompras.GetCompraDetalle(CveCompraSurtir) Then DtComprasDetalle = ObjCompras.DtResultados.Copy() End If If ObjAcum.TamañoGet(-1, UsuarioActual.CveEmpresa) Then DtTamanios = ObjAcum.DtResultados.Copy() End If For Each GvRow As GridViewRow In GvInv.Rows If GvRow.RowType = DataControlRowType.DataRow Then For Each Tam As DataRow In DtTamanios.Rows If Tam("CveTamaño").ToString() = GvRow.DataKey("CveTamaño") Then Dim CvePSCargo = Tam("CvePSCargo").ToString().ToEntero() Dim RowCompraDetalle = DtComprasDetalle.FiltroPrimero($"CvePS = {CvePSCargo}") If RowCompraDetalle IsNot Nothing Then Dim Row As DataRow = DtPSVirtual.NewRow() Row("CvePS") = CvePSCargo Row("Cantidad") = GvRow.FCTextBox("TbCantidadF").Text.ToDecimal() Row("PU") = RowCompraDetalle("PU").ToString().ToDecimal() Row("CveUM") = GvRow.DataKey("CveUM").ToEntero() DtPSVirtual.Rows.Add(Row) End If End If Next End If Next If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 Then Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero() Dim CveAlmacenVirutal As Integer = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 24).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero() CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirutal, If(TipoMovimiento > 1, 13, 2), 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Modulo:="RA/G") FolioVirtual = ObjInventario.Folio For Each RowUsado As DataRow In DtPSVirtual.Rows Dim CvePS = RowUsado("CvePS").ToString().ToEntero() Dim CantidadUsado As Double = RowUsado("Cantidad").ToString().ToDouble() Dim PU As Double = RowUsado("PU").ToString().ToDouble() Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero() If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If Next End If End If 'DEVENGAR AC If Not ErrorMovInv AndAlso UsuarioActual.Empresa.UsaAC Then Dim IDPoliza As Integer Dim TotalDetalle As Double = 0.0 Dim TotalPorDevengar = 0.0 TotalPorDevengar += GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(Gvr) Math.Round(Gvr.DataKey("PU").ToString.ToDouble, 4) * Math.Round(Gvr.DataKey("CantidadF").ToString.ToDouble, 4)) TotalPorDevengar = Math.Round(TotalPorDevengar, 4) If ObjContaContPAQ Is Nothing Then ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) ObjContaContPAQ.IniciaTransacSQL() End If IDPoliza = ObjContaAC.AddPoliza(4, "Devengado", TotalPorDevengar * 2, TotalPorDevengar * 2, UsuarioActual.CveUsuario, FechaMovto) If IDPoliza > 0 AndAlso ObjContaAC.GetCuentas(-1, "-1", -1) Then DtCuentas = ObjContaAC.DtResultados.Copy Dim drRegistroMatriz As DataRow Dim CuentaCargo As Integer Dim CuentaAbono As Integer Dim Importe = 0.0 For Each gvr As GridViewRow In GvInv.Rows Importe = gvr.FCTextBox("TbCantidadF").Text.ToDouble * gvr.DataKey("PU").ToString.ToDouble TotalDetalle += Importe If Importe > 0 Then If ObjContaAC.AddMovimiento(IDPoliza, 1, False, Importe, "", "", 0, FechaMovto, "") Then 'actualizo el idcuenta del presupuesto If Not ObjContaAC.AddMovimiento(IDPoliza, gvr.DataKey("IdCuentaComprometido").ToString.ToEntero, True, Importe, "", "", 0, FechaMovto, "") Then ErrorMovInv = True Exit For End If Else ErrorMovInv = True Exit For End If 'AFECTAR MATRIZ EGRESOS drRegistroMatriz = GlobalDTAC_MatrizEgresos.FiltroPrimero(String.Format("Partida = {0} And TipoGasto = {1}", gvr.DataKey("CodigoClasificacion").ToString, gvr.DataKey("CveTipoGasto").ToString)) If drRegistroMatriz IsNot Nothing AndAlso drRegistroMatriz("CuentaCargo").ToString.ToEntero > 0 Then CuentaCargo = DtCuentas.FiltroPrimeroValor("Id", String.Format("Codigo = '{0}'", drRegistroMatriz("CuentaCargo").ToString)).ToEntero CuentaAbono = DtCuentas.FiltroPrimeroValor("Id", String.Format("Codigo = '{0}'", drRegistroMatriz("CuentaAbono").ToString)).ToEntero If CuentaCargo > 0 AndAlso CuentaAbono > 0 Then If ObjContaAC.AddMovimiento(IDPoliza, CuentaCargo, False, Importe, "", "", 0, FechaMovto, "") Then If Not ObjContaAC.AddMovimiento(IDPoliza, CuentaAbono, True, Importe, "", "", 0, FechaMovto, "") Then ErrorMovInv = True Exit For End If Else ErrorMovInv = True Exit For End If Else ErrorMovInv = True Exit For End If End If 'TERMINA AFECTAR MATRIZ INGRESOS End If Next If TotalDetalle <= 0 AndAlso TotalPorDevengar >= TotalDetalle Then ErrorMovInv = True End If Else ErrorMovInv = True End If If ErrorMovInv Then Alert("Error al registrar los movimientos Contables", TipoMensaje.MsgError) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If End If 'TERMINA: DEVENGAR End If 'ACTUALIZA ESTATUS ALMACEN If TipoMovimiento = 2 Then If Not ObjCompras.UpdateEstatusAlmacen(CveCompraSurtir, 0) Then ErrorMovInv = True End If End If 'AGREGA BITACORA TEMPORAL If DtBitacora IsNot Nothing AndAlso DtBitacora.Rows.Count > 0 Then ErrorMovInv = GuardaBitacoraTemporal(ObjBitacora, CveMovimiento) End If 'PREPOLIZA - SOLO CUANDO SEA RECEPCIÓN If TipoMovimiento = 1 AndAlso ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then Dim DtCostos As DataTable = Nothing Dim ValorInventario As Decimal = 0 DtCostos = ObjInventario.DtResultados Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL Dim TotalCostoExtranjero As Decimal = DtCostos.SUM("TotalExtranjero").ToDecimal 'VARIABLES Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero Dim IdCtaContableRecepcion = -1 Dim IdCtaContableRecepcionME = -1 Dim IdCtaContableRecepcionComplementaria = -1 Dim Fecha As Date = Now Dim CveProveedor As Integer = -1 Dim ProveedorNombre As String = "" Dim SerieFolio As String = "" Dim CveConceptoContableCosto = -1 Dim CveConceptoContableCostoME = -1 Dim CveConceptoContableCostoComplementaria = -1 Dim UsaComplementariaFleteImportaciones As Boolean = False If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = False If DtCostos.Rows.Count > 0 Then If CveCompraSurtir > 0 Then If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then 'Fecha = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate Fecha = TxtFecha.Text.ToDate CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString SerieFolio = $"Compra: {ObjCompras.DtResultados(0)("SerieFolio").ToString}" CveConceptoContableCosto = 205 CveConceptoContableCostoME = 230 CveConceptoContableCostoComplementaria = 231 If ObjConta.GetRetCuenta(205, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(230, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(231, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If Else ErrorMovInv = True End If ElseIf CveOCSurtir > 0 Then If ObjOC.GetOC(CveOCSurtir, UsuarioActual.CveEmpresa) Then 'Fecha = ObjOC.DtResultados(0)("Fecha").ToString.ToDate Fecha = TxtFecha.Text.ToDate CveProveedor = ObjOC.DtResultados(0)("CveProveedor").ToString.ToEntero ProveedorNombre = ObjOC.DtResultados(0)("RazonSocial").ToString SerieFolio = String.Format("{0} OC# {1} - Almacén# {2}", ProveedorNombre, ObjOC.DtResultados(0)("Folio"), ObjInventario.Folio) CveConceptoContableCosto = 176 CveConceptoContableCostoME = 228 CveConceptoContableCostoComplementaria = 229 If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = True If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(176, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(228, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(229, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If Else ErrorMovInv = True End If End If If Not ErrorMovInv Then Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen", 74, TotalCosto, TotalCosto, 1, Fecha, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) If CvePrePoliza > 0 Then If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveSubProyecto:=CveSubProyecto, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=CveCuentaAlmacen) Then 'AGREGA POR CONCEPTO POR CVEOCDETALLE If CveOCSurtir > 0 Then Dim TotalCostoDetalle As Decimal = 0 Dim TotalCostoAcumulado As Decimal = 0 Dim cont As Integer = 1 For Each Dr As DataRow In DtCostos.Rows TotalCostoDetalle = (Dr("Total").ToString.ToDecimal) TotalCostoExtranjero = Dr("TotalExtranjero").ToString.ToDecimal TotalCostoAcumulado += Math.Round(TotalCostoDetalle, 2) 'si es el último movimiento verifica los importes que sean igual If cont = DtCostos.Rows.Count AndAlso (Math.Round(TotalCosto, 2) <> Math.Round(TotalCostoAcumulado, 2)) Then TotalCostoDetalle = TotalCostoDetalle + (Math.Round(TotalCosto, 2) - Math.Round(TotalCostoAcumulado, 2)) TotalCostoExtranjero = TotalCostoExtranjero + (Math.Round(TotalCosto, 2) - Math.Round(TotalCostoAcumulado, 2)) End If If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then 'COMPLEMENTARIA If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveSubProyecto:=CveSubProyecto, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then ErrorMovInv = True Exit For End If Else ErrorMovInv = True Exit For End If Else If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle, CveCuenta:=-1, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then ErrorMovInv = True Exit For End If End If cont = cont + 1 Next Else TotalCosto = DtCostos.SUMD("Total").RoundSQL TotalCostoExtranjero = DtCostos.SUMD("TotalExtranjero") If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then 'COMPLEMENTARIA If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal) Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio.ToDecimal) Then ErrorMovInv = True End If Else ErrorMovInv = True End If Else If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=-1) Then ErrorMovInv = True End If End If End If Else ErrorMovInv = True End If Else ErrorMovInv = True End If End If If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") MensajeError = "El Movimiento presenta una diferencia en el registro." ErrorMovInv = True End If End If 'CONTABILIZAR - UNIFICAR Y SIMPLIFICAR CON PP DE LA COMPRA If Not ErrorMovInv Then If CvePrePolizaCompra > 0 Then If UsuarioActual.Empresa.Funcionalidad(219) = "1" Then If Not ObjConta.PrePolizaUnificacion(CvePrePoliza, CvePrePolizaCompra) Then ErrorMovInv = True MensajeError = "Error al unificar los conceptos contables" End If End If End If If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then ErrorMovInv = True MensajeError = "Error al simplificar los conceptos contables" End If End If If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then If ObjContaContPAQ Is Nothing Then ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) ObjContaContPAQ.IniciaTransacSQL() End If If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then MensajeContabilidad = $"
Movimiento contabilizado en el folio: {ObjConta.ContaFolio}
" Else ErrorMovInv = True MensajeError = "Error al contabilizar los conceptos contables" End If End If End If End If End If 'PREPOLIZA - NC If TipoMovimiento = 3 AndAlso ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then Dim DtCostos As DataTable = Nothing DtCostos = ObjInventario.DtResultados Dim TotalCosto As Decimal = DtCostos.SUM("Total").ToDecimal Dim TotalNC As Decimal = 0 Dim CveClasificacionDifCostoNC = -1 Dim tTipoCambio As Decimal = 1 If CveMoneda <> 1 Then tTipoCambio = TipoCambio.ToDecimal For Each gvr As GridViewRow In GvInv.Rows TotalNC += gvr.FCTextBox("TbCantidadF").Text.ToDecimal * gvr.DataKey("PU").ToDecimal * tTipoCambio CveClasificacionDifCostoNC = gvr.DataKey("CveClasificacion").ToEntero Next Dim IdCtaContableClasificacion As Integer = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {CveClasificacionDifCostoNC}").ToEntero Dim CveCuentaClasificacion As Integer = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostosSIG", $"CveClasificacion = {CveClasificacionDifCostoNC}").ToEntero TotalCosto = Math.Round(TotalCosto, 2) TotalNC = Math.Round(TotalNC, 2) Dim DifCostoNC = Math.Round(TotalCosto - TotalNC, 2) 'VARIABLES Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero Dim Fecha As Date = TxtFecha.Text.ToDate Dim CveProveedor As Integer = -1 Dim ProveedorNombre As String = "" Dim SerieFolio As String = "" Dim IdCtaContableNC = 0 Dim CveConceptoContableNC = -1 If DtCostos.Rows.Count > 0 Then If CveCompraSurtir > 0 Then If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString SerieFolio = $"NC: {ObjCompras.DtResultados(0)("SerieFolio").ToString}" CveConceptoContableNC = 225 If ObjConta.GetRetCuenta(CveConceptoContableNC, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableNC = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If Else ErrorMovInv = True End If End If If Not ErrorMovInv Then CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen-NC", 74, TotalCosto, TotalCosto, 1, Fecha, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) If CvePrePoliza > 0 Then If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalNC, SerieFolio, CveConceptoContableNC, SerieFolio, Fecha, IdCtaContableNC, -1, CveCompra:=CveCompraSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalNC) Then If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto * -1, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto * -1, CveCuenta:=CveCuentaAlmacen) Then If DifCostoNC <> 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, DifCostoNC * -1, SerieFolio, 69, SerieFolio, Fecha, IdCtaContableClasificacion, -1, CveClasificacion:=CveClasificacionDifCostoNC, CveCompra:=CveCompraSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=DifCostoNC * -1, CveCuenta:=CveCuentaClasificacion) Then ErrorMovInv = True End If End If Else ErrorMovInv = True End If Else ErrorMovInv = True End If Else ErrorMovInv = True End If End If If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Inventarios/RecepcionAlmacen-PPNC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") ErrorMovInv = True End If End If 'CONTABILIZAR - UNIFICAR Y SIMPLIFICAR CON PP DE LA COMPRA If Not ErrorMovInv Then If CvePrePolizaCompra > 0 Then If UsuarioActual.Empresa.Funcionalidad(219) = "1" Then If Not ObjConta.PrePolizaUnificacion(CvePrePoliza, CvePrePolizaCompra) Then ErrorMovInv = True MensajeError = "Error al unificar los conceptos contables" End If End If End If If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then ErrorMovInv = True MensajeError = "Error al simplificar los conceptos contables" End If End If If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) ObjContaContPAQ.IniciaTransacSQL() If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then MensajeContabilidad = $"
Movimiento contabilizado en el folio: {ObjConta.ContaFolio}
" Else ErrorMovInv = True MensajeError = "Error al contabilizar los conceptos contables" End If End If End If End If End If 'AGREGA SALDOS A OC SURTIDAS If Not ErrorMovInv And CveOCSurtir > 0 Then If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjOC.OrdenesCompraDetalleSaldosInvCompraAdd(Dr("CveOrdenCompraDetalle").ToString.ToEntero, Dr("CveMovimientoDetalle").ToString.ToEntero, Dr("Cantidad").ToString.ToDouble, -1, -1) Then ErrorMovInv = True Exit For End If Next Else ErrorMovInv = True End If End If Catch ex As Exception OnError("Ocurrió un error al guardar", ex) ErrorMovInv = True End Try 'FINAL If Not ErrorMovInv Then ObjInventario.Commit() ' aplica los movimientos insertados If ObjContaAC IsNot Nothing Then ObjContaAC.Commit() If ObjContaContPAQ IsNot Nothing Then ObjContaContPAQ.Commit() RegistraScript("playsonidito('beep-07.wav')") ' 'ENVIO DE CORREO NOTIFICACION A VENDEDORES DE OC MandaCorreoOCVendedores(CveCompraSurtir, CveMovimiento) Dim Msg As New StringBuilder Dim link As String = String.Format("{1}", CveMovimiento, InvFolio) Msg.AppendFormat("Movimiento Registrado: Folio: {0}", link) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento))) 'ENTREGA DIRECTA If CveMovtoSalidaDirecta > 0 Then Msg.AppendFormat("

Movimientos de control:
") link = String.Format("{1}", CveMovtoSalidaDirecta, FolioSalidaDirecta) Msg.AppendFormat("Movimiento de Salida Folio: {0}", link) End If 'APARTADO If MovtosSalida.Count > 0 Then Msg.AppendFormat("

Movimientos de control:
") For index = 0 To MovtosSalida.Count - 1 link = String.Format("{1}", MovtosSalida(index), FoliosSalida(index)) Msg.AppendFormat("
Movimiento de Salida por Traspaso: Folio: {0}", link) link = String.Format("{1}", MovtosEntrada(index), FoliosEntrada(index)) Msg.AppendFormat("
Movimiento de Entrada por Traspaso: Folio: {0}
", link) Next End If 'VIRTUAL If CveMovimientoVirtual > 0 Then link = String.Format("{1}", CveMovimientoVirtual, FolioVirtual) Msg.AppendFormat("
Movimiento de Entrada al Almacen Virtual: Folio: {0}", link) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoVirtual))) End If 'CONTABILIDAD Msg.Append(MensajeContabilidad) Alert(Msg.ToString, TipoMensaje.MsgInformacion) If ObjInventario.RecepcionAlmacenGet(CveCompraSurtir, -1, UsuarioActual.CveEmpresa) Then CreaDTInv(ObjInventario.DtResultados) CargaGVInv() BtnGuardar.Visible = True End If Limpia() Else ObjInventario.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() If ObjContaContPAQ IsNot Nothing Then ObjContaContPAQ.RollBack() RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Alert($"Ocurrió un error al guardar el movimiento de almacén. Por favor vuelva a intentar.

{MensajeError}", TipoMensaje.MsgError) End If ObjInventario.Dispose() If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose() If ObjContaContPAQ IsNot Nothing Then ObjContaContPAQ.Dispose() End Sub Private Sub GuardaImportacionFlete() Dim CveMovimiento As Integer Dim InvFolio As String = "" Dim FechaMovto As Date = TxtFecha.Text.ToDate Dim ErrorMovInv As Boolean Dim MensajeError = "" Dim ObjInventario As New ClsInventarios Dim ObjBitacora As New ClsOIEventos(ObjInventario.IniciaTransacSQL()) Dim ObjCompras As New ClsCompras(ObjInventario.IniciaTransacSQL()) Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL()) Dim ObjOC As New ClsOC(ObjInventario.IniciaTransacSQL()) Dim ObjContaAC As ClsContPAQi = Nothing 'ENTRADA ALMACÉN CveMovimiento = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 2, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveImportacionCompra, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=-1, Remision:=TxtRemision.Text, Modulo:="RA/G") If CveMovimiento > 0 Then InvFolio = ObjInventario.Folio.ToString Dim DtDetalle As New DataTable Dim DtDetalleLote As New DataTable Dim PU As Decimal = 0 Dim CostoIndirecto As Decimal = 0 Dim PUExtranjero As Decimal = 0 For Each gvr As GridViewRow In GvInv.Rows If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then PU = DtInv.Rows(gvr.RowIndex)("PU").ToString.ToDecimal CostoIndirecto = DtInv.Rows(gvr.RowIndex)("CostoIndirecto").ToString.ToDecimal PUExtranjero = DtInv.Rows(gvr.RowIndex)("PUExtranjero").ToString.ToDecimal 'SI FUE POR SERIE LOTE DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero)) If DtDetalle.Rows.Count > 0 Then For Each Dr As DataRow In DtDetalle.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), SerieLote:=Dr("Serie").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto) Then ErrorMovInv = True Exit For End If Next ElseIf DtDetalleLote.Rows.Count > 0 Then For Each Dr As DataRow In DtDetalleLote.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto) Then ErrorMovInv = True Exit For End If Next Else If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, gvr.FCTextBox("TbCantidadF").Text.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto) Then ErrorMovInv = True Exit For End If End If End If Next Else ErrorMovInv = True End If 'AGREGA BITACORA TEMPORAL If DtBitacora IsNot Nothing AndAlso DtBitacora.Rows.Count > 0 Then ErrorMovInv = GuardaBitacoraTemporal(ObjBitacora, CveMovimiento) End If Dim CvePrePoliza As Integer = 0 Dim UsaComplementariaCostoIndirecto As Boolean = False If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaCostoIndirecto = False Dim PorcentajeCompraImportacion As Decimal = 0 ' si hay mas de una factura de importación saber lo que se está recibiendo 'SE REGISTRAN LAS PREPOLIZAS If Not ErrorMovInv Then CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen CostoInd", 74, 0, 0, 1, FechaMovto, TxtObservaciones.Text.Trim, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Dim DtTempCompras As DataTable = Nothing PorcentajeCompraImportacion = 1 If CveFleteSurtir > 0 Then If ObjInventario.GetFleteDetalle(CveFleteSurtir) Then DtTempCompras = ObjInventario.DtResultados ' faltaría agregar la factura de producto, If ObjCompras.GetCompras(CveFleteCompra, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then Dim drc As DataRow = DtTempCompras.NewRow Dim drr As DataRow = ObjCompras.DtResultados.FiltroPrimero("") If drr IsNot Nothing Then drc("CveCompra") = CveFleteCompra drc("SubTotal") = drr("SubTotal") drc("TipoCambio") = drr("TipoCambio") drc("CveProveedor") = drr("CveProveedor") DtTempCompras.Rows.Add(drc) End If End If Else ErrorMovInv = True End If Else If CveImportacionSurtir > 0 Then If ObjCompras.GetImportacionesDetalle(CveImportacionSurtir, -1) Then DtTempCompras = ObjCompras.DtResultados Dim CveCompraImportacion As Integer = -1 If (DdlFactura.SelectedValue.ToEntero > 0) Then CveCompraImportacion = DdlFactura.SelectedValue.ToEntero If ObjCompras.GetImportacionCompras(CveImportacionSurtir, CveCompraImportacion) Then For Each drt As DataRow In ObjCompras.DtResultados.Rows PorcentajeCompraImportacion = If(CveCompraImportacion > 0, drt("PorcentajeCompra").ToString.ToDecimal, 1) Dim drc As DataRow = DtTempCompras.NewRow drc("CveCompra") = drt("CveCompra") drc("SubTotal") = drt("SubTotal") drc("TipoCambio") = drt("TipoCambio") drc("CveProveedor") = drt("CveProveedor") DtTempCompras.Rows.Add(drc) Next End If Else ErrorMovInv = True End If End If End If If CvePrePoliza > 0 Then Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Dim TotalCosto As Decimal = ObjInventario.DtResultados.SUMD("Total").RoundSQL() Dim IdCtaContableCostoInd As Integer = 0 If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, InvFolio, 68, InvFolio, FechaMovto, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=CveCuentaAlmacen) Then 'se recorren las facturas a descontar el recepción If DtTempCompras IsNot Nothing AndAlso DtTempCompras.Rows.Count > 0 Then For Each dr As DataRow In DtTempCompras.Rows Dim CveComp As Integer = dr("CveCompra").ToString.ToEntero 'el porcentaje solo aplica a las facturas de costo indirecto Dim SubTotalPartida As Decimal = dr("SubTotal").ToString.ToDecimal * If(dr("TipoCompra").ToString = "CI", PorcentajeCompraImportacion, 1) Dim ImporteAbono As Decimal = (SubTotalPartida * dr("TipoCambio").ToString.ToDecimal).RoundSQL Dim ImporteAbonoME As Decimal = 0 Dim CveConceptoCostoIndirecto As Integer = If(CveImportacionSurtir > 0, 240, 237) If ObjConta.GetRetCuenta(CveConceptoCostoIndirecto, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContableCostoInd = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero End If If UsaComplementariaCostoIndirecto Then CveConceptoCostoIndirecto = If(CveImportacionSurtir > 0, 241, 238) ImporteAbono = SubTotalPartida ImporteAbonoME = (SubTotalPartida * dr("TipoCambio").ToString.ToDecimal) - SubTotalPartida End If If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, InvFolio, CveConceptoCostoIndirecto, InvFolio, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then ' si tiene valor es que hay complementaria If ImporteAbonoME > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, InvFolio, If(CveImportacionSurtir > 0, 242, 239), InvFolio, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then ErrorMovInv = True End If End If Else ErrorMovInv = True End If Next End If End If Else ErrorMovInv = True End If End If If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") ErrorMovInv = True End If End If If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then ObjContaAC = New ClsContPAQi(UsuarioActual.Empresa) ObjContaAC.IniciaTransacSQL() If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaAC) Then MensajeError = $"
Movimiento contabilizado en el folio: {ObjConta.ContaFolio}
" Else ErrorMovInv = True MensajeError = "Error al contabilizar los conceptos contables" End If End If 'FINAL If Not ErrorMovInv Then ObjInventario.Commit() ' aplica los movimientos insertados If ObjContaAC IsNot Nothing Then ObjContaAC.Commit() RegistraScript("playsonidito('beep-07.wav')") Dim Msg As New StringBuilder Dim link As String = String.Format("{1}", CveMovimiento, InvFolio) Msg.AppendFormat("Movimiento Registrado: Folio: {0}", link) Msg.AppendFormat("
Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento))) Alert(Msg.ToString, TipoMensaje.MsgInformacion) Limpia() Else ObjInventario.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") Alert("Error al guardar el movimiento de almacen. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If ObjInventario.Dispose() If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose() End Sub Private Sub Limpia() CveCompraSurtir = -1 CvePrePolizaCompra = -1 CveOCSurtir = -1 CveImportacionSurtir = -1 CveImportacionProveedor = -1 CveImportacionCompra = -1 BuscaEntregaDirecta = -1 DivAdvertencia.Visible = False EntregaDirecta = False DtInv = Nothing CargaGVInv() TxtObservaciones.Text = "" TxtOC.Text = "" TxtFecha.Text = Now.ToShortDateString DdlAlmacen.SelectedValueExist(-1) TxtRemision.Text = "" 'ddlProveedor.SelectedValueExist(-1) ddlProveedor.SelectedValue = "-1" DdlFolio.Items.Clear() DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlFolioOC.Items.Clear() DdlFolioOC.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlFolioImportacion.Items.Clear() DdlFolioImportacion.Items.Insert(0, New ListItem("Seleccione", "-1")) CargaFoliosRecepcion() DtBitacora.Clear() DivBitacora.Visible = False CargaEventoBitacoraTemp() DdlMonedaTC.SelectedValueExist("1") TipoCambio = 0 'TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate).ToString DivTipoCambio.Visible = False DivAdvertencia.Visible = False UpTipoCambio.Update() UPInv.Update() UpGenerales.Update() UpFiltros.Update() HLFolio.Text = "" HLFolio.NavigateUrl = "#" LbProveedor.Text = "" LbDescripcionCompra.Text = "" UpDatosCompra.Update() CargaPendientes() End Sub Private Function GuardaPrePoliza() As Boolean Return True End Function #End Region #Region " OC " Private Sub CargaFoliosOC() DdlFolioOC.Items.Clear() Dim ObjInventarios As New ClsInventarios If ddlProveedor.SelectedValue.ToEntero > 0 Then If ObjInventarios.PendientesAlmacenOCGet(ddlProveedor.SelectedValue.ToEntero, MinFecha.ToShortDateString.ToDate, UsuarioActual.CveEmpresa) Then DdlFolioOC.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() DdlFolioOC.DataBind() DdlFolioOC.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub Private Sub CargaPendientesOC() Dim ObjInventarios As New ClsInventarios Dim DtPendientesOC As New DataTable If ObjInventarios.PendientesAlmacenOCGet(ddlProveedor.SelectedValue.ToEntero, TxtFechaPendientes.Text.ToDate, UsuarioActual.CveEmpresa) Then DtPendientesOC = ObjInventarios.DtResultados Else DtPendientesOC = Nothing Alert("Ocurrió un error al obtener las OC pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError) End If ObjInventarios.Dispose() If DtPendientesOC IsNot Nothing Then GVPendientes.DataSource = DtPendientesOC End If LtActualizado.Text = String.Format("Actualizado: {0}", Now.ToString("H:mm")) GVPendientes.DataBind() UpPendientes.Update() End Sub Protected Sub BtnBuscarOC_Click(sender As Object, e As EventArgs) Handles BtnBuscarOC.Click CargaOC() End Sub Private Sub CargaOC() 'OBTENE CveOC Dim CveOC = -1 Dim MensajeCompra = "" Dim FolioOC = TxtOC.Text.Trim.ToEntero Dim ObjOC As New ClsOC If ObjOC.GetOrdenesCompraRep("OC", -1, -1, -1, -1, MinFecha, MaxFecha, -1, -1, FolioOC, -1, -1, UsuarioActual.CveEmpresa, -1) Then 'If ObjOC.DtResultados.FiltraParametros("TipoTermino = 3").Rows.Count = 1 Then If ObjOC.DtResultados.Rows(0)("TieneCompra").ToString.ToEntero > 0 And UsuarioActual.Empresa.Funcionalidad(153).ToEntero > 0 Then 'Or UsuarioActual.Empresa.Funcionalidad(153).ToEntero > 0 MensajeCompra = String.Format("{1}", ObjOC.DtResultados.Rows(0)("CveCompraVinculada").ToString, ObjOC.DtResultados.Rows(0)("SerieFolioCompraVinculada").ToString) Else CveOC = ObjOC.DtResultados.FiltroPrimeroValor("CveOrdenCompra").ToString.ToEntero End If 'End If End If ObjOC.Dispose() RecibidaCompleta = False If CveOC > 0 Then CargaOCPorSurtir(CveOC) Else If MensajeCompra <> "" Then Alert($"La orden de compra ya esta vinculada y debe darse recepción por medio de su compra:
{MensajeCompra}", TipoMensaje.MsgAdvertencia) Else Alert("No se encontro ninguna orden de compra pendiente de recepción de almacén con el folio especificado.", TipoMensaje.MsgAdvertencia) End If End If UpGenerales.Update() UPInv.Update() End Sub Private Sub CargaOCPorSurtir(CveOC As Integer) 'REINICIALIZA VALORES DdlMonedaTC.SelectedValueExist("1") TipoCambio = 0 DivAdvertencia.Visible = False EntregaDirecta = False DivTipoCambio.Visible = False DivAdvertencia.Visible = False Apartado = False BtnGuardar.Enabled = True CargaAlmacenes(-1) LtDocumento.Text = "ORDEN DE COMPRA" CveCompraSurtir = -1 CvePrePolizaCompra = -1 Dim ObjOC As New ClsOC Dim ObjInventario As New ClsInventarios If ObjOC.GetOC(CveOC, UsuarioActual.CveEmpresa) Then If ObjOC.DtResultados.Rows.Count > 0 Then CveOCSurtir = CveOC LbProveedor.Text = ObjOC.DtResultados.Rows(0)("RazonSocial").ToString HLFolio.Text = ObjOC.DtResultados.Rows(0)("Folio").ToString If UsuarioActual.TienePermisoProceso(201) Then HLFolio.NavigateUrl = $"/OC/OC.aspx?OC={CveOCSurtir}" End If LbDescripcionCompra.Text = ObjOC.DtResultados.Rows(0)("Descripcion").ToString CveMoneda = ObjOC.DtResultados.Rows(0)("CveMoneda").ToString.ToEntero lbDescripcion.Text = ObjOC.DtResultados.Rows(0)("Descripcion").ToString TotalCompraOC = ObjOC.DtResultados.Rows(0)("SubTotal").ToString.ToDecimal 'TipoCambio = ObjOC.DtResultados.Rows(0)("TipoCambio").ToString.ToDecimal TipoCambio = 0 TipoMovimiento = 1 If ObjInventario.RecepcionAlmacenOCGet(CveOC, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then DtDatosDetalle = Nothing CreaDtDetalle() DtDatosLoteDetalle = Nothing CreaDtLoteDetalle() CreaDTInv(ObjInventario.DtResultados.FiltraParametros("CantidadCompra = 0")) BtnGuardar.Visible = True ''MONEDA DIFERENTE If CveMoneda <> 1 Then 'DivTipoCambio.Visible = True DdlMonedaTC.SelectedValueExist("2") DdlMonedaTC_SelectedIndexChanged(DdlMonedaTC, EventArgs.Empty) 'TxtTipoCambio.Text = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate).ToString, TipoCambio.ToString) TipoCambio = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate), TipoCambio) If TipoCambio > 0 Then LtAdvertencia.Text = "El cambio de moneda se aplicara al guardar el movimiento con el tipo de cambio indicado." DivAdvertencia.Visible = True Else Alert("Ocurrió un error al cargar el tipo cambio. Por favor comuniquese con asistencia SIG.", TipoMensaje.MsgError) BtnGuardar.Visible = False End If End If UpTipoCambio.Update() DivBitacora.Visible = True If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then DivCodigoSeriePS.Visible = True Else DivCodigoSeriePS.Visible = False End If CargaGVInv() Else Alert("No hay productos pendientes de surtir de esta orden de compra. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) HLFolio.Text = "" HLFolio.NavigateUrl = "#" LbProveedor.Text = "" LbDescripcionCompra.Text = "" DtInv = Nothing CargaGVInv() CargaFoliosRecepcion() End If End If Else BtnGuardar.Visible = False End If ObjOC.Dispose() ObjInventario.Dispose() UpDatosCompra.Update() End Sub #End Region #Region " TIPO DE CAMBIO " Protected Sub DdlMonedaTC_SelectedIndexChanged(sender As Object, e As EventArgs) Select Case DdlMonedaTC.SelectedValue.ToEntero Case 1 TrTC1.Visible = False TrTC2.Visible = False For Each Dr As DataRow In DtInv.Rows Dr("PU") = Dr("PUExtranjero") Dr("Total") = Dr("PU").ToString.ToDouble * Dr("Cantidad").ToString.ToDouble Dr("CostoIndirecto") = Dr("CostoIndirectoExtranjero") Next CargaGVInv() 'LtTotal.Text = DtMovimientos.SUM("Total", "").ToString.FormatoNumero UPInv.Update() Case 2 TrTC1.Visible = True TrTC2.Visible = True End Select End Sub Protected Sub BtnAplicarTC_Click(sender As Object, e As EventArgs) AplicarTipoCambio() CargaGVInv() End Sub Private Sub AplicarTipoCambio() 'TipoCambio = TxtTipoCambio.Text.ToDouble If CveOCSurtir > 0 Then TipoCambio = GlobalTipoCambio(TxtFecha.Text.ToDate) End If For Each Dr As DataRow In DtInv.Rows Dr("PU") = Dr("PUExtranjero").ToString.ToDouble * TipoCambio Dr("Total") = Dr("PU").ToString.ToDouble * Dr("CantidadC").ToString.ToDouble Dr("CostoIndirecto") = Dr("CostoIndirectoExtranjero").ToString.ToDouble * TipoCambio Next DtInv.AcceptChanges() End Sub #End Region #Region " BITACORA " Protected Sub GVEventoBitacora_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvBitacora.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("Archivo").ToString.Trim <> "" AndAlso -1 > 0 Then e.Row.FCLinkButton("LinkArchivo").Visible = True e.Row.FCLinkButton("LinkArchivo").CommandArgument = String.Format("OI\{0}", e.Row.DBCampo("Archivo").ToString) ScriptManager.GetCurrent(Me).RegisterPostBackControl(e.Row.FCLinkButton("LinkArchivo")) 'Registro un evento Postbacktrigger, que recargue toda la pagina para que funcione End If If e.Row.DBCampo("Archivo").ToString.Trim <> "" Then e.Row.Cells(5).Text = "SI" Else e.Row.Cells(5).Text = "NO" End If End If End Sub Private Sub InicializaBitacoraTemporal() DtBitacora = New DataTable DtBitacora.Columns.Add("FechaIng", GetType(String)) DtBitacora.Columns.Add("FechaInicio", GetType(String)) DtBitacora.Columns.Add("Usuario", GetType(String)) DtBitacora.Columns.Add("CveUsuario", GetType(String)) DtBitacora.Columns.Add("Descripcion", GetType(String)) DtBitacora.Columns.Add("Prioridad", GetType(String)) DtBitacora.Columns.Add("FileExtension", GetType(String)) DtBitacora.Columns.Add("Archivo", GetType(String)) DtBitacora.Columns.Add("CveOrdenCompra", GetType(String)) DtBitacora.Columns.Add("CveEmpresa", GetType(String)) End Sub Protected Sub BtnGuardarEventoBitacora_Click(sender As Object, e As EventArgs) Handles BtnGuardarEventoBitacora.Click AgregaBitacoraTemporal() End Sub Private Sub AgregaBitacoraTemporal() Dim ObjEventoBitacora As New ClsOIEventos 'Archivo Dim FileExtension As String = "" Dim Filename As String = "" Dim Filesgral As List(Of Archivo) = Anexo.getfiles().Archivos For Each fileItem As Archivo In Filesgral FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") Filename = fileItem.filename Next Dim Archivo As New System.IO.FileInfo(String.Format("{0}OI\Temp\OI{1}{2}.{3}", UsuarioActual.Empresa.Ruta, UsuarioActual.CveUsuario, Now.ToString("HH-mm"), FileExtension)) If Archivo.Exists() Then Archivo.Delete() 'File.Delete(String.Format("\Empresas\{0}\OI\Temp\OI{1}{2}.{3}", CveEmpresaActual, UsuarioActual.CveUsuario, DtDetalle.Rows.Count, FileExtension)) End If If Filename <> "" Then Filename.FilesMove(String.Format("OI{0}{1}", UsuarioActual.CveUsuario, Now.ToString("HH-mm")), String.Format("Empresas\{0}\OI\Temp", UsuarioActual.CveEmpresa)) End If 'AGREGA Dim Dr = DtBitacora.NewRow Dr("FechaIng") = Now Dr("FechaInicio") = "" Dr("Usuario") = UsuarioActual.Usuario Dr("CveUsuario") = UsuarioActual.CveUsuario Dr("Descripcion") = TxtEventoDescripcion.Text.Trim Dr("Prioridad") = 1 Dr("Archivo") = If(FileExtension = "", "", $"{UsuarioActual.Empresa.Ruta}OI\Temp\OI{UsuarioActual.CveUsuario}{Now.ToString("HH-mm")}.{FileExtension}") Dr("FileExtension") = String.Format(".{0}", FileExtension) Dr("CveOrdenCompra") = -1 Dr("CveEmpresa") = UsuarioActual.CveEmpresa DtBitacora.Rows.Add(Dr) 'LIMPIA TxtEventoDescripcion.Text = "" 'ChkEventoPrioridad.Checked = False RegistraScript("$('#ModalBitacora').modal('hide')", "hidemodal") CargaEventoBitacoraTemp() End Sub Private Sub CargaEventoBitacoraTemp() GvBitacora.DataSource = DtBitacora GvBitacora.DataBind() UPAddEventoBitacora.Update() UPEventoBitacora.Update() End Sub Private Function GuardaBitacoraTemporal(ObjEventoBitacora As ClsOIEventos, CveMovimiento As Integer) As Boolean Dim Retorno = False Dim Archivo As System.IO.FileInfo = Nothing For Each Dr As DataRow In DtBitacora.Rows If ObjEventoBitacora.AddEventoBitacora(Dr("Descripcion").ToString, Dr("FileExtension").ToString, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveMovimientoAlmacen:=CveMovimiento) Then Try If Dr("Archivo").ToString <> "" Then Archivo = New System.IO.FileInfo(Dr("Archivo").ToString) If Archivo.Exists() Then File.Move(Archivo.ToString, String.Format("{0}OI\OI{1}{2}", UsuarioActual.Empresa.Ruta, ObjEventoBitacora.CveEvento.ToString, Archivo.Extension)) End If End If Catch ex As Exception Retorno = True Alert("Ocurrió un error al guardar los datos adjuntos de la Bitácora.", TipoMensaje.MsgError) Exit For End Try Else Retorno = True Exit For End If Next Return Retorno End Function #End Region #Region " FINANCIAMIENTO - AC " Protected Sub CargaAC() Dim Cont As New ClsContPAQi(UsuarioActual.Empresa) Dim DtAC As DataTable = Nothing If Cont.GetACSaldos(UsuarioActual.Empresa.EjercicioActual, 2) Then DtAC = Cont.DtResultados.Copy.FiltraParametros("PorDevengar > 0") Else Alert("Ocurrió un error al cargar los Presupuestos. Por favor vuelva a cargar la página", TipoMensaje.MsgError) End If Cont.Dispose() GvAC.DataSource = DtAC GvAC.DataBind() Dim Total As Double = GvAC.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("PorDevengar").ToDouble) Lbtotalsaldo.Text = Total.ToString.FormatoNumero UPPM.Update() End Sub Protected Sub GvAC_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvAC.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", String.Format("ValidaImporte(this, {0});", e.Row.DBCampo("PorDevengar"))) e.Row.FCRangeValidator("RVA").MaximumValue = e.Row.DBCampo("PorDevengar").FormatoNumero End If End Sub #End Region #Region " ENVIA CORREO NOTICIACION - VENDEDOR " Private Sub MandaCorreoOCVendedores(CveCompra As Integer, CveMovimiento As Integer) 'SI NO TIENE FUNCIONALIDAD DATOS DE VENTA EN OC If Not UsuarioActual.Empresa.Funcionalidad(108) = "1" Then Exit Sub End If Dim DTCorreos As New DataTable Dim DTMovimientos As New DataTable Dim strBody As New StringBuilder Dim Asunto, Para, ArrayCC, Body As String Dim ObjOC As New ClsOC ObjOC.GetOrdenesCompraCorreo(CveCompra, CveMovimiento:=CveMovimiento) DTCorreos = ObjOC.DtResultados ObjOC.GetOrdenesCompraMovimiento(CveCompra, CveMovimiento:=CveMovimiento) DTMovimientos = ObjOC.DtResultados ObjOC.Dispose() For Each row As DataRow In DTCorreos.Rows strBody.Clear() 'SI DE UNA OC DE LA COMPRA NO SE RECIBIÓ NADA NO MANDA CORREO If DTMovimientos.FiltraParametros($"CveOrdenCompra = {row("CveOrdenCompra")}").Rows.Count = 0 Then Continue For End If strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append("") strBody.Append("

Notificación de recepción de material

") strBody.Append("

") strBody.AppendFormat(" Se confirma recepción de material en almacén {0} vinculado la OC # {1} {2}.", DdlAlmacen.SelectedItem.Text, row("Folio").ToString, If(row("FolioREQ").ToString.Length > 0, $", relacionada a la(s) requisicion(es) # {row("FolioREQ")}", "")) strBody.Append("
") strBody.Append(" Con los siguientes productos:") strBody.Append("

") 'DETALLES strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") For Each RowM As DataRow In DTMovimientos.FiltraParametros($"CveOrdenCompra = {row("CveOrdenCompra")}").Rows strBody.AppendFormat(" ") strBody.AppendFormat(" ", RowM("Cantidad").ToString.FormatoNumero) strBody.AppendFormat(" ", RowM("UnidadMedida")) strBody.AppendFormat(" ", RowM("Codigo")) strBody.AppendFormat(" ", RowM("PS")) strBody.AppendFormat(" ") Next strBody.Append("
CantidadUMCódigoProducto
{0}{0}{0}{0}
") strBody.Append("") strBody.Append("") '' ENVIO DEL CORREO Asunto = "Recepción de Material de OC " Para = row("Correo").ToString ArrayCC = row("CorreoAsistente").ToString Body = strBody.ToString Dim Mail As New ClsSisMail() Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, ArrayCC) Next End Sub #End Region #Region "Imprimir PDF/Excel" Private Sub LnkExportar_Click(sender As Object, e As EventArgs) Handles LnkExportar.Click ImprimiReporte("EXCEL") End Sub Private Sub LnkImprimir_Click(sender As Object, e As EventArgs) Handles LnkImprimir.Click ImprimiReporte() End Sub Protected Sub ImprimiReporte(Optional Formato As String = "PDF") Dim Proveedor As String = ddlProveedor.SelectedText Dim Compra As String = DdlFolio.SelectedItem.Text Dim RutaPDF As String Dim Ruta As String = $"{AppDomain.CurrentDomain.BaseDirectory}Empresas\{UsuarioActual.CveEmpresa}\" RutaPDF = $"{Ruta}\Formatos\EntradaAlmacen.rdlc" If Not File.Exists(RutaPDF) Then RutaPDF = "Empresas/Grales/Formatos/EntradaAlmacen.rdlc" End If Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("pImg", New Uri(Server.MapPath(String.Format("~/Empresas/{0}/Logo.png", UsuarioActual.CveEmpresa))).AbsoluteUri)) params.Add(New ReportParameter("Proveedor", Proveedor)) params.Add(New ReportParameter("Compra", Compra)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) params.Add(New ReportParameter("FechaImpresion", Now.ToDateTime.ToShortDateString)) ImprimirPDF(RutaPDF, dt, params, "Reporte de Entrada Almacén", Formato:=Formato) End Sub #End Region #Region " VIEJO - POR ELIMINAR 22 NOVIEMBRE 2017 " Protected Sub ImgAlmacen_Click(sender As Object, e As ImageClickEventArgs) For i As Integer = 0 To GvInv.Rows.Count - 1 If Not DtInv.Rows(i)("CantidadF").ToString.ToEntero = 0 Then DtInv.Rows(i)("CveAlmacen") = GvInv.HeaderRow.FCDropDownList("ddlPAlmacen").SelectedValue End If Next CargaGVInv() End Sub Private Sub AddDTEnvio(Cantidad As Double, UM As String, CveUM As Integer, CvePS As Integer, PS As String, PU As Double, CveAlmacen As Integer) Dim dr As DataRow = DtInv.NewRow dr("CantidadF") = Cantidad dr("UM") = UM dr("CveUM") = CveUM dr("CvePS") = CvePS dr("PS") = PS dr("PU") = PU dr("CveAlmacen") = CveAlmacen DtInv.Rows.InsertAt(dr, hdnIndexInv.Value.ToEntero + 1) CargaGVInv() End Sub Protected Sub Enviar_Click(sender As Object, e As ImageClickEventArgs) Handles ImgAdd.Click If TbCantidadAlm.Text.ToDouble < DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CantidadF").ToString.ToDouble And TbCantidadAlm.Text.ToDouble > 0 Then DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CantidadF") = DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CantidadF").ToString.ToDouble - TbCantidadAlm.Text.ToDouble AddDTEnvio(TbCantidadAlm.Text.ToDouble, DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("UM").ToString, DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CveUM").ToString.ToEntero, DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CvePS").ToString().ToEntero, DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("PS").ToString, DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("PU").ToString.ToDouble, ddlAlmacenAdd.SelectedValue.ToEntero) Else Alert("El campo cantidad es necesario que sea mayor que 0 y menor a la cantidad faltante.", TipoMensaje.MsgAdvertencia) End If CargaGVInv() TbCantidadAlm.Text = "" ddlAlmacenAdd.SelectedIndex = 0 End Sub #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("CveSeccionAlmacen", GetType(Integer)) DtSeccionAlmacen.Columns.Add("SeccionAlmacen", GetType(String)) DtSeccionAlmacen.Columns.Add("Consec", GetType(Integer)) End Sub Private Sub CargaDdlAlmacen() DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa) DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlSeccionAlmacen.DataBind() End Sub Protected Sub LnkSeccionAlmacen_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) CantidadTotal = gvRow.FCTextBox("TbCantidadF").Text.ToDecimal IndexSeccionAlmacen = gvRow.RowIndex CargaSeccionAlmacen() RegistraScript("$('#DModalSeccionAlmacen').modal()") End Sub Private Sub CargaSeccionAlmacen() Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}").SUMD("CantidadSeccionAlmacen") GvSeccionAlmacen.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}") GvSeccionAlmacen.DataBind() TxtCantidadSeccion.Text = "" DdlSeccionAlmacen.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 CantidadTotalSeccion > 0 Then GvInv.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = False GvInv.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "Cuenta con sección almacen" Else GvInv.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = True GvInv.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "" End If UpModalSeccionAlmacen.Update() UPInv.Update() End Sub Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs) Dim Row As DataRow = Nothing DtSeccionAlmacen.AcceptChanges() Row = DtSeccionAlmacen.NewRow Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal Row("IndexSeccionAlmacen") = IndexSeccionAlmacen Row("CveSeccionAlmacen") = DdlSeccionAlmacen.SelectedValue.ToEntero Row("SeccionAlmacen") = DdlSeccionAlmacen.SelectedItem.Text Row("Consec") = DtSeccionAlmacen.Rows.Count + 1 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 #End Region End Class