diff --git a/Inventarios/RecepcionEntrega.aspx.vb b/Inventarios/RecepcionEntrega.aspx.vb
index 6226a0475..e513daeab 100644
--- a/Inventarios/RecepcionEntrega.aspx.vb
+++ b/Inventarios/RecepcionEntrega.aspx.vb
@@ -1,1317 +1,1317 @@
-Option Strict On
-Option Explicit On
-
-Imports System.Data
-Imports System.IO
-Imports Extensiones
-
-Partial Class Inventarios_RecepcionEntrega
- Inherits ClsPaginas
-
-#Region "PROPIEDADES"
- Private Property CveVentaAD As Integer
- Get
- Return CType(ViewState("CveVentaAD"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveVentaAD") = value
- End Set
- End Property
- Private Property DtDatos As DataTable
- Get
- Return CType(ViewState("DtDatos"), DataTable)
- End Get
- Set(value As DataTable)
- ViewState("DtDatos") = value
- End Set
- End Property
- Private Property DtDatosDetalle As DataTable
- Get
- Return CType(ViewState("DtDatosDetalle"), DataTable)
- End Get
- Set(value As DataTable)
- ViewState("DtDatosDetalle") = value
- End Set
- End Property
- Private Property DtDatosDetalleLote As DataTable
- Get
- Return CType(ViewState("DtDatosDetalleLote"), DataTable)
- End Get
- Set(value As DataTable)
- ViewState("DtDatosDetalleLote") = value
- End Set
- End Property
- Private Property PSSerieLote As String
- Get
- Return CType(ViewState("PSSerieLote"), String)
- End Get
- Set(value As String)
- ViewState("PSSerieLote") = value
- End Set
- End Property
- Private Property CveConsecSerieLote As Integer
- Get
- Return CType(ViewState("CveConsecSerieLote"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveConsecSerieLote") = value
- End Set
- End Property
- Private Property CvePSSerieLote As Integer
- Get
- Return CType(ViewState("CvePSSerieLote"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CvePSSerieLote") = value
- End Set
- End Property
- Private Property CveUMSerieLote As Integer
- Get
- Return CType(ViewState("CveUMSerieLote"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveUMSerieLote") = value
- End Set
- End Property
- Private Property EsInterno As Boolean
- Get
- Return CBool(If(ViewState("EsInterno") Is Nothing, 0, ViewState("EsInterno")))
- End Get
- Set(value As Boolean)
- ViewState("EsInterno") = value
- End Set
- End Property
- Private Property CveMetodoInventarioLote As Integer
- Get
- Return CType(ViewState("CveMetodoInventarioLote"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveMetodoInventarioLote") = value
- End Set
- End Property
- Private Property CveVentaSurtir As Integer
- Get
- Return CType(ViewState("CveVentaSurtir"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveVentaSurtir") = value
- End Set
- End Property
- Private Property TipoEstatus As Integer
- Get
- Return CType(ViewState("TipoEstatus"), Integer)
- End Get
- Set(value As Integer)
- ViewState("TipoEstatus") = value
- End Set
- End Property
- Private Property CveContrato As Integer
- Get
- Return CType(ViewState("CveContrato"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveContrato") = value
- End Set
- End Property
- Private Property CveAlmacenTraspasoOrigen As Integer
- Get
- Return CType(ViewState("CveAlmacenTraspasoOrigen"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveAlmacenTraspasoOrigen") = value
- End Set
- End Property
- Private Property CveAlmacenTraspasoDestino As Integer
- Get
- Return CType(ViewState("CveAlmacenTraspasoDestino"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveAlmacenTraspasoDestino") = value
- End Set
- End Property
- Private Property TipoMovimiento As Integer
- Get
- Return CType(ViewState("TipoMovimiento"), Integer)
- End Get
- Set(value As Integer)
- ViewState("TipoMovimiento") = value
- End Set
- End Property
- Private Property TipoDocto As String
- Get
- Return CType(ViewState("TipoDocto"), String)
- End Get
- Set(value As String)
- ViewState("TipoDocto") = value
- End Set
- End Property
- Private Property DtExistencias As DataTable
- Get
- Return CType(ViewState("DtExistencias"), DataTable)
- End Get
- Set(value As DataTable)
- ViewState("DtExistencias") = value
- End Set
- End Property
- Private Property RowIndexCantidadEspecial As Integer
- Get
- Return CType(ViewState("RowIndexCantidadEspecial"), Integer)
- End Get
- Set(value As Integer)
- ViewState("RowIndexCantidadEspecial") = value
- End Set
- End Property
- Private Property CantidadEspecialTemp As Decimal
- Get
- Return CType(ViewState("CantidadEspecialTemp"), Decimal)
- End Get
- Set(value As Decimal)
- ViewState("CantidadEspecialTemp") = value
- End Set
- End Property
- Private Property EsDevolucionVenta As Integer
- Get
- Return CType(ViewState("EsDevolucionVenta"), Integer)
- End Get
- Set(value As Integer)
- ViewState("EsDevolucionVenta") = value
- End Set
- End Property
- Private Property CveVendedor As Integer
- Get
- Return CType(ViewState("CveVendedor"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveVendedor") = value
- End Set
- End Property
- Private Property CveSubProyecto As Integer
- Get
- Return CType(ViewState("CveSubProyecto"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveSubProyecto") = value
- End Set
- End Property
- Private Property CveCliente As Integer
- Get
- Return CType(ViewState("CveCliente"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveCliente") = value
- End Set
- End Property
- Private Property CveMovimiento As Integer
- Get
- Return CType(ViewState("CveMovimiento"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveMovimiento") = value
- End Set
- End Property
- Private Property CveTraspasoSurtir As Integer
- Get
- Return CType(ViewState("CveTraspasoSurtir"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CveTraspasoSurtir") = value
- End Set
- End Property
- Private Property TipoEntrega As Integer
- Get
- Return CType(ViewState("TipoEntrega"), Integer)
- End Get
- Set(value As Integer)
- ViewState("TipoEntrega") = value
- End Set
- End Property
-
- Private Property DtSeccionAlmacen As DataTable
- Get
- Return CType(ViewState("DtSeccionAlmacen"), DataTable)
- End Get
- Set(value As DataTable)
- ViewState("DtSeccionAlmacen") = value
- End Set
- End Property
- Private Property IndexSeccionAlmacen As Integer
- Get
- Return CType(ViewState("IndexSeccionAlmacen"), Integer)
- End Get
- Set(value As Integer)
- ViewState("IndexSeccionAlmacen") = value
- End Set
- End Property
- Private Property CantidadTotal As Decimal
- Get
- Return CType(ViewState("CantidadTotal"), Decimal)
- End Get
- Set(value As Decimal)
- ViewState("CantidadTotal") = value
- End Set
- End Property
- Private Property CvePS As Integer
- Get
- Return CType(ViewState("CvePS"), Integer)
- End Get
- Set(value As Integer)
- ViewState("CvePS") = value
- End Set
- End Property
-
-#End Region
-
- Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
- If Not IsPostBack Then
-
- InicializaValores()
- CargaParametrosAD()
-
- End If
- End Sub
-
-
-#Region " INICIALIZA VALORES "
- Private Sub InicializaValores()
- TipoEstatus = -1
- CveVendedor = -1
- CveCliente = -1
- CveSubProyecto = -1
- Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2)"
-
- If (UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1") Then
- DdlClientes.setEsWebService(True)
- DdlClientes.Attributes.Add("data-metodo", "getcliente")
- DdlClientes.SelectedText = "Todos"
- DdlClientes.SelectedValue = "-1"
- Else
- DdlClientes.setEsWebService(False)
- DdlClientes.ddl.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa)
- DdlClientes.ddl.DataBind()
- DdlClientes.ddl.Items.Insert(0, New ListItem("Todos", "-1"))
- End If
-
- If UsuarioActual.CveSubProyecto = 8804 Then
- StrAlmacenes = "CveTipoAlmacen IN (1,2,12)"
- End If
-
- 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)
-
- DdlAlmacenTransitorio.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 3)
- DdlAlmacenTransitorio.DataBind()
- DdlAlmacenTransitorio.Items.Insert(0, New ListItem("Seleccione", "-1"))
-
- DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
-
- TxtFechaPendientes.Text = Now.ToShortDateString
- TxtFechaCaducidad.Text = Now.ToShortDateString
- TxtFecha.Text = Now.ToShortDateString
- RVFecha.MaximumValue = MaxFecha.ToShortDateString
- If UsuarioActual.CveEmpresa.Contiene(119) Then RVFecha.MinimumValue = Now.ToShortDateString : CEFecha.StartDate = Now Else RVFecha.MinimumValue = MinFecha.ToShortDateString
-
- If Not UsuarioActual.TienePermisoProceso(190) Then
- 'CARGA SOLO LAS SUCURSALES DE LOS ALMCENES QUE TIENE ASIGNADO EL USUARIO
- Dim ObjInventarios As New ClsInventarios
- If ObjInventarios.GetSucursalesAlmacenUsuario(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
- DdlSubProyectos.DataSource = ObjInventarios.DtResultados
- End If
- ObjInventarios.Dispose()
- Else
- DdlSubProyectos.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa)
- End If
- DdlSubProyectos.DataBind()
- DdlSubProyectos.SelectedValueExist(UsuarioActual.CveSubProyecto.ToString)
-
- If UsuarioActual.TienePermisoProceso(152) Then DdlSubProyectos.Enabled = False
-
- CreaDtDetalle()
- CreaDtDetalleLote()
- CargaPendientes()
-
- CantidadTotal = 0
- IndexSeccionAlmacen = 0
- CvePS = 0
- CreaDtSeccionAlmacen()
- CargaDdlAlmacen()
-
- LnkVerSecciones.Visible = UsuarioActual.Empresa.Funcionalidad(563) = "1"
-
- End Sub
-
-#End Region
-
-
-#Region " CARGA PARAMETROS - EXCLUSIVO USO AD "
- Private Sub CargaParametrosAD()
-
- CveVentaAD = -1
-
- If UsuarioActual.CveUsuario <> 100 Then
- Exit Sub
- End If
-
- If Not IsNothing(Request("CveVenta")) AndAlso IsNumeric(Request("CveVenta")) Then
- CveVentaAD = Request("CveVenta").ToEntero
- CargaVentaPorSurtir(Request("CveVenta").ToEntero)
- LbSurtida.Visible = True
- LbSurtida.Text = "SOLO MODO VISUAL"
- BtnGuardar.Visible = False
- End If
-
- End Sub
-#End Region
-
-#Region " CARGA PENDIENTES POR SURTIR "
- Protected Sub DdlCliente_SelectedIndexChanged(sender As Object, e As EventArgs)
- CargaFolios()
- End Sub
- Private Sub CargaFolios()
- Dim ObjInventarios As New ClsInventarios
-
- DdlFolio.Items.Clear()
-
- If DdlClientes.SelectedValue.ToEntero > 0 Then
- If ObjInventarios.VentasPendientesAlmacenGet(DdlClientes.SelectedValue.ToEntero, MinFecha, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
- DdlFolio.DataSource = ObjInventarios.DtResultados
- Else
- Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
- End If
- End If
-
- ObjInventarios.Dispose()
-
- DdlFolio.DataBind()
- DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
- UpFiltros.Update()
- End Sub
- Protected Sub TimmerRefresh_Tick(sender As Object, e As EventArgs)
- CargaPendientes()
- End Sub
- Protected Sub BtnConsultarPendientes_Click(sender As Object, e As EventArgs)
- CargaPendientes()
- End Sub
- Private Sub CargaPendientes()
- DivTipoCambioAdvertencia.Visible = False
-
- Dim ObjInventarios As New ClsInventarios
- Dim DtPendientes As New DataTable
-
- If ObjInventarios.VentasPendientesAlmacenGet(-1, TxtFechaPendientes.Text.ToDate, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
-
-
- If UsuarioActual.TienePermisoProceso(266) AndAlso UsuarioActual.TienePermisoProceso(267) Then
- DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ped','PDev','DPe','Ant')")
- ElseIf UsuarioActual.TienePermisoProceso(266) AndAlso Not UsuarioActual.TienePermisoProceso(267) Then
- DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ant')")
- ElseIf UsuarioActual.TienePermisoProceso(267) AndAlso Not UsuarioActual.TienePermisoProceso(266) Then
- DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ped','PDev','DPe')")
- Else
- DtPendientes = ObjInventarios.DtResultados
- End If
- Else
- DtPendientes = Nothing
- Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
- End If
-
- If UsuarioActual.Empresa.Funcionalidad(540) = "1" Then
- BtnGuardar.Enabled = False
- Dim FI As Date = Now.AddDays(-1)
- Dim FF As Date = Now.AddDays(-7)
- If ObjInventarios.RepNotasSinAlmacen(1, -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 entrega de mercancía si no se les da salida a los documentos pendientes. Para más información ver el Reporte de notas sin entrada en la sección Ventas.", 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()
- DtPendientes.Dispose()
-
- 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 = If(e.Row.DBCampo("TipoEntrega") = "1", e.Row.DBCampo("CveVenta"), e.Row.DBCampo("CveTraspasoSolicitud"))
-
-
-
- Select Case e.Row.DBCampo("TipoEntrega").ToString.ToEntero
- Case 1
- If UsuarioActual.TienePermisoProceso(201) Then
- Dim Css = "Texto"
- Dim Liga = $"/Ventas/Ventas.aspx?&CveVenta={e.Row.DBCampo("CveVenta")}"
- e.Row.FCLabel("LblFolio").Text = "" + e.Row.FCLabel("LblFolio").Text + ""
- End If
-
- If UsuarioActual.CveEmpresa.Contiene(72, 80) Then
- GVPendientes.Columns(4).Visible = True
- e.Row.FCHyperLink("HplDownPDF").Visible = True
- e.Row.FCHyperLink("HplDownPDF").NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}", e.Row.DBCampo("CveVenta"))))
- End If
-
- If e.Row.DBCampo("TipoDocto").ToString.Contiene({"Rem", "Ing", "Ped", "PeC", "Ant"}) And e.Row.DBCampo("EsDevolucionVenta").ToString.ToEntero = 0 Then
- e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary btn-sm"
- e.Row.FCLinkButton("BtnSurtir").Text = " Surtir "
- Else
- e.Row.FCLinkButton("BtnSurtir").CssClass = "btn yellow-gold btn-sm"
- e.Row.FCLinkButton("BtnSurtir").Text = " Recibir"
- End If
- Case 2
- Dim Css = "Texto"
- Dim Liga = $"/Inventarios/TrasladoSolicitud.aspx?&CveTraspasoSolicitud={e.Row.DBCampo("CveTraspasoSolicitud")}"
- e.Row.FCLabel("LblFolio").Text = "" + e.Row.FCLabel("LblFolio").Text + ""
- e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary btn-sm"
- e.Row.FCLinkButton("BtnSurtir").Text = " Traspasar "
- End Select
- UpPendientes.Update()
- End If
- End Sub
-
-#End Region
-
-
-#Region " CARGA VENTA POR SURTIR "
- Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs)
-
- Dim Boton = CType(sender, LinkButton)
- CveVentaAD = -1
-
- If Boton.CommandArgument.ToEntero > 0 Then
- TimmerRefresh.Enabled = False
-
- DivTransitorio1.Visible = False
- ChkTransitorio.Checked = False
- TxtResponsable.Text = ""
- DivTransitorio2.Visible = False
-
-
- Select Case CType(Boton.NamingContainer, GridViewRow).DataKey("TipoEntrega").ToEntero
- Case 1 ' VENTA
- CargaVentaPorSurtir(CType(sender, LinkButton).CommandArgument.ToEntero)
- Case 2 ' TRASPASO
- DivTransitorio1.Visible = True
- CargaTraspasoPorSurtir(CType(Boton.NamingContainer, GridViewRow).DataKey("CveTraspasoSolicitud").ToEntero)
- End Select
-
- End If
-
- End Sub
- Protected Sub BtnBuscar_Click(sender As Object, e As EventArgs)
- CveVentaAD = -2
- CargaVentaPorSurtir(DdlFolio.SelectedValue.ToEntero)
- End Sub
- Private Sub CargaVentaPorSurtir(CveVenta As Integer)
- LbSurtida.Visible = False
- CveContrato = -1
- CveSubProyecto = -1
- DtDatos = Nothing
- TipoEntrega = 1
- BtnGuardar.Visible = True
-
- Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2)"
-
- If UsuarioActual.CveSubProyecto = 8804 Then
- StrAlmacenes = "CveTipoAlmacen IN (1,2,12)"
- End If
-
- Dim ObjInventario As New ClsInventarios
-
- If ObjInventario.EntregaAlmacenGet(CveVenta) Then
- If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
-
-
- DtDatos = ObjInventario.DtResultados
- DtDatos.Columns.Add("Consec", GetType(Integer))
- DtDatos.Columns.Add("CantidadGV", GetType(Double))
- DtDatos.Columns.Add("CantidadTraspaso", GetType(Double))
- Dim Index = 1
- For Each Dr As DataRow In DtDatos.Rows
- Dr("Consec") = Index
- Index += 1
- Next
-
- DtDatosDetalle = Nothing
- CreaDtDetalle()
-
- DtDatosDetalleLote = Nothing
- CreaDtDetalleLote()
-
- If DtDatos.Rows(0) IsNot Nothing Then
- EsDevolucionVenta = DtDatos.Rows(0)("EsDevolucionVenta").ToString.ToEntero
- TipoDocto = DtDatos.Rows(0)("TipoDocto").ToString
- TipoMovimiento = If(TipoDocto.Contiene({"Rem", "Ing", "Ped", "PeC", "Ant"}) And (EsDevolucionVenta = 0 Or CveVentaAD > 0), 1, 2)
-
- LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString
- 'LbFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString
- HLFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString
- If UsuarioActual.TienePermisoProceso(201) Then
- HLFolio.NavigateUrl = $"/Ventas/Ventas.aspx?CveVenta={CveVenta}"
- End If
-
- LbObservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString
- LbObservacionesAlmacen.Text = DtDatos.Rows(0)("ObservacionesAlmacen").ToString
- CveVentaSurtir = CveVenta
- CveAlmacenTraspasoDestino = DtDatos.Rows(0)(If(EsDevolucionVenta = 1 And TipoDocto <> "Rem", "CveAlmacenTraspasoOrigen", "CveAlmacenTraspasoDestino")).ToString.ToEntero
- CveAlmacenTraspasoOrigen = DtDatos.Rows(0)(If(EsDevolucionVenta = 1 And TipoDocto <> "Rem", "CveAlmacenTraspasoDestino", "CveAlmacenTraspasoOrigen")).ToString.ToEntero
- CveContrato = DtDatos.Rows(0)("CveContrato").ToString.ToEntero
- CveVendedor = DtDatos.Rows(0)("CveVendedor").ToString.ToEntero
- CveCliente = DtDatos.Rows(0)("CveCliente").ToString.ToEntero
- CveSubProyecto = DtDatos.Rows(0)("CveSubProyecto").ToString.ToEntero
- EsInterno = CBool(DtDatos.Rows(0)("EsInterno").ToString)
-
- If DtDatos.SUM("CantidadS") <= 0 Then
- GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna"
- Else
- GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario"
- End If
-
- If CveAlmacenTraspasoDestino > 0 And Not (TipoMovimiento = 2 And TipoDocto = "Rem") Then
- DivTipoCambioAdvertencia.Visible = True
- LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: {GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}"
- Else
- DivTipoCambioAdvertencia.Visible = False
- End If
-
- 'DEVOLUCION REMISION
- If TipoMovimiento = 2 And TipoDocto = "Rem" And Not CveAlmacenTraspasoDestino > 0 Then
- Alert("La remisión que se intenta devolver presenta inconsistencias. Comuniquese con servicio tecnico SIG.", TipoMensaje.MsgError)
- BtnGuardar.Visible = False
- End If
-
- DdlAlmacen.Items.Clear()
- If CveAlmacenTraspasoOrigen > 0 Then 'Not (EsDevolucionVenta = 1 And DtDatos.Rows(0)("TipoDocto").ToString = "Rem" And UsuarioActual.Empresa.Funcionalidad(145) = "1") - ESTO ES PARA CUANDO SEA REMISION DE ENTREGA POR ADELANTADO FUNCIONA LA DEVOLUCION
- DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString))
- Else
- '[IPP] PARCHE - Debe hacerse permiso proceso - 17Enero2018
- Dim RestriccionAlmacenSubProyecto = If(UsuarioActual.CveEmpresa.Contiene(72, 80), $" AND CveSubProyecto = {CveSubProyecto}", "")
- DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros($"{StrAlmacenes} {RestriccionAlmacenSubProyecto}")
- End If
- DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
- DdlAlmacen.SelectedValue = "-1"
- DdlAlmacen.DataBind()
- DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
- If CveAlmacenTraspasoOrigen > 0 Then
- DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen)
- End If
-
- 'TxtFecha.Text = If(EsDevolucionVenta = 1, Now.ToShortDateString, DtDatos.Rows(0)("Fecha").ToString)
- End If
-
- If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
- DivCodigoSeriePS.Visible = True
- Else
- DivCodigoSeriePS.Visible = False
- End If
-
- If TipoMovimiento = 2 Then ' cuando es cancelación
- Dim Filtro As String '= If(ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString.Contiene({"Ing", "Dev", "Ped"}), "CveConcepto = 3", "CveConcepto = 9")
- Select Case ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString
- Case "Ing", "Ped"
- Filtro = "CveConcepto = 3"
- Case "Dev"
- 'cuand es devolucionventa=1, es cancelación de la devolución
- If EsDevolucionVenta = 1 Then Filtro = "CveConcepto = 18" Else Filtro = "CveConcepto = 3"
- Case Else
- Filtro = "CveConcepto = 9"
- End Select
- If ObjInventario.GetInv_Mov(ObjInventario.DtResultados.Rows(0)("CveVentaPadre").ToString.ToEntero, UsuarioActual.CveEmpresa) Then
- DtExistencias = ObjInventario.DtResultados.FiltraParametros($"CvePS Is Not NULL AND {Filtro}")
-
- If Not DtExistencias.Rows.Count > 0 Then
- Alert("La Venta original de la Devolución no tiene salida de Almacén.", TipoMensaje.MsgAdvertencia)
- End If
-
- Else
- Alert("Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar.", TipoMensaje.MsgError)
- End If
- End If
-
- CargaDocumentos(CveVenta)
- Else
- Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- End If
- Else
- DtDatos = Nothing
- End If
-
- ObjInventario.Dispose()
- UpGenerales.Update()
- CargaGvDatos()
- DtSeccionAlmacen.Rows.Clear()
- DtSeccionAlmacen.AcceptChanges()
- End Sub
- Private Sub CargaTraspasoPorSurtir(CveTraspaso As Integer)
- LbSurtida.Visible = False
- CveContrato = -1
- CveSubProyecto = -1
- DtDatos = Nothing
- TipoEntrega = 2
-
- Dim ObjInventario As New ClsInventarios
-
- If ObjInventario.EntregaAlmacenTraspasosGet(CveTraspaso) Then
- If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
- CveTraspasoSurtir = CveTraspaso
- TipoMovimiento = 1
-
- DtDatos = ObjInventario.DtResultados
- DtDatos.Columns.Add("Consec", GetType(Integer))
- DtDatos.Columns.Add("CantidadGV", GetType(Double))
- DtDatos.Columns.Add("CantidadTraspaso", GetType(Double))
-
- LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString
- HLFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString
- If UsuarioActual.TienePermisoProceso(201) Then
- HLFolio.NavigateUrl = $"/Inventarios/TrasladoSolicitud.aspx?CveTraspasoSolicitud={CveTraspasoSurtir}"
- End If
- LbObservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString
-
- Dim Index = 1
- For Each Dr As DataRow In DtDatos.Rows
- Dr("Consec") = Index
- Index += 1
- Next
-
- DtDatosDetalle = Nothing
- CreaDtDetalle()
-
- DtDatosDetalleLote = Nothing
- CreaDtDetalleLote()
-
- CveAlmacenTraspasoDestino = DtDatos.Rows(0)("CveAlmacenDestino").ToString.ToEntero
- CveAlmacenTraspasoOrigen = DtDatos.Rows(0)("CveAlmacenOrigen").ToString.ToEntero
-
- If DtDatos.SUM("CantidadS") <= 0 Then
- GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna"
- Else
- GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario"
- End If
-
- If CveAlmacenTraspasoDestino > 0 Then
- DivTipoCambioAdvertencia.Visible = True
- LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: {GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}"
- Else
- DivTipoCambioAdvertencia.Visible = False
- End If
-
- DdlAlmacen.Items.Clear()
- If CveAlmacenTraspasoOrigen > 0 Then
- DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString))
- End If
-
- DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
- DdlAlmacen.SelectedValue = "-1"
- DdlAlmacen.DataBind()
- DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
- If CveAlmacenTraspasoOrigen > 0 Then
- DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen)
- End If
-
- 'TxtFecha.Text = DtDatos.Rows(0)("Fecha").ToString
-
- If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
- DivCodigoSeriePS.Visible = True
- Else
- DivCodigoSeriePS.Visible = False
- End If
-
- Else
- Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- End If
- Else
- DtDatos = Nothing
- End If
-
- ObjInventario.Dispose()
- UpGenerales.Update()
- CargaGvDatos()
-
- End Sub
- Private Sub CargaGvDatos()
-
- If DtDatos IsNot Nothing Then
- GvDatos.DataSource = DtDatos
- End If
-
- GvDatos.Columns(7).Visible = UsuarioActual.Empresa.Funcionalidad(147) = "1"
-
- GvDatos.Columns(8).Visible = UsuarioActual.Empresa.Funcionalidad(563) = "1"
-
- GvDatos.DataBind()
- UpDatos.Update()
- UpVenta.Update()
-
- 'CARGA LO PRECARGADO CON SERIELOTE
- Dim Contador = 0
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.DataKey("CvePS").ToEntero = CvePSSerieLote Then
- Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
- Gvr.FCCheckBox("cbInv").Enabled = False
- Gvr.FCCheckBox("cbInv").Checked = True
- Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString
- End If
- Next
-
- End Sub
-
- Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatos.RowDataBound
- If e.Row.RowType = DataControlRowType.DataRow Then
-
- If e.Row.DBCampo("Inv_CveMetodoInventario").Contiene("5", "6") Then
- e.Row.FCButton("BtnSerieLote").Visible = True
- e.Row.FCButton("BtnSerieLote").Text = If(e.Row.DBCampo("Inv_CveMetodoInventario").ToString = "5", "SerieLote", "Lote-Batch")
- e.Row.FCButton("BtnSerieLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec"), e.Row.DBCampo("Inv_CveMetodoInventario"))
- e.Row.FCTextBox("TbCantidadF").Enabled = False
- e.Row.FCCheckBox("cbInv").Enabled = False
- Dim Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DBCampo("Consec"))).Rows.Count
- e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString
- 'e.Row.FCTextBox("TbCantidadF").Text = "0"
-
- If TipoDocto = "DPe" Then
- CveConsecSerieLote = e.Row.DBCampo("Consec").ToString.ToEntero
- PSSerieLote = e.Row.DBCampo("PS").ToString
- CvePSSerieLote = e.Row.DBCampo("CvePS").ToEntero
- CveUMSerieLote = e.Row.DBCampo("CveUM").ToEntero
- LbCantidad.Text = e.Row.DBCampo("CantidadF")
- LbCantidad2.Text = e.Row.DBCampo("CantidadF")
- AgregaSerieLote(e.Row.DBCampo("ObservacionesDetalle"), 3)
- End If
-
- Else
- e.Row.FCButton("BtnSerieLote").Visible = False
- e.Row.FCTextBox("TbCantidadF").Enabled = True
- e.Row.FCTextBox("TbCantidadF").Attributes.Add("onblur", String.Format("ValidarCantidad(this, {0})", e.Row.DBCampo("CantidadF")))
- End If
-
-
- 'FUNCIONALIDAD PISTOLA DE CODIGOS
- If UsuarioActual.Empresa.Funcionalidad(132) = "1" And e.Row.DBCampo("CodigoBarras").Trim <> "" Then
- 'NO BLOQUEA PARA ROL AD
- If UsuarioActual.CveRol = 1 Then
- If e.Row.DBCampo("Inv_CveMetodoInventario").Contiene("5", "6") Then
- e.Row.FCTextBox("TbCantidadF").Enabled = False
- Else
- e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero()
- End If
- End If
-
- If Not UsuarioActual.CveRol = 1 Then
- e.Row.FCTextBox("TbCantidadF").Enabled = False
- End If
- End If
-
- If UsuarioActual.Empresa.Funcionalidad(147) = "1" Then
- e.Row.FCLinkButton("LBSeccionAlmacen").CommandArgument = $"{e.Row.DBCampo("CvePS").ToString.ToEntero}|{e.Row.DBCampo("CantidadF").ToString.ToDecimal}|{DdlAlmacen.SelectedValue.ToEntero}"
- End If
-
- 'SI ES TRASPASO OBLIGATORIO SURTIR TODO
- If TipoEntrega = 2 Then
- e.Row.FCCheckBox("cbInv").Enabled = False
- End If
-
- 'If UsuarioActual.Empresa.Funcionalidad(147) = "1" Then
- ' Dim ObjInventarios As New ClsInventarios
- ' If ObjInventarios.SeccionAlmacenRecomendadoSurtidoGet(e.Row.DBCampo("CvePS").ToString.ToEntero, e.Row.DBCampo("CantidadF").ToString.ToDecimal, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) Then
- ' e.Row.FCLabel("LbSeccionAlmacen").Text = ObjInventarios.DtResultados().Rows(0)(0).ToString
- ' End If
- ' ObjInventarios.Dispose()
- 'End If
-
- End If
- End Sub
-
- Private Sub CargaDocumentos(tCveVenta As Integer)
- Dim objInv As New ClsEdocumentacion
-
- If objInv.DocumentacionElectronicaGet(-1, -1, -1, UsuarioActual.CveEmpresa, -1, tCveVenta) Then
- GvDocs.DataSource = objInv.DtResultados.FiltraParametros("Adjunto <> ''")
- End If
- objInv.Dispose()
- GvDocs.DataBind()
- End Sub
- Protected Sub LBSeccionAlmacen_Click(sender As Object, e As EventArgs)
- Dim Argumentos = CType(sender, LinkButton).CommandArgument.Split("|"c)
-
- Dim ObjInventarios As New ClsInventarios
- If ObjInventarios.SeccionAlmacenRecomendadoSurtidoGet(Argumentos(0).ToEntero, Argumentos(1).ToEntero, UsuarioActual.CveEmpresa, Argumentos(2).ToEntero) Then
- GVSeccionAlmacen.DataSource = ObjInventarios.DtResultados
- End If
- ObjInventarios.Dispose()
-
- GVSeccionAlmacen.DataBind()
- UpSeccionAlmacen.Update()
-
- RegistraScript("$('#ModalSeccionAlmacen').modal('show')")
- End Sub
-
-#End Region
-
-
-#Region " AGREGAR "
-
- Protected Sub BtnSerieLote_Click(sender As Object, e As EventArgs)
-
- Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c)
-
- LbProducto.Text = Argumentos(2)
- LbCantidad.Text = Argumentos(3)
-
- LbProducto2.Text = Argumentos(2)
- LbCantidad2.Text = Argumentos(3)
-
- CvePSSerieLote = Argumentos(0).ToEntero
- CveUMSerieLote = Argumentos(1).ToEntero
- PSSerieLote = Argumentos(2).ToString
- CveConsecSerieLote = Argumentos(4).ToEntero
- CveMetodoInventarioLote = Argumentos(5).ToEntero
-
- If CveMetodoInventarioLote = 5 Then
- RegistraScript("$('#DivSerie').modal('show')")
- CargaSerie()
- UpSerie.Update()
- ElseIf CveMetodoInventarioLote = 6 Then
- RegistraScript("$('#DivLote').modal('show')")
- CargaLote()
- UpLoteBatch.Update()
- End If
-
- End Sub
-
-#Region " AGREGA POR SERIE/LOTE "
-
- Private Sub CreaDtDetalle()
- If DtDatosDetalle Is Nothing Then
- DtDatosDetalle = New DataTable
- DtDatosDetalle.Columns.Add("CveVentaDetalle", GetType(Integer))
- DtDatosDetalle.Columns.Add("Consec", GetType(Integer))
- DtDatosDetalle.Columns.Add("ConsecId", GetType(Integer))
- DtDatosDetalle.Columns.Add("CvePS", GetType(Integer))
- DtDatosDetalle.Columns.Add("PS", GetType(String))
- DtDatosDetalle.Columns.Add("CveUM", GetType(Integer))
- DtDatosDetalle.Columns.Add("SerieLote", GetType(String))
- DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(String))
- DtDatosDetalle.Columns.Add("FueTraspaso", GetType(Integer))
- End If
- End Sub
- Private Sub CargaSerie(Optional CerrarCompletado As Boolean = False)
- RegistraScript("$('#DivSerie').modal('show')", "show")
- 'RegistraScript("document.getElementById(""TxtSerieLote"").focus();")
-
- Dim AplicaCaducidad = False
- If GlobalDTPS(UsuarioActual.CveEmpresa, ).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()
-
- 'SERIE LOTE RECOMENDADO
- Dim DtSerieLote As New DataTable
- If TipoMovimiento = 1 Then
- Dim ObjInventarios As New ClsInventarios
- If ObjInventarios.SerieLoteRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, CveSubProyecto:=CveSubProyecto) Then
- DtSerieLote = ObjInventarios.DtResultados
- End If
- ObjInventarios.Dispose()
- Else
- DtSerieLote = DtExistencias.FiltraParametros("SerieLote <> ''")
- End If
- 'SERIE LOTE RECOMENDADO - QUITA YA COMPLETADOS EN EL CLIENTE
- If DtSerieLote.Rows.Count > 0 Then
- 'CALCULA YA COMPLETADOS
- Dim DrsRemove As New List(Of DataRow)
- DtSerieLote.Columns.Add("CantidadSeleccionada", GetType(Integer))
- For Each dr As DataRow In DtSerieLote.Rows
- dr("CantidadSeleccionada") = DtDatosDetalle.FiltraParametros(String.Format("Consec = {0} AND SerieLote = '{1}'", CveConsecSerieLote, dr("SerieLote").ToString.Replace("'", "''"))).Rows.Count
- If dr("CantidadSeleccionada").ToString.ToDecimal = dr("Existencia").ToString.ToDecimal Then
- DrsRemove.Add(dr)
- End If
- Next
-
- 'ELIMINA YA COMPLETADOS EN PAGINA
- For Each dr As DataRow In DrsRemove
- DtSerieLote.Rows.Remove(dr)
- Next
-
- If DtSerieLote.Rows.Count > 0 Then
- Dim Mensaje As New StringBuilder
- Mensaje.AppendFormat("Serie / Lote Recomendado: {0}", DtSerieLote.Rows(0)("SerieLote"))
- If AplicaCaducidad Then Mensaje.AppendFormat(", Caducicdad: {0}", DtSerieLote.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString)
- LbSerieLoteRecomendado.Text = Mensaje.ToString 'String.Format("Serie / Lote Recomendado: {0}, Caducicdad: {1}", ObjInventarios.DtResultados.Rows(0)("SerieLote"), ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString)
- Else
- LbSerieLoteRecomendado.Text = "No se encontro ningun Serie/Lote."
- End If
- Else
- LbSerieLoteRecomendado.Text = "No se encontro ningun Serie/Lote."
- End If
-
- 'SI TIENE SALIDA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
- Dim Contador = 0
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.DataKey("AplicaSerieLote") = "True" Then
- Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
- Gvr.FCCheckBox("cbInv").Enabled = False
- Gvr.FCCheckBox("cbInv").Checked = True
- Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString
- End If
- Next
- UpDatos.Update()
-
- 'VALIDA QUE SIGA AGREGANDO
- If DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote)).Rows.Count = LbCantidad.Text.ToEntero Then
- BtnAgregarPS.Enabled = False
- If CerrarCompletado Then
- RegistraScript("$('#DivSerie').modal('hide')", "hide")
- End If
- UpSerie.Update()
- Exit Sub
- Else
- BtnAgregarPS.Enabled = True
- UpSerie.Update()
- End If
-
- End Sub
-
- Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs)
- If TxtSerieLote.Text.Trim.Length >= 2 AndAlso TxtSerieLote.Text.Trim.StartsWith("*") AndAlso TxtSerieLote.Text.Trim.EndsWith("*") Then
- Dim ArraySeries() As String = Nothing
- Dim Series As String = Nothing
-
- Series = TxtSerieLote.Text.Trim
- Series = Series.Remove(0, 1)
- Series = Series.Remove(Series.Length - 1, 1)
- ArraySeries = Series.Trim.Split(","c)
-
- For i As Integer = 0 To ArraySeries.Length - 1
- If ArraySeries(i).Trim.Length > 1 Then AgregaSerieLote(ArraySeries(i).Trim, 1)
- Next
- Else
- AgregaSerieLote(TxtSerieLote.Text.Trim, 1)
- End If
- End Sub
-
- Private Sub AgregaSerieLote(SerieLote As String, Tipo As Integer)
-
- If SerieLote.Trim = "" Then
- Alert("El campo Serie es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- If DtDatosDetalle.FiltraParametros($"CvePS = {CvePSSerieLote} AND SerieLote = '{SerieLote}'").Rows.Count > 0 Then
- Alert("La SerieLote indicada ya esta registrada. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error1")
- TxtSerieLote.Text = ""
- Exit Sub
- End If
-
- Dim AplicaCaducidad = False
- If GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0) IsNot Nothing Then
- AplicaCaducidad = If(GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0)("AplicaCaducidad").ToString = "True", True, False)
- End If
-
-
- 'Valida Existencia
- If TipoMovimiento = 1 Then
- Dim ObjInventarios As New ClsInventarios
- Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerieLote, CveUMSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=SerieLote, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
- If Existencia < 1 Then
- Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con la SerieLote definida ""{SerieLote}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", ""))
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error2")
- ObjInventarios.Dispose()
- Exit Sub
- End If
- Else
- If DtExistencias IsNot Nothing Then
- Dim Existencia = DtExistencias.SUM("Cantidad", $"CvePS = {CvePSSerieLote} AND CveUM = {CveUMSerieLote} AND SerieLote = '{SerieLote}'")
- If Existencia < 1 Then
- Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con la SerieLote definida ""{SerieLote}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", ""))
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error3")
- Exit Sub
- End If
- End If
- End If
-
-
- Dim Row = DtDatosDetalle.NewRow
-
- Row("ConsecId") = CveConsecSerieLote
- Row("Consec") = DtDatosDetalle.Rows.Count + 1
- Row("PS") = PSSerieLote
- Row("CvePS") = CvePSSerieLote
- Row("CveUM") = CveUMSerieLote
- Row("SerieLote") = SerieLote
- Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidad.Text, MinFecha.ToShortDateString)
-
- DtDatosDetalle.Rows.Add(Row)
- RegistraScript("playsonidito('beep-07.wav')", "Sonidito")
-
- If Tipo = 1 Then
- TxtSerieLote.Text = ""
- TxtFechaCaducidad.Text = Now.ToShortDateString
- End If
-
- If Tipo < 3 Then
- CargaSerie(True)
- 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("SerieLote").ToString
- Try
- For Each dr As DataRow In DtDatosDetalle.Rows
- If dr("SerieLote").ToString = keySerieLote Then
- dr.Delete()
- End If
- Next
- Catch ex As Exception
-
- End Try
-
- DtDatosDetalle.AcceptChanges()
- CargaSerie()
-
- End Sub
-#End Region
-
-#Region " AGREGA CON LOTE BATCH "
-
- Private Sub CreaDtDetalleLote()
- If DtDatosDetalleLote Is Nothing Then
- DtDatosDetalleLote = New DataTable
- DtDatosDetalleLote.Columns.Add("CveVentaDetalle", GetType(Integer))
- DtDatosDetalleLote.Columns.Add("Consec", GetType(Integer))
- DtDatosDetalleLote.Columns.Add("ConsecId", GetType(Integer))
- DtDatosDetalleLote.Columns.Add("Cantidad", GetType(Double))
- DtDatosDetalleLote.Columns.Add("CvePS", GetType(Integer))
- DtDatosDetalleLote.Columns.Add("PS", GetType(String))
- DtDatosDetalleLote.Columns.Add("CveUM", GetType(Integer))
- DtDatosDetalleLote.Columns.Add("Lote", GetType(String))
- DtDatosDetalleLote.Columns.Add("Batch", GetType(String))
- DtDatosDetalleLote.Columns.Add("FechaCaducidad", GetType(String))
- DtDatosDetalleLote.Columns.Add("FueTraspaso", GetType(Integer))
- End If
- End Sub
- Private Sub CargaLote(Optional CerrarCompletado As Boolean = False)
-
- RegistraScript("$('#DivLote').modal('show')")
- GvLote.DataSource = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote), "Consec DESC")
- GvLote.DataBind()
-
- 'VALIDA QUE SIGA AGREGANDO
- If DtDatosDetalleLote.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerieLote)) = LbCantidad2.Text.ToDecimal Then
- BtnLote.Enabled = False
- If CerrarCompletado Then
- RegistraScript("$('#DivLote').modal('hide')", "hide")
- End If
- Else
- BtnLote.Enabled = True
- End If
-
- 'LOTE RECOMENDADO
- Dim DtLotes As New DataTable
- If TipoMovimiento = 1 Then
- Dim ObjInventarios As New ClsInventarios
- If ObjInventarios.LoteBatchRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) Then
- DtLotes = ObjInventarios.DtResultados
- End If
- ObjInventarios.Dispose()
- Else
- DtLotes = DtExistencias.FiltraParametros("Lote <> ''")
- End If
-
- Dim DrsRemove As New List(Of DataRow)
-
- If DtLotes.Rows.Count > 0 Then
- 'CALCULA YA COMPLETADOS
- DtLotes.Columns.Add("CantidadSeleccionada", GetType(Integer))
- For Each dr As DataRow In DtLotes.Rows
- dr("CantidadSeleccionada") = DtDatosDetalleLote.SUM("Cantidad", String.Format("Consec = {0} AND Lote = '{1}' AND Batch = '{2}'", CveConsecSerieLote, dr("Lote"), dr("Batch")))
- If dr("CantidadSeleccionada").ToString.ToDecimal = dr("Existencia").ToString.ToDecimal Then
- DrsRemove.Add(dr)
- End If
- Next
-
- 'ELIMINA YA COMPLETADOS EN PAGINA
- For Each dr As DataRow In DrsRemove
- DtLotes.Rows.Remove(dr)
- Next
-
- If DtLotes.Rows.Count > 0 Then
- Dim Mensaje As New StringBuilder
- Mensaje.AppendFormat("Recomendado: Existencia: {0} Lote: {1} Batch: {2} Fecha Caducidad: {3} ", DtLotes.Rows(0)("Existencia").ToString.FormatoNumero, DtLotes.Rows(0)("Lote"), DtLotes.Rows(0)("Batch"), DtLotes.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString)
- LbLoteRecomendado.Text = Mensaje.ToString
- Else
- LbLoteRecomendado.Text = "No se encontro ningún Lote-Batch recomendato."
- End If
- Else
- LbLoteRecomendado.Text = "No se encontro ningún Lote-Batch recomendato."
- End If
-
-
- 'SI TIENE SALIDA POR LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
- Dim Contador As Decimal = 0
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.DataKey("CvePS").ToEntero = CvePSSerieLote Then
- Contador = DtDatosDetalleLote.SUM("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).ToDecimal
- Gvr.FCCheckBox("cbInv").Enabled = False
- Gvr.FCCheckBox("cbInv").Checked = True
- Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString.FormatoNumero
- End If
- Next
-
- RVCantidadLote.MaximumValue = (If((LbCantidad2.Text.ToDecimal - Contador) = 0, 0.02, LbCantidad2.Text.ToDecimal - Contador)).ToString.FormatoNumero
-
- TxtCantidadLote.Text = "1"
- TxtLote.Text = ""
- TxtBatch.Text = ""
- TxtLote.Focus()
-
- UpLoteBatch.Update()
- UpDatos.Update()
-
- End Sub
-
- Protected Sub BtnAgregarPS2_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 = "" 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 = DtDatosDetalleLote.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 = DtDatosDetalleLote.NewRow
- Dim CantidadLote = TxtCantidadLote.Text.ToDecimal
-
- 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"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), Lote:=Lote, Batch:=Batch, ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
- If Existencia < CantidadLote Then
- Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con el lote definido ""{Lote}"" y el batch ""{Batch}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- ObjInventarios.Dispose()
- Exit Sub
- End If
- Else
- If DtExistencias IsNot Nothing Then
- Dim Existencia = DtExistencias.SUM("Cantidad", $"CvePS = {CvePSSerieLote} AND CveUM = {CveUMSerieLote} AND Lote = '{Lote}' AND Batch = '{Batch}'")
- If Existencia < CantidadLote Then
- Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con el lote definido ""{Lote}"" y el batch ""{Batch}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- ObjInventarios.Dispose()
- Exit Sub
- End If
- End If
- End If
-
- Dim FechaCaducidad = ""
- If ObjInventarios.LoteBatchRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) AndAlso ObjInventarios.DtResultados.Rows.Count > 0 Then
- FechaCaducidad = ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString
- End If
-
- Row("ConsecId") = CveConsecSerieLote
- Row("Consec") = DtDatosDetalle.Rows.Count + 1
- Row("Cantidad") = CantidadLote
- Row("CvePS") = CvePSSerieLote
- Row("PS") = PSSerieLote
- Row("CveUM") = CveUMSerieLote
- Row("Lote") = Lote
- Row("Batch") = Batch
- Row("FechaCaducidad") = FechaCaducidad
-
- DtDatosDetalleLote.Rows.Add(Row)
- ObjInventarios.Dispose()
-
- If Tipo = 1 Then
- TxtCantidadLote.Text = "1"
- TxtLote.Text = ""
- TxtBatch.Text = ""
- End If
-
- CargaLote(True)
-
- End Sub
-
- Protected Sub GvLote_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvLote.RowDeleting
-
- Dim keySerieLote As String = e.Keys("Lote").ToString
- Try
- For Each dr As DataRow In DtDatosDetalleLote.Rows
- If dr("Lote").ToString = keySerieLote Then
- dr.Delete()
- End If
- Next
- Catch ex As Exception
-
- End Try
- DtDatosDetalleLote.AcceptChanges()
- CargaLote()
- End Sub
-#End Region
-
-#Region " AGREGA CON TXT | CODIGO - SERIE "
- Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs)
-
- If TxtCodigoPS.Text = "" Then
- Exit Sub
- End If
-
- TdSeriePS.Visible = False
- Dim Existe = False
- Dim PSTemp = ""
-
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.DataKey("CodigoBarras") = TxtCodigoPS.Text.Trim Then
- Dim TxtCantidad = GvDatos.Rows(Gvr.RowIndex).FCTextBox("TbCantidadF")
- If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then
-
- ''VALIDA EXISTENCIA
+Option Strict On
+Option Explicit On
+
+Imports System.Data
+Imports System.IO
+Imports Extensiones
+
+Partial Class Inventarios_RecepcionEntrega
+ Inherits ClsPaginas
+
+#Region "PROPIEDADES"
+ Private Property CveVentaAD As Integer
+ Get
+ Return CType(ViewState("CveVentaAD"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveVentaAD") = value
+ End Set
+ End Property
+ Private Property DtDatos As DataTable
+ Get
+ Return CType(ViewState("DtDatos"), DataTable)
+ End Get
+ Set(value As DataTable)
+ ViewState("DtDatos") = value
+ End Set
+ End Property
+ Private Property DtDatosDetalle As DataTable
+ Get
+ Return CType(ViewState("DtDatosDetalle"), DataTable)
+ End Get
+ Set(value As DataTable)
+ ViewState("DtDatosDetalle") = value
+ End Set
+ End Property
+ Private Property DtDatosDetalleLote As DataTable
+ Get
+ Return CType(ViewState("DtDatosDetalleLote"), DataTable)
+ End Get
+ Set(value As DataTable)
+ ViewState("DtDatosDetalleLote") = value
+ End Set
+ End Property
+ Private Property PSSerieLote As String
+ Get
+ Return CType(ViewState("PSSerieLote"), String)
+ End Get
+ Set(value As String)
+ ViewState("PSSerieLote") = value
+ End Set
+ End Property
+ Private Property CveConsecSerieLote As Integer
+ Get
+ Return CType(ViewState("CveConsecSerieLote"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveConsecSerieLote") = value
+ End Set
+ End Property
+ Private Property CvePSSerieLote As Integer
+ Get
+ Return CType(ViewState("CvePSSerieLote"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CvePSSerieLote") = value
+ End Set
+ End Property
+ Private Property CveUMSerieLote As Integer
+ Get
+ Return CType(ViewState("CveUMSerieLote"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveUMSerieLote") = value
+ End Set
+ End Property
+ Private Property EsInterno As Boolean
+ Get
+ Return CBool(If(ViewState("EsInterno") Is Nothing, 0, ViewState("EsInterno")))
+ End Get
+ Set(value As Boolean)
+ ViewState("EsInterno") = value
+ End Set
+ End Property
+ Private Property CveMetodoInventarioLote As Integer
+ Get
+ Return CType(ViewState("CveMetodoInventarioLote"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveMetodoInventarioLote") = value
+ End Set
+ End Property
+ Private Property CveVentaSurtir As Integer
+ Get
+ Return CType(ViewState("CveVentaSurtir"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveVentaSurtir") = value
+ End Set
+ End Property
+ Private Property TipoEstatus As Integer
+ Get
+ Return CType(ViewState("TipoEstatus"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("TipoEstatus") = value
+ End Set
+ End Property
+ Private Property CveContrato As Integer
+ Get
+ Return CType(ViewState("CveContrato"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveContrato") = value
+ End Set
+ End Property
+ Private Property CveAlmacenTraspasoOrigen As Integer
+ Get
+ Return CType(ViewState("CveAlmacenTraspasoOrigen"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveAlmacenTraspasoOrigen") = value
+ End Set
+ End Property
+ Private Property CveAlmacenTraspasoDestino As Integer
+ Get
+ Return CType(ViewState("CveAlmacenTraspasoDestino"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveAlmacenTraspasoDestino") = value
+ End Set
+ End Property
+ Private Property TipoMovimiento As Integer
+ Get
+ Return CType(ViewState("TipoMovimiento"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("TipoMovimiento") = value
+ End Set
+ End Property
+ Private Property TipoDocto As String
+ Get
+ Return CType(ViewState("TipoDocto"), String)
+ End Get
+ Set(value As String)
+ ViewState("TipoDocto") = value
+ End Set
+ End Property
+ Private Property DtExistencias As DataTable
+ Get
+ Return CType(ViewState("DtExistencias"), DataTable)
+ End Get
+ Set(value As DataTable)
+ ViewState("DtExistencias") = value
+ End Set
+ End Property
+ Private Property RowIndexCantidadEspecial As Integer
+ Get
+ Return CType(ViewState("RowIndexCantidadEspecial"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("RowIndexCantidadEspecial") = value
+ End Set
+ End Property
+ Private Property CantidadEspecialTemp As Decimal
+ Get
+ Return CType(ViewState("CantidadEspecialTemp"), Decimal)
+ End Get
+ Set(value As Decimal)
+ ViewState("CantidadEspecialTemp") = value
+ End Set
+ End Property
+ Private Property EsDevolucionVenta As Integer
+ Get
+ Return CType(ViewState("EsDevolucionVenta"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("EsDevolucionVenta") = value
+ End Set
+ End Property
+ Private Property CveVendedor As Integer
+ Get
+ Return CType(ViewState("CveVendedor"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveVendedor") = value
+ End Set
+ End Property
+ Private Property CveSubProyecto As Integer
+ Get
+ Return CType(ViewState("CveSubProyecto"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveSubProyecto") = value
+ End Set
+ End Property
+ Private Property CveCliente As Integer
+ Get
+ Return CType(ViewState("CveCliente"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveCliente") = value
+ End Set
+ End Property
+ Private Property CveMovimiento As Integer
+ Get
+ Return CType(ViewState("CveMovimiento"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveMovimiento") = value
+ End Set
+ End Property
+ Private Property CveTraspasoSurtir As Integer
+ Get
+ Return CType(ViewState("CveTraspasoSurtir"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CveTraspasoSurtir") = value
+ End Set
+ End Property
+ Private Property TipoEntrega As Integer
+ Get
+ Return CType(ViewState("TipoEntrega"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("TipoEntrega") = value
+ End Set
+ End Property
+
+ Private Property DtSeccionAlmacen As DataTable
+ Get
+ Return CType(ViewState("DtSeccionAlmacen"), DataTable)
+ End Get
+ Set(value As DataTable)
+ ViewState("DtSeccionAlmacen") = value
+ End Set
+ End Property
+ Private Property IndexSeccionAlmacen As Integer
+ Get
+ Return CType(ViewState("IndexSeccionAlmacen"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("IndexSeccionAlmacen") = value
+ End Set
+ End Property
+ Private Property CantidadTotal As Decimal
+ Get
+ Return CType(ViewState("CantidadTotal"), Decimal)
+ End Get
+ Set(value As Decimal)
+ ViewState("CantidadTotal") = value
+ End Set
+ End Property
+ Private Property CvePS As Integer
+ Get
+ Return CType(ViewState("CvePS"), Integer)
+ End Get
+ Set(value As Integer)
+ ViewState("CvePS") = value
+ End Set
+ End Property
+
+#End Region
+
+ Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
+ If Not IsPostBack Then
+
+ InicializaValores()
+ CargaParametrosAD()
+
+ End If
+ End Sub
+
+
+#Region " INICIALIZA VALORES "
+ Private Sub InicializaValores()
+ TipoEstatus = -1
+ CveVendedor = -1
+ CveCliente = -1
+ CveSubProyecto = -1
+ Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2)"
+
+ If (UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1") Then
+ DdlClientes.setEsWebService(True)
+ DdlClientes.Attributes.Add("data-metodo", "getcliente")
+ DdlClientes.SelectedText = "Todos"
+ DdlClientes.SelectedValue = "-1"
+ Else
+ DdlClientes.setEsWebService(False)
+ DdlClientes.ddl.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa)
+ DdlClientes.ddl.DataBind()
+ DdlClientes.ddl.Items.Insert(0, New ListItem("Todos", "-1"))
+ End If
+
+ If UsuarioActual.CveSubProyecto = 8804 Then
+ StrAlmacenes = "CveTipoAlmacen IN (1,2,12)"
+ End If
+
+ 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)
+
+ DdlAlmacenTransitorio.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 3)
+ DdlAlmacenTransitorio.DataBind()
+ DdlAlmacenTransitorio.Items.Insert(0, New ListItem("Seleccione", "-1"))
+
+ DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
+
+ TxtFechaPendientes.Text = Now.ToShortDateString
+ TxtFechaCaducidad.Text = Now.ToShortDateString
+ TxtFecha.Text = Now.ToShortDateString
+ RVFecha.MaximumValue = MaxFecha.ToShortDateString
+ If UsuarioActual.CveEmpresa.Contiene(119) Then RVFecha.MinimumValue = Now.ToShortDateString : CEFecha.StartDate = Now Else RVFecha.MinimumValue = MinFecha.ToShortDateString
+
+ If Not UsuarioActual.TienePermisoProceso(190) Then
+ 'CARGA SOLO LAS SUCURSALES DE LOS ALMCENES QUE TIENE ASIGNADO EL USUARIO
+ Dim ObjInventarios As New ClsInventarios
+ If ObjInventarios.GetSucursalesAlmacenUsuario(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
+ DdlSubProyectos.DataSource = ObjInventarios.DtResultados
+ End If
+ ObjInventarios.Dispose()
+ Else
+ DdlSubProyectos.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa)
+ End If
+ DdlSubProyectos.DataBind()
+ DdlSubProyectos.SelectedValueExist(UsuarioActual.CveSubProyecto.ToString)
+
+ If UsuarioActual.TienePermisoProceso(152) Then DdlSubProyectos.Enabled = False
+
+ CreaDtDetalle()
+ CreaDtDetalleLote()
+ CargaPendientes()
+
+ CantidadTotal = 0
+ IndexSeccionAlmacen = 0
+ CvePS = 0
+ CreaDtSeccionAlmacen()
+ CargaDdlAlmacen()
+
+ LnkVerSecciones.Visible = UsuarioActual.Empresa.Funcionalidad(563) = "1"
+
+ End Sub
+
+#End Region
+
+
+#Region " CARGA PARAMETROS - EXCLUSIVO USO AD "
+ Private Sub CargaParametrosAD()
+
+ CveVentaAD = -1
+
+ If UsuarioActual.CveUsuario <> 100 Then
+ Exit Sub
+ End If
+
+ If Not IsNothing(Request("CveVenta")) AndAlso IsNumeric(Request("CveVenta")) Then
+ CveVentaAD = Request("CveVenta").ToEntero
+ CargaVentaPorSurtir(Request("CveVenta").ToEntero)
+ LbSurtida.Visible = True
+ LbSurtida.Text = "SOLO MODO VISUAL"
+ BtnGuardar.Visible = False
+ End If
+
+ End Sub
+#End Region
+
+#Region " CARGA PENDIENTES POR SURTIR "
+ Protected Sub DdlCliente_SelectedIndexChanged(sender As Object, e As EventArgs)
+ CargaFolios()
+ End Sub
+ Private Sub CargaFolios()
+ Dim ObjInventarios As New ClsInventarios
+
+ DdlFolio.Items.Clear()
+
+ If DdlClientes.SelectedValue.ToEntero > 0 Then
+ If ObjInventarios.VentasPendientesAlmacenGet(DdlClientes.SelectedValue.ToEntero, MinFecha, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
+ DdlFolio.DataSource = ObjInventarios.DtResultados
+ Else
+ Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
+ End If
+ End If
+
+ ObjInventarios.Dispose()
+
+ DdlFolio.DataBind()
+ DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
+ UpFiltros.Update()
+ End Sub
+ Protected Sub TimmerRefresh_Tick(sender As Object, e As EventArgs)
+ CargaPendientes()
+ End Sub
+ Protected Sub BtnConsultarPendientes_Click(sender As Object, e As EventArgs)
+ CargaPendientes()
+ End Sub
+ Private Sub CargaPendientes()
+ DivTipoCambioAdvertencia.Visible = False
+
+ Dim ObjInventarios As New ClsInventarios
+ Dim DtPendientes As New DataTable
+
+ If ObjInventarios.VentasPendientesAlmacenGet(-1, TxtFechaPendientes.Text.ToDate, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
+
+
+ If UsuarioActual.TienePermisoProceso(266) AndAlso UsuarioActual.TienePermisoProceso(267) Then
+ DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ped','PDev','DPe','Ant')")
+ ElseIf UsuarioActual.TienePermisoProceso(266) AndAlso Not UsuarioActual.TienePermisoProceso(267) Then
+ DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ant')")
+ ElseIf UsuarioActual.TienePermisoProceso(267) AndAlso Not UsuarioActual.TienePermisoProceso(266) Then
+ DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ped','PDev','DPe')")
+ Else
+ DtPendientes = ObjInventarios.DtResultados
+ End If
+ Else
+ DtPendientes = Nothing
+ Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
+ End If
+
+ If UsuarioActual.Empresa.Funcionalidad(540) = "1" Then
+ BtnGuardar.Enabled = False
+ Dim FI As Date = Now.AddDays(-1)
+ Dim FF As Date = Now.AddDays(-7)
+ If ObjInventarios.RepNotasSinAlmacen(1, -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 entrega de mercancía si no se les da salida a los documentos pendientes. Para más información ver el Reporte de notas sin entrada en la sección Ventas.", 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()
+ DtPendientes.Dispose()
+
+ 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 = If(e.Row.DBCampo("TipoEntrega") = "1", e.Row.DBCampo("CveVenta"), e.Row.DBCampo("CveTraspasoSolicitud"))
+
+
+
+ Select Case e.Row.DBCampo("TipoEntrega").ToString.ToEntero
+ Case 1
+ If UsuarioActual.TienePermisoProceso(201) Then
+ Dim Css = "Texto"
+ Dim Liga = $"/Ventas/Ventas.aspx?&CveVenta={e.Row.DBCampo("CveVenta")}"
+ e.Row.FCLabel("LblFolio").Text = "" + e.Row.FCLabel("LblFolio").Text + ""
+ End If
+
+ If UsuarioActual.CveEmpresa.Contiene(72, 80) Then
+ GVPendientes.Columns(4).Visible = True
+ e.Row.FCHyperLink("HplDownPDF").Visible = True
+ e.Row.FCHyperLink("HplDownPDF").NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}", e.Row.DBCampo("CveVenta"))))
+ End If
+
+ If e.Row.DBCampo("TipoDocto").ToString.Contiene({"Rem", "Ing", "Ped", "PeC", "Ant"}) And e.Row.DBCampo("EsDevolucionVenta").ToString.ToEntero = 0 Then
+ e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary btn-sm"
+ e.Row.FCLinkButton("BtnSurtir").Text = " Surtir "
+ Else
+ e.Row.FCLinkButton("BtnSurtir").CssClass = "btn yellow-gold btn-sm"
+ e.Row.FCLinkButton("BtnSurtir").Text = " Recibir"
+ End If
+ Case 2
+ Dim Css = "Texto"
+ Dim Liga = $"/Inventarios/TrasladoSolicitud.aspx?&CveTraspasoSolicitud={e.Row.DBCampo("CveTraspasoSolicitud")}"
+ e.Row.FCLabel("LblFolio").Text = "" + e.Row.FCLabel("LblFolio").Text + ""
+ e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary btn-sm"
+ e.Row.FCLinkButton("BtnSurtir").Text = " Traspasar "
+ End Select
+ UpPendientes.Update()
+ End If
+ End Sub
+
+#End Region
+
+
+#Region " CARGA VENTA POR SURTIR "
+ Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs)
+
+ Dim Boton = CType(sender, LinkButton)
+ CveVentaAD = -1
+
+ If Boton.CommandArgument.ToEntero > 0 Then
+ TimmerRefresh.Enabled = False
+
+ DivTransitorio1.Visible = False
+ ChkTransitorio.Checked = False
+ TxtResponsable.Text = ""
+ DivTransitorio2.Visible = False
+
+
+ Select Case CType(Boton.NamingContainer, GridViewRow).DataKey("TipoEntrega").ToEntero
+ Case 1 ' VENTA
+ CargaVentaPorSurtir(CType(sender, LinkButton).CommandArgument.ToEntero)
+ Case 2 ' TRASPASO
+ DivTransitorio1.Visible = True
+ CargaTraspasoPorSurtir(CType(Boton.NamingContainer, GridViewRow).DataKey("CveTraspasoSolicitud").ToEntero)
+ End Select
+
+ End If
+
+ End Sub
+ Protected Sub BtnBuscar_Click(sender As Object, e As EventArgs)
+ CveVentaAD = -2
+ CargaVentaPorSurtir(DdlFolio.SelectedValue.ToEntero)
+ End Sub
+ Private Sub CargaVentaPorSurtir(CveVenta As Integer)
+ LbSurtida.Visible = False
+ CveContrato = -1
+ CveSubProyecto = -1
+ DtDatos = Nothing
+ TipoEntrega = 1
+ BtnGuardar.Visible = True
+
+ Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2)"
+
+ If UsuarioActual.CveSubProyecto = 8804 Then
+ StrAlmacenes = "CveTipoAlmacen IN (1,2,12)"
+ End If
+
+ Dim ObjInventario As New ClsInventarios
+
+ If ObjInventario.EntregaAlmacenGet(CveVenta) Then
+ If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
+
+
+ DtDatos = ObjInventario.DtResultados
+ DtDatos.Columns.Add("Consec", GetType(Integer))
+ DtDatos.Columns.Add("CantidadGV", GetType(Double))
+ DtDatos.Columns.Add("CantidadTraspaso", GetType(Double))
+ Dim Index = 1
+ For Each Dr As DataRow In DtDatos.Rows
+ Dr("Consec") = Index
+ Index += 1
+ Next
+
+ DtDatosDetalle = Nothing
+ CreaDtDetalle()
+
+ DtDatosDetalleLote = Nothing
+ CreaDtDetalleLote()
+
+ If DtDatos.Rows(0) IsNot Nothing Then
+ EsDevolucionVenta = DtDatos.Rows(0)("EsDevolucionVenta").ToString.ToEntero
+ TipoDocto = DtDatos.Rows(0)("TipoDocto").ToString
+ TipoMovimiento = If(TipoDocto.Contiene({"Rem", "Ing", "Ped", "PeC", "Ant"}) And (EsDevolucionVenta = 0 Or CveVentaAD > 0), 1, 2)
+
+ LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString
+ 'LbFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString
+ HLFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString
+ If UsuarioActual.TienePermisoProceso(201) Then
+ HLFolio.NavigateUrl = $"/Ventas/Ventas.aspx?CveVenta={CveVenta}"
+ End If
+
+ LbObservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString
+ LbObservacionesAlmacen.Text = DtDatos.Rows(0)("ObservacionesAlmacen").ToString
+ CveVentaSurtir = CveVenta
+ CveAlmacenTraspasoDestino = DtDatos.Rows(0)(If(EsDevolucionVenta = 1 And TipoDocto <> "Rem", "CveAlmacenTraspasoOrigen", "CveAlmacenTraspasoDestino")).ToString.ToEntero
+ CveAlmacenTraspasoOrigen = DtDatos.Rows(0)(If(EsDevolucionVenta = 1 And TipoDocto <> "Rem", "CveAlmacenTraspasoDestino", "CveAlmacenTraspasoOrigen")).ToString.ToEntero
+ CveContrato = DtDatos.Rows(0)("CveContrato").ToString.ToEntero
+ CveVendedor = DtDatos.Rows(0)("CveVendedor").ToString.ToEntero
+ CveCliente = DtDatos.Rows(0)("CveCliente").ToString.ToEntero
+ CveSubProyecto = DtDatos.Rows(0)("CveSubProyecto").ToString.ToEntero
+ EsInterno = CBool(DtDatos.Rows(0)("EsInterno").ToString)
+
+ If DtDatos.SUM("CantidadS") <= 0 Then
+ GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna"
+ Else
+ GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario"
+ End If
+
+ If CveAlmacenTraspasoDestino > 0 And Not (TipoMovimiento = 2 And TipoDocto = "Rem") Then
+ DivTipoCambioAdvertencia.Visible = True
+ LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: {GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}"
+ Else
+ DivTipoCambioAdvertencia.Visible = False
+ End If
+
+ 'DEVOLUCION REMISION
+ If TipoMovimiento = 2 And TipoDocto = "Rem" And Not CveAlmacenTraspasoDestino > 0 Then
+ Alert("La remisión que se intenta devolver presenta inconsistencias. Comuniquese con servicio tecnico SIG.", TipoMensaje.MsgError)
+ BtnGuardar.Visible = False
+ End If
+
+ DdlAlmacen.Items.Clear()
+ If CveAlmacenTraspasoOrigen > 0 Then 'Not (EsDevolucionVenta = 1 And DtDatos.Rows(0)("TipoDocto").ToString = "Rem" And UsuarioActual.Empresa.Funcionalidad(145) = "1") - ESTO ES PARA CUANDO SEA REMISION DE ENTREGA POR ADELANTADO FUNCIONA LA DEVOLUCION
+ DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString))
+ Else
+ '[IPP] PARCHE - Debe hacerse permiso proceso - 17Enero2018
+ Dim RestriccionAlmacenSubProyecto = If(UsuarioActual.CveEmpresa.Contiene(72, 80), $" AND CveSubProyecto = {CveSubProyecto}", "")
+ DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros($"{StrAlmacenes} {RestriccionAlmacenSubProyecto}")
+ End If
+ DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
+ DdlAlmacen.SelectedValue = "-1"
+ DdlAlmacen.DataBind()
+ DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
+ If CveAlmacenTraspasoOrigen > 0 Then
+ DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen)
+ End If
+
+ 'TxtFecha.Text = If(EsDevolucionVenta = 1, Now.ToShortDateString, DtDatos.Rows(0)("Fecha").ToString)
+ End If
+
+ If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
+ DivCodigoSeriePS.Visible = True
+ Else
+ DivCodigoSeriePS.Visible = False
+ End If
+
+ If TipoMovimiento = 2 Then ' cuando es cancelación
+ Dim Filtro As String '= If(ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString.Contiene({"Ing", "Dev", "Ped"}), "CveConcepto = 3", "CveConcepto = 9")
+ Select Case ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString
+ Case "Ing", "Ped"
+ Filtro = "CveConcepto = 3"
+ Case "Dev"
+ 'cuand es devolucionventa=1, es cancelación de la devolución
+ If EsDevolucionVenta = 1 Then Filtro = "CveConcepto = 18" Else Filtro = "CveConcepto = 3"
+ Case Else
+ Filtro = "CveConcepto = 9"
+ End Select
+ If ObjInventario.GetInv_Mov(ObjInventario.DtResultados.Rows(0)("CveVentaPadre").ToString.ToEntero, UsuarioActual.CveEmpresa) Then
+ DtExistencias = ObjInventario.DtResultados.FiltraParametros($"CvePS Is Not NULL AND {Filtro}")
+
+ If Not DtExistencias.Rows.Count > 0 Then
+ Alert("La Venta original de la Devolución no tiene salida de Almacén.", TipoMensaje.MsgAdvertencia)
+ End If
+
+ Else
+ Alert("Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar.", TipoMensaje.MsgError)
+ End If
+ End If
+
+ CargaDocumentos(CveVenta)
+ Else
+ Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ End If
+ Else
+ DtDatos = Nothing
+ End If
+
+ ObjInventario.Dispose()
+ UpGenerales.Update()
+ CargaGvDatos()
+ DtSeccionAlmacen.Rows.Clear()
+ DtSeccionAlmacen.AcceptChanges()
+ End Sub
+ Private Sub CargaTraspasoPorSurtir(CveTraspaso As Integer)
+ LbSurtida.Visible = False
+ CveContrato = -1
+ CveSubProyecto = -1
+ DtDatos = Nothing
+ TipoEntrega = 2
+
+ Dim ObjInventario As New ClsInventarios
+
+ If ObjInventario.EntregaAlmacenTraspasosGet(CveTraspaso) Then
+ If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
+ CveTraspasoSurtir = CveTraspaso
+ TipoMovimiento = 1
+
+ DtDatos = ObjInventario.DtResultados
+ DtDatos.Columns.Add("Consec", GetType(Integer))
+ DtDatos.Columns.Add("CantidadGV", GetType(Double))
+ DtDatos.Columns.Add("CantidadTraspaso", GetType(Double))
+
+ LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString
+ HLFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString
+ If UsuarioActual.TienePermisoProceso(201) Then
+ HLFolio.NavigateUrl = $"/Inventarios/TrasladoSolicitud.aspx?CveTraspasoSolicitud={CveTraspasoSurtir}"
+ End If
+ LbObservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString
+
+ Dim Index = 1
+ For Each Dr As DataRow In DtDatos.Rows
+ Dr("Consec") = Index
+ Index += 1
+ Next
+
+ DtDatosDetalle = Nothing
+ CreaDtDetalle()
+
+ DtDatosDetalleLote = Nothing
+ CreaDtDetalleLote()
+
+ CveAlmacenTraspasoDestino = DtDatos.Rows(0)("CveAlmacenDestino").ToString.ToEntero
+ CveAlmacenTraspasoOrigen = DtDatos.Rows(0)("CveAlmacenOrigen").ToString.ToEntero
+
+ If DtDatos.SUM("CantidadS") <= 0 Then
+ GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna"
+ Else
+ GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario"
+ End If
+
+ If CveAlmacenTraspasoDestino > 0 Then
+ DivTipoCambioAdvertencia.Visible = True
+ LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: {GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}"
+ Else
+ DivTipoCambioAdvertencia.Visible = False
+ End If
+
+ DdlAlmacen.Items.Clear()
+ If CveAlmacenTraspasoOrigen > 0 Then
+ DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString))
+ End If
+
+ DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
+ DdlAlmacen.SelectedValue = "-1"
+ DdlAlmacen.DataBind()
+ DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
+ If CveAlmacenTraspasoOrigen > 0 Then
+ DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen)
+ End If
+
+ 'TxtFecha.Text = DtDatos.Rows(0)("Fecha").ToString
+
+ If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
+ DivCodigoSeriePS.Visible = True
+ Else
+ DivCodigoSeriePS.Visible = False
+ End If
+
+ Else
+ Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ End If
+ Else
+ DtDatos = Nothing
+ End If
+
+ ObjInventario.Dispose()
+ UpGenerales.Update()
+ CargaGvDatos()
+
+ End Sub
+ Private Sub CargaGvDatos()
+
+ If DtDatos IsNot Nothing Then
+ GvDatos.DataSource = DtDatos
+ End If
+
+ GvDatos.Columns(7).Visible = UsuarioActual.Empresa.Funcionalidad(147) = "1"
+
+ GvDatos.Columns(8).Visible = UsuarioActual.Empresa.Funcionalidad(563) = "1"
+
+ GvDatos.DataBind()
+ UpDatos.Update()
+ UpVenta.Update()
+
+ 'CARGA LO PRECARGADO CON SERIELOTE
+ Dim Contador = 0
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.DataKey("CvePS").ToEntero = CvePSSerieLote Then
+ Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
+ Gvr.FCCheckBox("cbInv").Enabled = False
+ Gvr.FCCheckBox("cbInv").Checked = True
+ Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString
+ End If
+ Next
+
+ End Sub
+
+ Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatos.RowDataBound
+ If e.Row.RowType = DataControlRowType.DataRow Then
+
+ If e.Row.DBCampo("Inv_CveMetodoInventario").Contiene("5", "6") Then
+ e.Row.FCButton("BtnSerieLote").Visible = True
+ e.Row.FCButton("BtnSerieLote").Text = If(e.Row.DBCampo("Inv_CveMetodoInventario").ToString = "5", "SerieLote", "Lote-Batch")
+ e.Row.FCButton("BtnSerieLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec"), e.Row.DBCampo("Inv_CveMetodoInventario"))
+ e.Row.FCTextBox("TbCantidadF").Enabled = False
+ e.Row.FCCheckBox("cbInv").Enabled = False
+ Dim Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DBCampo("Consec"))).Rows.Count
+ e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString
+ 'e.Row.FCTextBox("TbCantidadF").Text = "0"
+
+ If TipoDocto = "DPe" Then
+ CveConsecSerieLote = e.Row.DBCampo("Consec").ToString.ToEntero
+ PSSerieLote = e.Row.DBCampo("PS").ToString
+ CvePSSerieLote = e.Row.DBCampo("CvePS").ToEntero
+ CveUMSerieLote = e.Row.DBCampo("CveUM").ToEntero
+ LbCantidad.Text = e.Row.DBCampo("CantidadF")
+ LbCantidad2.Text = e.Row.DBCampo("CantidadF")
+ AgregaSerieLote(e.Row.DBCampo("ObservacionesDetalle"), 3)
+ End If
+
+ Else
+ e.Row.FCButton("BtnSerieLote").Visible = False
+ e.Row.FCTextBox("TbCantidadF").Enabled = True
+ e.Row.FCTextBox("TbCantidadF").Attributes.Add("onblur", String.Format("ValidarCantidad(this, {0})", e.Row.DBCampo("CantidadF")))
+ End If
+
+
+ 'FUNCIONALIDAD PISTOLA DE CODIGOS
+ If UsuarioActual.Empresa.Funcionalidad(132) = "1" And e.Row.DBCampo("CodigoBarras").Trim <> "" Then
+ 'NO BLOQUEA PARA ROL AD
+ If UsuarioActual.CveRol = 1 Then
+ If e.Row.DBCampo("Inv_CveMetodoInventario").Contiene("5", "6") Then
+ e.Row.FCTextBox("TbCantidadF").Enabled = False
+ Else
+ e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero()
+ End If
+ End If
+
+ If Not UsuarioActual.CveRol = 1 Then
+ e.Row.FCTextBox("TbCantidadF").Enabled = False
+ End If
+ End If
+
+ If UsuarioActual.Empresa.Funcionalidad(147) = "1" Then
+ e.Row.FCLinkButton("LBSeccionAlmacen").CommandArgument = $"{e.Row.DBCampo("CvePS").ToString.ToEntero}|{e.Row.DBCampo("CantidadF").ToString.ToDecimal}|{DdlAlmacen.SelectedValue.ToEntero}"
+ End If
+
+ 'SI ES TRASPASO OBLIGATORIO SURTIR TODO
+ If TipoEntrega = 2 Then
+ e.Row.FCCheckBox("cbInv").Enabled = False
+ End If
+
+ 'If UsuarioActual.Empresa.Funcionalidad(147) = "1" Then
+ ' Dim ObjInventarios As New ClsInventarios
+ ' If ObjInventarios.SeccionAlmacenRecomendadoSurtidoGet(e.Row.DBCampo("CvePS").ToString.ToEntero, e.Row.DBCampo("CantidadF").ToString.ToDecimal, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) Then
+ ' e.Row.FCLabel("LbSeccionAlmacen").Text = ObjInventarios.DtResultados().Rows(0)(0).ToString
+ ' End If
+ ' ObjInventarios.Dispose()
+ 'End If
+
+ End If
+ End Sub
+
+ Private Sub CargaDocumentos(tCveVenta As Integer)
+ Dim objInv As New ClsEdocumentacion
+
+ If objInv.DocumentacionElectronicaGet(-1, -1, -1, UsuarioActual.CveEmpresa, -1, tCveVenta) Then
+ GvDocs.DataSource = objInv.DtResultados.FiltraParametros("Adjunto <> ''")
+ End If
+ objInv.Dispose()
+ GvDocs.DataBind()
+ End Sub
+ Protected Sub LBSeccionAlmacen_Click(sender As Object, e As EventArgs)
+ Dim Argumentos = CType(sender, LinkButton).CommandArgument.Split("|"c)
+
+ Dim ObjInventarios As New ClsInventarios
+ If ObjInventarios.SeccionAlmacenRecomendadoSurtidoGet(Argumentos(0).ToEntero, Argumentos(1).ToEntero, UsuarioActual.CveEmpresa, Argumentos(2).ToEntero) Then
+ GVSeccionAlmacen.DataSource = ObjInventarios.DtResultados
+ End If
+ ObjInventarios.Dispose()
+
+ GVSeccionAlmacen.DataBind()
+ UpSeccionAlmacen.Update()
+
+ RegistraScript("$('#ModalSeccionAlmacen').modal('show')")
+ End Sub
+
+#End Region
+
+
+#Region " AGREGAR "
+
+ Protected Sub BtnSerieLote_Click(sender As Object, e As EventArgs)
+
+ Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c)
+
+ LbProducto.Text = Argumentos(2)
+ LbCantidad.Text = Argumentos(3)
+
+ LbProducto2.Text = Argumentos(2)
+ LbCantidad2.Text = Argumentos(3)
+
+ CvePSSerieLote = Argumentos(0).ToEntero
+ CveUMSerieLote = Argumentos(1).ToEntero
+ PSSerieLote = Argumentos(2).ToString
+ CveConsecSerieLote = Argumentos(4).ToEntero
+ CveMetodoInventarioLote = Argumentos(5).ToEntero
+
+ If CveMetodoInventarioLote = 5 Then
+ RegistraScript("$('#DivSerie').modal('show')")
+ CargaSerie()
+ UpSerie.Update()
+ ElseIf CveMetodoInventarioLote = 6 Then
+ RegistraScript("$('#DivLote').modal('show')")
+ CargaLote()
+ UpLoteBatch.Update()
+ End If
+
+ End Sub
+
+#Region " AGREGA POR SERIE/LOTE "
+
+ Private Sub CreaDtDetalle()
+ If DtDatosDetalle Is Nothing Then
+ DtDatosDetalle = New DataTable
+ DtDatosDetalle.Columns.Add("CveVentaDetalle", GetType(Integer))
+ DtDatosDetalle.Columns.Add("Consec", GetType(Integer))
+ DtDatosDetalle.Columns.Add("ConsecId", GetType(Integer))
+ DtDatosDetalle.Columns.Add("CvePS", GetType(Integer))
+ DtDatosDetalle.Columns.Add("PS", GetType(String))
+ DtDatosDetalle.Columns.Add("CveUM", GetType(Integer))
+ DtDatosDetalle.Columns.Add("SerieLote", GetType(String))
+ DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(String))
+ DtDatosDetalle.Columns.Add("FueTraspaso", GetType(Integer))
+ End If
+ End Sub
+ Private Sub CargaSerie(Optional CerrarCompletado As Boolean = False)
+ RegistraScript("$('#DivSerie').modal('show')", "show")
+ 'RegistraScript("document.getElementById(""TxtSerieLote"").focus();")
+
+ Dim AplicaCaducidad = False
+ If GlobalDTPS(UsuarioActual.CveEmpresa, ).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()
+
+ 'SERIE LOTE RECOMENDADO
+ Dim DtSerieLote As New DataTable
+ If TipoMovimiento = 1 Then
+ Dim ObjInventarios As New ClsInventarios
+ If ObjInventarios.SerieLoteRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, CveSubProyecto:=CveSubProyecto) Then
+ DtSerieLote = ObjInventarios.DtResultados
+ End If
+ ObjInventarios.Dispose()
+ Else
+ DtSerieLote = DtExistencias.FiltraParametros("SerieLote <> ''")
+ End If
+ 'SERIE LOTE RECOMENDADO - QUITA YA COMPLETADOS EN EL CLIENTE
+ If DtSerieLote.Rows.Count > 0 Then
+ 'CALCULA YA COMPLETADOS
+ Dim DrsRemove As New List(Of DataRow)
+ DtSerieLote.Columns.Add("CantidadSeleccionada", GetType(Integer))
+ For Each dr As DataRow In DtSerieLote.Rows
+ dr("CantidadSeleccionada") = DtDatosDetalle.FiltraParametros(String.Format("Consec = {0} AND SerieLote = '{1}'", CveConsecSerieLote, dr("SerieLote").ToString.Replace("'", "''"))).Rows.Count
+ If dr("CantidadSeleccionada").ToString.ToDecimal = dr("Existencia").ToString.ToDecimal Then
+ DrsRemove.Add(dr)
+ End If
+ Next
+
+ 'ELIMINA YA COMPLETADOS EN PAGINA
+ For Each dr As DataRow In DrsRemove
+ DtSerieLote.Rows.Remove(dr)
+ Next
+
+ If DtSerieLote.Rows.Count > 0 Then
+ Dim Mensaje As New StringBuilder
+ Mensaje.AppendFormat("Serie / Lote Recomendado: {0}", DtSerieLote.Rows(0)("SerieLote"))
+ If AplicaCaducidad Then Mensaje.AppendFormat(", Caducicdad: {0}", DtSerieLote.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString)
+ LbSerieLoteRecomendado.Text = Mensaje.ToString 'String.Format("Serie / Lote Recomendado: {0}, Caducicdad: {1}", ObjInventarios.DtResultados.Rows(0)("SerieLote"), ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString)
+ Else
+ LbSerieLoteRecomendado.Text = "No se encontro ningun Serie/Lote."
+ End If
+ Else
+ LbSerieLoteRecomendado.Text = "No se encontro ningun Serie/Lote."
+ End If
+
+ 'SI TIENE SALIDA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
+ Dim Contador = 0
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.DataKey("AplicaSerieLote") = "True" Then
+ Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
+ Gvr.FCCheckBox("cbInv").Enabled = False
+ Gvr.FCCheckBox("cbInv").Checked = True
+ Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString
+ End If
+ Next
+ UpDatos.Update()
+
+ 'VALIDA QUE SIGA AGREGANDO
+ If DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote)).Rows.Count = LbCantidad.Text.ToEntero Then
+ BtnAgregarPS.Enabled = False
+ If CerrarCompletado Then
+ RegistraScript("$('#DivSerie').modal('hide')", "hide")
+ End If
+ UpSerie.Update()
+ Exit Sub
+ Else
+ BtnAgregarPS.Enabled = True
+ UpSerie.Update()
+ End If
+
+ End Sub
+
+ Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs)
+ If TxtSerieLote.Text.Trim.Length >= 2 AndAlso TxtSerieLote.Text.Trim.StartsWith("*") AndAlso TxtSerieLote.Text.Trim.EndsWith("*") Then
+ Dim ArraySeries() As String = Nothing
+ Dim Series As String = Nothing
+
+ Series = TxtSerieLote.Text.Trim
+ Series = Series.Remove(0, 1)
+ Series = Series.Remove(Series.Length - 1, 1)
+ ArraySeries = Series.Trim.Split(","c)
+
+ For i As Integer = 0 To ArraySeries.Length - 1
+ If ArraySeries(i).Trim.Length > 1 Then AgregaSerieLote(ArraySeries(i).Trim, 1)
+ Next
+ Else
+ AgregaSerieLote(TxtSerieLote.Text.Trim, 1)
+ End If
+ End Sub
+
+ Private Sub AgregaSerieLote(SerieLote As String, Tipo As Integer)
+
+ If SerieLote.Trim = "" Then
+ Alert("El campo Serie es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ If DtDatosDetalle.FiltraParametros($"CvePS = {CvePSSerieLote} AND SerieLote = '{SerieLote}'").Rows.Count > 0 Then
+ Alert("La SerieLote indicada ya esta registrada. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error1")
+ TxtSerieLote.Text = ""
+ Exit Sub
+ End If
+
+ Dim AplicaCaducidad = False
+ If GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0) IsNot Nothing Then
+ AplicaCaducidad = If(GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerieLote).FiltraParametros("").Rows(0)("AplicaCaducidad").ToString = "True", True, False)
+ End If
+
+
+ 'Valida Existencia
+ If TipoMovimiento = 1 Then
+ Dim ObjInventarios As New ClsInventarios
+ Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerieLote, CveUMSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=SerieLote, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
+ If Existencia < 1 Then
+ Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con la SerieLote definida ""{SerieLote}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", ""))
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error2")
+ ObjInventarios.Dispose()
+ Exit Sub
+ End If
+ Else
+ If DtExistencias IsNot Nothing Then
+ Dim Existencia = DtExistencias.SUM("Cantidad", $"CvePS = {CvePSSerieLote} AND CveUM = {CveUMSerieLote} AND SerieLote = '{SerieLote}'")
+ If Existencia < 1 Then
+ Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con la SerieLote definida ""{SerieLote}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", ""))
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error3")
+ Exit Sub
+ End If
+ End If
+ End If
+
+
+ Dim Row = DtDatosDetalle.NewRow
+
+ Row("ConsecId") = CveConsecSerieLote
+ Row("Consec") = DtDatosDetalle.Rows.Count + 1
+ Row("PS") = PSSerieLote
+ Row("CvePS") = CvePSSerieLote
+ Row("CveUM") = CveUMSerieLote
+ Row("SerieLote") = SerieLote
+ Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidad.Text, MinFecha.ToShortDateString)
+
+ DtDatosDetalle.Rows.Add(Row)
+ RegistraScript("playsonidito('beep-07.wav')", "Sonidito")
+
+ If Tipo = 1 Then
+ TxtSerieLote.Text = ""
+ TxtFechaCaducidad.Text = Now.ToShortDateString
+ End If
+
+ If Tipo < 3 Then
+ CargaSerie(True)
+ 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("SerieLote").ToString
+ Try
+ For Each dr As DataRow In DtDatosDetalle.Rows
+ If dr("SerieLote").ToString = keySerieLote Then
+ dr.Delete()
+ End If
+ Next
+ Catch ex As Exception
+
+ End Try
+
+ DtDatosDetalle.AcceptChanges()
+ CargaSerie()
+
+ End Sub
+#End Region
+
+#Region " AGREGA CON LOTE BATCH "
+
+ Private Sub CreaDtDetalleLote()
+ If DtDatosDetalleLote Is Nothing Then
+ DtDatosDetalleLote = New DataTable
+ DtDatosDetalleLote.Columns.Add("CveVentaDetalle", GetType(Integer))
+ DtDatosDetalleLote.Columns.Add("Consec", GetType(Integer))
+ DtDatosDetalleLote.Columns.Add("ConsecId", GetType(Integer))
+ DtDatosDetalleLote.Columns.Add("Cantidad", GetType(Double))
+ DtDatosDetalleLote.Columns.Add("CvePS", GetType(Integer))
+ DtDatosDetalleLote.Columns.Add("PS", GetType(String))
+ DtDatosDetalleLote.Columns.Add("CveUM", GetType(Integer))
+ DtDatosDetalleLote.Columns.Add("Lote", GetType(String))
+ DtDatosDetalleLote.Columns.Add("Batch", GetType(String))
+ DtDatosDetalleLote.Columns.Add("FechaCaducidad", GetType(String))
+ DtDatosDetalleLote.Columns.Add("FueTraspaso", GetType(Integer))
+ End If
+ End Sub
+ Private Sub CargaLote(Optional CerrarCompletado As Boolean = False)
+
+ RegistraScript("$('#DivLote').modal('show')")
+ GvLote.DataSource = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerieLote), "Consec DESC")
+ GvLote.DataBind()
+
+ 'VALIDA QUE SIGA AGREGANDO
+ If DtDatosDetalleLote.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerieLote)) = LbCantidad2.Text.ToDecimal Then
+ BtnLote.Enabled = False
+ If CerrarCompletado Then
+ RegistraScript("$('#DivLote').modal('hide')", "hide")
+ End If
+ Else
+ BtnLote.Enabled = True
+ End If
+
+ 'LOTE RECOMENDADO
+ Dim DtLotes As New DataTable
+ If TipoMovimiento = 1 Then
+ Dim ObjInventarios As New ClsInventarios
+ If ObjInventarios.LoteBatchRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) Then
+ DtLotes = ObjInventarios.DtResultados
+ End If
+ ObjInventarios.Dispose()
+ Else
+ DtLotes = DtExistencias.FiltraParametros("Lote <> ''")
+ End If
+
+ Dim DrsRemove As New List(Of DataRow)
+
+ If DtLotes.Rows.Count > 0 Then
+ 'CALCULA YA COMPLETADOS
+ DtLotes.Columns.Add("CantidadSeleccionada", GetType(Integer))
+ For Each dr As DataRow In DtLotes.Rows
+ dr("CantidadSeleccionada") = DtDatosDetalleLote.SUM("Cantidad", String.Format("Consec = {0} AND Lote = '{1}' AND Batch = '{2}'", CveConsecSerieLote, dr("Lote"), dr("Batch")))
+ If dr("CantidadSeleccionada").ToString.ToDecimal = dr("Existencia").ToString.ToDecimal Then
+ DrsRemove.Add(dr)
+ End If
+ Next
+
+ 'ELIMINA YA COMPLETADOS EN PAGINA
+ For Each dr As DataRow In DrsRemove
+ DtLotes.Rows.Remove(dr)
+ Next
+
+ If DtLotes.Rows.Count > 0 Then
+ Dim Mensaje As New StringBuilder
+ Mensaje.AppendFormat("Recomendado: Existencia: {0} Lote: {1} Batch: {2} Fecha Caducidad: {3} ", DtLotes.Rows(0)("Existencia").ToString.FormatoNumero, DtLotes.Rows(0)("Lote"), DtLotes.Rows(0)("Batch"), DtLotes.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString)
+ LbLoteRecomendado.Text = Mensaje.ToString
+ Else
+ LbLoteRecomendado.Text = "No se encontro ningún Lote-Batch recomendato."
+ End If
+ Else
+ LbLoteRecomendado.Text = "No se encontro ningún Lote-Batch recomendato."
+ End If
+
+
+ 'SI TIENE SALIDA POR LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
+ Dim Contador As Decimal = 0
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.DataKey("CvePS").ToEntero = CvePSSerieLote Then
+ Contador = DtDatosDetalleLote.SUM("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).ToDecimal
+ Gvr.FCCheckBox("cbInv").Enabled = False
+ Gvr.FCCheckBox("cbInv").Checked = True
+ Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString.FormatoNumero
+ End If
+ Next
+
+ RVCantidadLote.MaximumValue = (If((LbCantidad2.Text.ToDecimal - Contador) = 0, 0.02, LbCantidad2.Text.ToDecimal - Contador)).ToString.FormatoNumero
+
+ TxtCantidadLote.Text = "1"
+ TxtLote.Text = ""
+ TxtBatch.Text = ""
+ TxtLote.Focus()
+
+ UpLoteBatch.Update()
+ UpDatos.Update()
+
+ End Sub
+
+ Protected Sub BtnAgregarPS2_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 = "" 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 = DtDatosDetalleLote.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 = DtDatosDetalleLote.NewRow
+ Dim CantidadLote = TxtCantidadLote.Text.ToDecimal
+
+ 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"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), Lote:=Lote, Batch:=Batch, ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
+ If Existencia < CantidadLote Then
+ Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con el lote definido ""{Lote}"" y el batch ""{Batch}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ ObjInventarios.Dispose()
+ Exit Sub
+ End If
+ Else
+ If DtExistencias IsNot Nothing Then
+ Dim Existencia = DtExistencias.SUM("Cantidad", $"CvePS = {CvePSSerieLote} AND CveUM = {CveUMSerieLote} AND Lote = '{Lote}' AND Batch = '{Batch}'")
+ If Existencia < CantidadLote Then
+ Alert($"No hay existencia suficiente del producto ""{PSSerieLote}"" con el lote definido ""{Lote}"" y el batch ""{Batch}"". Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ ObjInventarios.Dispose()
+ Exit Sub
+ End If
+ End If
+ End If
+
+ Dim FechaCaducidad = ""
+ If ObjInventarios.LoteBatchRecomendadoGet(CvePSSerieLote, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) AndAlso ObjInventarios.DtResultados.Rows.Count > 0 Then
+ FechaCaducidad = ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString.ToDate.ToShortDateString
+ End If
+
+ Row("ConsecId") = CveConsecSerieLote
+ Row("Consec") = DtDatosDetalle.Rows.Count + 1
+ Row("Cantidad") = CantidadLote
+ Row("CvePS") = CvePSSerieLote
+ Row("PS") = PSSerieLote
+ Row("CveUM") = CveUMSerieLote
+ Row("Lote") = Lote
+ Row("Batch") = Batch
+ Row("FechaCaducidad") = FechaCaducidad
+
+ DtDatosDetalleLote.Rows.Add(Row)
+ ObjInventarios.Dispose()
+
+ If Tipo = 1 Then
+ TxtCantidadLote.Text = "1"
+ TxtLote.Text = ""
+ TxtBatch.Text = ""
+ End If
+
+ CargaLote(True)
+
+ End Sub
+
+ Protected Sub GvLote_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvLote.RowDeleting
+
+ Dim keySerieLote As String = e.Keys("Lote").ToString
+ Try
+ For Each dr As DataRow In DtDatosDetalleLote.Rows
+ If dr("Lote").ToString = keySerieLote Then
+ dr.Delete()
+ End If
+ Next
+ Catch ex As Exception
+
+ End Try
+ DtDatosDetalleLote.AcceptChanges()
+ CargaLote()
+ End Sub
+#End Region
+
+#Region " AGREGA CON TXT | CODIGO - SERIE "
+ Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs)
+
+ If TxtCodigoPS.Text = "" Then
+ Exit Sub
+ End If
+
+ TdSeriePS.Visible = False
+ Dim Existe = False
+ Dim PSTemp = ""
+
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.DataKey("CodigoBarras") = TxtCodigoPS.Text.Trim Then
+ Dim TxtCantidad = GvDatos.Rows(Gvr.RowIndex).FCTextBox("TbCantidadF")
+ If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then
+
+ ''VALIDA EXISTENCIA
If Not TipoDocto.Contiene("Dev") Then
If TipoMovimiento = 1 Then
Dim ObjInventario As New ClsInventarios
@@ -1334,1483 +1334,1493 @@ Partial Class Inventarios_RecepcionEntrega
End If
End If
End If
- End If
-
-
- If Gvr.DataKey("AplicaSerieLote") = "True" Then
- TdSeriePS.Visible = True
- TxtSeriePS.Focus()
-
- CveConsecSerieLote = Gvr.DataKey("Consec").ToString.ToEntero
- PSSerieLote = Gvr.DataKey("PS").ToString
- CvePSSerieLote = Gvr.DataKey("CvePS").ToEntero
- CveUMSerieLote = Gvr.DataKey("CveUM").ToEntero
- Exit Sub
- End If
-
-
- Dim CantidadEspecial = 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
- TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + 1).ToString.FormatoNumero
- TxtCodigoPS.Text = ""
- UpDatos.Update()
- Exit Sub
- End If
-
- VerificaVentaSurtida()
- Exit Sub
- End If
-
- Existe = True
- PSTemp = Gvr.DataKey("PS").ToString
- 'Alert($"Ya se ha cargado la totalidad del Producto ""{Gvr.DataKey("PS").ToString}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
- 'VerificaVentaSurtida()
- 'Exit Sub
- End If
- Next
-
- VerificaVentaSurtida()
- If Existe Then
- Alert($"Ya se ha cargado la totalidad del Producto ""{PSTemp}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
- Else
- Alert($"No se ha encontrado un producto para surtir con el Codigo ""{TxtCodigoPS.Text}"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
- End If
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- TxtCodigoPS.Text = ""
-
- End Sub
- Private Sub VerificaVentaSurtida()
- Dim Surtida = True
-
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then
- Surtida = False
- Exit Sub
- End If
- Next
-
- If Surtida Then
- LbSurtida.Visible = True
- End If
- End Sub
- Protected Sub BtnSeriePS_Click(sender As Object, e As EventArgs)
- AgregaSerieLote(TxtSeriePS.Text.Trim, 2)
-
- TdSeriePS.Visible = False
- TxtSeriePS.Text = ""
- TxtCodigoPS.Text = ""
- TxtCodigoPS.Focus()
- VerificaVentaSurtida()
-
- End Sub
- Protected Sub BtnGuardarCantidadEspecial_Click(sender As Object, e As EventArgs)
- AgregaCantidadEspecial()
- End Sub
- Private Sub AgregaCantidadEspecial()
- Dim TxtCantidad = GvDatos.Rows(RowIndexCantidadEspecial).FCTextBox("TbCantidadF")
- If CantidadEspecialTemp - TxtCantidadEspecialDiv.Text.ToDecimal - TxtCantidad.Text.ToDecimal >= 0 Then
- TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + TxtCantidadEspecialDiv.Text.ToDecimal).ToString.FormatoNumero
- 'RegistraScript("$('#ModalCantidad').modal('hide');")
- RegistraScript("$('#DivCantidadEspecial').hide(200);")
- UpDatos.Update()
- TxtCodigoPS.Focus()
- Else
- Alert("La cantidad excede la pendiente por surtir. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- End If
-
- TxtCantidadEspecialDiv.Text = "1"
- End Sub
-#End Region
-
-#End Region
-
-
-#Region " GUARDAR "
- Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs)
-
- Select Case TipoEntrega
- Case 1
- GuardaVenta()
- Case 2
- GuardaTraspaso()
- End Select
-
- End Sub
-
- Private Sub GuardaVenta()
-
-
- '' INICIA: VALIDACIONES
-
- 'Valida el estatus de la Venta, si es = 5 O DevolucionVenta = 2, NO SE SURTE!
- Dim ObjVentaInv As New ClsInventarios
- If ObjVentaInv.GetEstatusVentaPorSurir(CveVentaSurtir) Then
- TipoEstatus = ObjVentaInv.TipoEstatus
- EsDevolucionVenta = ObjVentaInv.EsDevolucionVenta
- End If
- ObjVentaInv.Dispose()
-
- If TipoEstatus = 5 Or EsDevolucionVenta.Contiene(2, 3) Then
- Alert("No se puede surtir esta venta, verifique que no esté cancelada o ya registrado su movimiento en almacen", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
-
-
-
- 'VALIDA CANTIDAD DE SALIDA
- Dim Cantidad As Decimal = 0.0D
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
- Cantidad = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal
- Exit For
- End If
- Next
-
- If Not Cantidad > 0 Then
- Alert("No se detecto ningun movimiento por hacer. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- 'PROCESO , si tiene proceso "176" no lo valida
- If Not UsuarioActual.TienePermisoProceso(176) Then
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then
- Alert("En la factura no se han especificado todos los productos a entregar, favor de especificarlos para poder dar salida.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
- Next
- End If
-
- If EsDevolucionVenta = 1 Or TipoDocto.Contiene({"Ped"}) Then
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString.ToDecimal) Then
- Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- Exit Sub
- End If
- Next
- End If
-
- If UsuarioActual.Empresa.Funcionalidad(563) = "1" Then
- If Cantidad <> DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") Then
- Alert("La seccion de almacen no ha sido agregada completamente.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
- End If
-
- Dim EsInterno As Integer = -1
- If TipoDocto = "Ped" Then
- EsInterno = If(Me.EsInterno, 1, 0)
- End If
-
- Dim ObjInventario As New ClsInventarios
- Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
- Dim ObjVentas As New ClsVentas(ObjInventario.IniciaTransacSQL())
- Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL())
- Dim CveMovimiento As Integer
- Dim Folio As Integer
- Dim ErrorMovInv As Boolean
- Dim DtDetalle As New DataTable
- Dim DtDetalleLote As New DataTable
- Dim TextoError = ""
-
-
- 'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
- Dim Index = 0
- For Each gvr As GridViewRow In GvDatos.Rows
- If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
- DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
- End If
- Index += 1
- Next
-
- 'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA
- Dim DtDatosVenta As New DataTable
- If ObjInventario.EntregaAlmacenGet(CveVentaSurtir) Then
- DtDatosVenta = ObjInventario.DtResultados
- End If
- Dim CantidadGV = GvDatos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
- If CantidadGV <> DtDatosVenta.SUM("CantidadF").ToDecimal Then
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- ObjConta.Dispose()
- ObjVentas.Dispose()
- ObjEventos.Dispose()
- CargaVentaPorSurtir(CveVentaSurtir)
- CargaPendientes()
- Alert("Ha sido cambiada la informacion de existencias de la venta actual, se han recargado la información.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- If Not ObjVentas.UpdateVentasDevolucionAlmacen(3, CveVentaSurtir) Then
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- ObjConta.Dispose()
- ObjVentas.Dispose()
- ObjEventos.Dispose()
- Exit Sub
- End If
-
-
- 'VALIDA EXISTENCIA 2
- If TipoMovimiento = 1 Then
-
- 'For Each Dr As DataRow In DtDatos.Rows
- ' If Dr("CantidadGV").ToString.ToDecimal > 0 Then
- ' If Dr("Inv_CveMetodoInventario").ToString = "5" Then
- ' DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- ' For Each Dr1 As DataRow In DtDetalle.Rows
- ' If Not ObjInventario.GetExistenciasPS(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr1("SerieLote").ToString, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) >= 1 Then
- ' TextoError += String.Format(" - {0} Serie: {1} ", Dr("PS"), Dr1("SerieLote"))
- ' End If
- ' Next
- ' ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
- ' DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- ' For Each Dr1 As DataRow In DtDetalle.Rows
- ' If Not ObjInventario.GetExistenciasPS(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) >= DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'") Then
- ' TextoError += String.Format(" - {0} Lote: {1} Batch: {2} ", Dr("PS"), Dr1("Lote"), Dr1("Batch"))
- ' End If
- ' Next
- ' Else
- 'If Not ObjInventario.GetExistenciasPS(Dr("CvePS").ToString.ToEntero, Dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) >= Dr("CantidadGV").ToString.ToDecimal Then
- ' TextoError += String.Format(" - {0} ", Dr("PS"))
- ' End If
- ' End If
-
- ' End If
- 'Next
-
- Dim StrXML As New StringBuilder
- StrXML.Append("")
- For Each Dr As DataRow In DtDatos.Rows
- If Dr("CantidadGV").ToString.ToDecimal > 0 Then
- If Dr("Inv_CveMetodoInventario").ToString = "5" Then
- DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- For Each Dr1 As DataRow In DtDetalle.Rows
- StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), 1, Dr1("SerieLote"))
- Next
- ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
- DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- For Each Dr1 As DataRow In DtDetalle.Rows
- StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'"), Dr1("Lote"))
- Next
- Else
- StrXML.AppendFormat("", Dr("CvePS"), Dr("CveUM"), Dr("CantidadGV"), "-1")
- End If
- End If
- Next
- StrXML.Append("")
-
- 'Alert(StrXML.ToString())
- 'ObjInventario.RollBack()
- 'ObjInventario.Dispose()
- 'Exit Sub
-
- Dim TieneErrorExistencia = False
- If ObjInventario.GetExistenciasPSXML(StrXML.ToString(), DdlAlmacen.SelectedValue.ToEntero, TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveSubProyecto, CveVendedor, If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
- If ObjInventario.DtResultados.Rows.Count > 0 Then
- TieneErrorExistencia = True
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- TextoError += $" - {Dr("CodigoPS")} Existencia: {Dr("Existencia").ToString.ToDecimal.ToString("#,##0.##")} "
- Next
- End If
- Else
- TieneErrorExistencia = True
- End If
-
- If TieneErrorExistencia Then
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- ObjConta.Dispose()
- ObjVentas.Dispose()
- ObjEventos.Dispose()
- If TextoError.Length > 0 Then
- Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:
{TextoError}", TipoMensaje.MsgAdvertencia)
- End If
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- Exit Sub
- End If
-
- Else
- 'If Not UsuarioActual.TienePermisoProceso(223) Then 'INVALIDA LA VALIDACION DE EXISTENCIA DE LA VENTA ORIGINAL
- ' If DtExistencias IsNot Nothing Then
- ' For Each Dr As DataRow In DtDatos.Rows
- ' If Dr("CantidadGV").ToString.ToDecimal > 0 Then
-
- ' If Dr("Inv_CveMetodoInventario").ToString = "5" Then
- ' DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- ' For Each Dr1 As DataRow In DtDetalle.Rows
- ' If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr1("CvePS").ToString.ToEntero} AND CveUM = {Dr1("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'") >= 1 Then
- ' TextoError += String.Format(" - {0} ", Dr1("PS"))
- ' End If
- ' Next
- ' ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
- ' DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- ' For Each Dr1 As DataRow In DtDetalle.Rows
- ' If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr1("CvePS").ToString.ToEntero} AND CveUM = {Dr1("CveUM").ToString.ToEntero} AND Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'") >= DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'") Then
- ' TextoError += String.Format(" - {0} ", Dr1("PS"))
- ' End If
- ' Next
- ' Else
- ' If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero}") >= Dr("CantidadGV").ToString.ToDecimal Then
- ' TextoError += String.Format(" - {0} ", Dr("PS"))
- ' End If
- ' End If
- ' End If
- ' Next
- ' If TextoError <> "" Then
- ' Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:
{TextoError}", TipoMensaje.MsgAdvertencia)
- ' RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- ' ObjInventario.RollBack()
- ' ObjInventario.Dispose()
- ' ObjConta.Dispose()
- ' ObjVentas.Dispose()
- ' ObjEventos.Dispose()
- ' Exit Sub
- ' End If
- ' End If
- 'End If
- End If
-
- '' TERMINA: VALIDACIONES
-
-
- '' COMIENZA: APARTADOS
- Dim DtTraspasos As New DataTable
- DtTraspasos.Columns.Add("CveAlmacen", GetType(Integer))
- DtTraspasos.Columns.Add("Almacen", GetType(String))
- DtTraspasos.Columns.Add("CveMovimientoSalida", GetType(Integer))
- DtTraspasos.Columns.Add("FolioSalida", GetType(Integer))
- DtTraspasos.Columns.Add("CveMovimientoEntrada", GetType(Integer))
- DtTraspasos.Columns.Add("FolioEntrada", GetType(Integer))
-
- Dim CveMovimientoSalida = -1, FolioSalida = -1, CveMovimientoEntrada = -1, CveMovimientoEntradaApartado = -1, FolioEntrada = -1, CveMovimientoSalidaDevRem = -1, FolioMovimientoSalidaDevRem = -1, CveMovimientoEntradaDevRem = -1, FolioMovimientoEntradaDevRem = -1
- Dim CantidadPendiente As Decimal = 0
- Dim CantidadSaldo As Decimal = 0
-
-
- If CveVendedor > 0 AndAlso (UsuarioActual.Empresa.Funcionalidad(146) = "1" Or CveCliente > 0) AndAlso TipoDocto <> "Ped" Then 'no debe considerar cuando es pedido de contrato
- If TipoMovimiento = 1 Then ' SI ES DEVOLUCION NO APLICA APARTADO
- ' SALIDA POR TRASPASO DE LOS ALMACENES DE APARTADO
- For Each Dr As DataRow In DtDatos.Rows
- If Dr("CantidadGV").ToString.ToDecimal > 0 Then
-
- If Dr("Inv_CveMetodoInventario").ToString = "5" Then
-
- DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- For Each Dr1 As DataRow In DtDetalle.Rows
- If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr1("SerieLote").ToString, CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) Then
- For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
-
- 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
- CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero
-
- If Not CveMovimientoSalida > 0 Then
- CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
- FolioSalida = ObjInventario.Folio
-
- If Not CveMovimientoSalida > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- Dim DrMovto = DtTraspasos.NewRow
- DrMovto("Almacen") = Dr2("Almacen").ToString.ToEntero
- DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString.ToEntero
- DrMovto("CveMovimientoSalida") = CveMovimientoSalida
- DrMovto("FolioSalida") = FolioSalida
- DtTraspasos.Rows.Add(DrMovto)
- End If
-
-
- CantidadPendiente = 1
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
- DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
- Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente
- Exit For
- Next
- End If
- If ErrorMovInv Then Exit For
- Next
-
- ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
-
- DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- For Each Dr1 As DataRow In DtDetalle.Rows
- If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) Then
-
- CantidadSaldo = Dr("CantidadGV").ToString.ToDecimal
-
- For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
-
- 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
- CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero
-
- If Not CveMovimientoSalida > 0 Then
- CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
- FolioSalida = ObjInventario.Folio
-
- If Not CveMovimientoSalida > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- Dim DrMovto = DtTraspasos.NewRow
- DrMovto("Almacen") = Dr2("Almacen").ToString.ToEntero
- DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString.ToEntero
- DrMovto("CveMovimientoSalida") = CveMovimientoSalida
- DrMovto("FolioSalida") = FolioSalida
- DtTraspasos.Rows.Add(DrMovto)
- End If
-
- CantidadPendiente = If(Dr1("Cantidad").ToString.ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("Cantidad").ToString.ToDecimal)
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
- DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
-
- CantidadSaldo -= CantidadPendiente
- Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente
- If CantidadSaldo <= 0 Then Exit For
- Next
- End If
- Next
-
- Else
-
- If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString.ToEntero, Dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) Then
-
- CantidadSaldo = Dr("CantidadGV").ToString.ToDecimal
-
- For Each Dr1 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
-
- 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
- CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr1("CveAlmacen")}").ToEntero
-
- If Not CveMovimientoSalida > 0 Then
- CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
- FolioSalida = ObjInventario.Folio
-
- If Not CveMovimientoSalida > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- Dim DrMovto = DtTraspasos.NewRow
- DrMovto("Almacen") = Dr1("Almacen").ToString.ToEntero
- DrMovto("CveAlmacen") = Dr1("CveAlmacen").ToString.ToEntero
- DrMovto("CveMovimientoSalida") = CveMovimientoSalida
- DrMovto("FolioSalida") = FolioSalida
- DtTraspasos.Rows.Add(DrMovto)
- End If
-
-
- CantidadPendiente = If(Dr1("ExistenciaFinal").ToString.ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("ExistenciaFinal").ToString.ToDecimal)
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- CantidadSaldo -= CantidadPendiente
- Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente
- If CantidadSaldo <= 0 Then Exit For
- Next
-
- If ErrorMovInv Then Exit For
-
- End If
-
- End If
- If ErrorMovInv Then Exit For
-
- End If
-
- Next
-
- 'ENTRADA POR TRASPASO AL ALMACEN GENERAL
- If Not ErrorMovInv Then
- For Each Dr1 As DataRow In DtTraspasos.Rows
- CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero
-
- CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente)
- FolioEntrada = ObjInventario.Folio
-
- If Not CveMovimientoEntradaApartado > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
- Dr1("FolioEntrada") = FolioEntrada
-
- If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- End If
-
- If ErrorMovInv Then Exit For
-
- Next
- End If
- End If
- End If
- '' TERMINA: APARTADOS
-
-
- If Not ErrorMovInv Then
- Dim ConceptoMovimiento = 3
- ConceptoMovimiento = If(TipoMovimiento = 1, ConceptoMovimiento, 18)
- ConceptoMovimiento = If(CveAlmacenTraspasoDestino > 0, 8, ConceptoMovimiento)
-
- Dim Almacen1 = DdlAlmacen.SelectedValue.ToEntero
-
- 'DEVOLUCION REMISION
- If TipoMovimiento = 2 And TipoDocto = "Rem" Then
- ConceptoMovimiento = 8
- Almacen1 = CveAlmacenTraspasoDestino
- CveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero
+ End If
+
+
+ If Gvr.DataKey("AplicaSerieLote") = "True" Then
+ TdSeriePS.Visible = True
+ TxtSeriePS.Focus()
+
+ CveConsecSerieLote = Gvr.DataKey("Consec").ToString.ToEntero
+ PSSerieLote = Gvr.DataKey("PS").ToString
+ CvePSSerieLote = Gvr.DataKey("CvePS").ToEntero
+ CveUMSerieLote = Gvr.DataKey("CveUM").ToEntero
+ Exit Sub
+ End If
+
+
+ Dim CantidadEspecial = 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
+ TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + 1).ToString.FormatoNumero
+ TxtCodigoPS.Text = ""
+ UpDatos.Update()
+ Exit Sub
+ End If
+
+ VerificaVentaSurtida()
+ Exit Sub
+ End If
+
+ Existe = True
+ PSTemp = Gvr.DataKey("PS").ToString
+ 'Alert($"Ya se ha cargado la totalidad del Producto ""{Gvr.DataKey("PS").ToString}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
+ 'VerificaVentaSurtida()
+ 'Exit Sub
+ End If
+ Next
+
+ VerificaVentaSurtida()
+ If Existe Then
+ Alert($"Ya se ha cargado la totalidad del Producto ""{PSTemp}"" con el Codigo ""{TxtCodigoPS.Text}"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
+ Else
+ Alert($"No se ha encontrado un producto para surtir con el Codigo ""{TxtCodigoPS.Text}"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
+ End If
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ TxtCodigoPS.Text = ""
+
+ End Sub
+ Private Sub VerificaVentaSurtida()
+ Dim Surtida = True
+
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then
+ Surtida = False
+ Exit Sub
+ End If
+ Next
+
+ If Surtida Then
+ LbSurtida.Visible = True
+ End If
+ End Sub
+ Protected Sub BtnSeriePS_Click(sender As Object, e As EventArgs)
+ AgregaSerieLote(TxtSeriePS.Text.Trim, 2)
+
+ TdSeriePS.Visible = False
+ TxtSeriePS.Text = ""
+ TxtCodigoPS.Text = ""
+ TxtCodigoPS.Focus()
+ VerificaVentaSurtida()
+
+ End Sub
+ Protected Sub BtnGuardarCantidadEspecial_Click(sender As Object, e As EventArgs)
+ AgregaCantidadEspecial()
+ End Sub
+ Private Sub AgregaCantidadEspecial()
+ Dim TxtCantidad = GvDatos.Rows(RowIndexCantidadEspecial).FCTextBox("TbCantidadF")
+ If CantidadEspecialTemp - TxtCantidadEspecialDiv.Text.ToDecimal - TxtCantidad.Text.ToDecimal >= 0 Then
+ TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + TxtCantidadEspecialDiv.Text.ToDecimal).ToString.FormatoNumero
+ 'RegistraScript("$('#ModalCantidad').modal('hide');")
+ RegistraScript("$('#DivCantidadEspecial').hide(200);")
+ UpDatos.Update()
+ TxtCodigoPS.Focus()
+ Else
+ Alert("La cantidad excede la pendiente por surtir. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ End If
+
+ TxtCantidadEspecialDiv.Text = "1"
+ End Sub
+#End Region
+
+#End Region
+
+
+#Region " GUARDAR "
+ Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs)
+
+ Select Case TipoEntrega
+ Case 1
+ GuardaVenta()
+ Case 2
+ GuardaTraspaso()
+ End Select
+
+ End Sub
+
+ Private Sub GuardaVenta()
+
+
+ '' INICIA: VALIDACIONES
+
+ 'Valida el estatus de la Venta, si es = 5 O DevolucionVenta = 2, NO SE SURTE!
+ Dim ObjVentaInv As New ClsInventarios
+ If ObjVentaInv.GetEstatusVentaPorSurir(CveVentaSurtir) Then
+ TipoEstatus = ObjVentaInv.TipoEstatus
+ EsDevolucionVenta = ObjVentaInv.EsDevolucionVenta
+ End If
+ ObjVentaInv.Dispose()
+
+ If TipoEstatus = 5 Or EsDevolucionVenta.Contiene(2, 3) Then
+ Alert("No se puede surtir esta venta, verifique que no esté cancelada o ya registrado su movimiento en almacen", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+
+
+
+ 'VALIDA CANTIDAD DE SALIDA
+ Dim Cantidad As Decimal = 0.0D
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
+ Cantidad = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal
+ Exit For
+ End If
+ Next
+
+ If Not Cantidad > 0 Then
+ Alert("No se detecto ningun movimiento por hacer. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ 'PROCESO , si tiene proceso "176" no lo valida
+ If Not UsuarioActual.TienePermisoProceso(176) Then
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then
+ Alert("En la factura no se han especificado todos los productos a entregar, favor de especificarlos para poder dar salida.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+ Next
+ End If
+
+ If EsDevolucionVenta = 1 Or TipoDocto.Contiene({"Ped"}) Then
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString.ToDecimal) Then
+ Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ Exit Sub
+ End If
+ Next
+ End If
+
+ If UsuarioActual.Empresa.Funcionalidad(563) = "1" Then
+ If Cantidad <> DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") Then
+ Alert("La seccion de almacen no ha sido agregada completamente.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+ End If
+
+ Dim EsInterno As Integer = -1
+ If TipoDocto = "Ped" Then
+ EsInterno = If(Me.EsInterno, 1, 0)
+ End If
+
+ Dim ObjInventario As New ClsInventarios
+ Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
+ Dim ObjVentas As New ClsVentas(ObjInventario.IniciaTransacSQL())
+ Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL())
+ Dim CveMovimiento As Integer
+ Dim Folio As Integer
+ Dim ErrorMovInv As Boolean
+ Dim DtDetalle As New DataTable
+ Dim DtDetalleLote As New DataTable
+ Dim TextoError = ""
+
+
+ 'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
+ Dim Index = 0
+ For Each gvr As GridViewRow In GvDatos.Rows
+ If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
+ DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
+ End If
+ Index += 1
+ Next
+
+ 'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA
+ Dim DtDatosVenta As New DataTable
+ If ObjInventario.EntregaAlmacenGet(CveVentaSurtir) Then
+ DtDatosVenta = ObjInventario.DtResultados
+ End If
+ Dim CantidadGV = GvDatos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
+ If CantidadGV <> DtDatosVenta.SUM("CantidadF").ToDecimal Then
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ ObjConta.Dispose()
+ ObjVentas.Dispose()
+ ObjEventos.Dispose()
+ CargaVentaPorSurtir(CveVentaSurtir)
+ CargaPendientes()
+ Alert("Ha sido cambiada la informacion de existencias de la venta actual, se han recargado la información.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ If Not ObjVentas.UpdateVentasDevolucionAlmacen(3, CveVentaSurtir) Then
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ ObjConta.Dispose()
+ ObjVentas.Dispose()
+ ObjEventos.Dispose()
+ Exit Sub
+ End If
+
+
+ 'VALIDA EXISTENCIA 2
+ If TipoMovimiento = 1 Then
+
+ 'For Each Dr As DataRow In DtDatos.Rows
+ ' If Dr("CantidadGV").ToString.ToDecimal > 0 Then
+ ' If Dr("Inv_CveMetodoInventario").ToString = "5" Then
+ ' DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ ' For Each Dr1 As DataRow In DtDetalle.Rows
+ ' If Not ObjInventario.GetExistenciasPS(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr1("SerieLote").ToString, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) >= 1 Then
+ ' TextoError += String.Format(" - {0} Serie: {1} ", Dr("PS"), Dr1("SerieLote"))
+ ' End If
+ ' Next
+ ' ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
+ ' DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ ' For Each Dr1 As DataRow In DtDetalle.Rows
+ ' If Not ObjInventario.GetExistenciasPS(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) >= DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'") Then
+ ' TextoError += String.Format(" - {0} Lote: {1} Batch: {2} ", Dr("PS"), Dr1("Lote"), Dr1("Batch"))
+ ' End If
+ ' Next
+ ' Else
+ 'If Not ObjInventario.GetExistenciasPS(Dr("CvePS").ToString.ToEntero, Dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) >= Dr("CantidadGV").ToString.ToDecimal Then
+ ' TextoError += String.Format(" - {0} ", Dr("PS"))
+ ' End If
+ ' End If
+
+ ' End If
+ 'Next
+
+ Dim StrXML As New StringBuilder
+ StrXML.Append("")
+ For Each Dr As DataRow In DtDatos.Rows
+ If Dr("CantidadGV").ToString.ToDecimal > 0 Then
+ If Dr("Inv_CveMetodoInventario").ToString = "5" Then
+ DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), 1, Dr1("SerieLote"))
+ Next
+ ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
+ DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'"), Dr1("Lote"))
+ Next
+ Else
+ StrXML.AppendFormat("", Dr("CvePS"), Dr("CveUM"), Dr("CantidadGV"), "-1")
+ End If
+ End If
+ Next
+ StrXML.Append("")
+
+ 'Alert(StrXML.ToString())
+ 'ObjInventario.RollBack()
+ 'ObjInventario.Dispose()
+ 'Exit Sub
+
+ Dim TieneErrorExistencia = False
+ If ObjInventario.GetExistenciasPSXML(StrXML.ToString(), DdlAlmacen.SelectedValue.ToEntero, TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveSubProyecto, CveVendedor, If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
+ If ObjInventario.DtResultados.Rows.Count > 0 Then
+ TieneErrorExistencia = True
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ TextoError += $" - {Dr("CodigoPS")} Existencia: {Dr("Existencia").ToString.ToDecimal.ToString("#,##0.##")} "
+ Next
+ End If
+ Else
+ TieneErrorExistencia = True
+ End If
+
+ If TieneErrorExistencia Then
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ ObjConta.Dispose()
+ ObjVentas.Dispose()
+ ObjEventos.Dispose()
+ If TextoError.Length > 0 Then
+ Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:
{TextoError}", TipoMensaje.MsgAdvertencia)
+ End If
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ Exit Sub
+ End If
+
+ Else
+ 'If Not UsuarioActual.TienePermisoProceso(223) Then 'INVALIDA LA VALIDACION DE EXISTENCIA DE LA VENTA ORIGINAL
+ ' If DtExistencias IsNot Nothing Then
+ ' For Each Dr As DataRow In DtDatos.Rows
+ ' If Dr("CantidadGV").ToString.ToDecimal > 0 Then
+
+ ' If Dr("Inv_CveMetodoInventario").ToString = "5" Then
+ ' DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ ' For Each Dr1 As DataRow In DtDetalle.Rows
+ ' If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr1("CvePS").ToString.ToEntero} AND CveUM = {Dr1("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'") >= 1 Then
+ ' TextoError += String.Format(" - {0} ", Dr1("PS"))
+ ' End If
+ ' Next
+ ' ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
+ ' DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ ' For Each Dr1 As DataRow In DtDetalle.Rows
+ ' If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr1("CvePS").ToString.ToEntero} AND CveUM = {Dr1("CveUM").ToString.ToEntero} AND Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'") >= DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'") Then
+ ' TextoError += String.Format(" - {0} ", Dr1("PS"))
+ ' End If
+ ' Next
+ ' Else
+ ' If Not DtExistencias.SUM("Cantidad", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero}") >= Dr("CantidadGV").ToString.ToDecimal Then
+ ' TextoError += String.Format(" - {0} ", Dr("PS"))
+ ' End If
+ ' End If
+ ' End If
+ ' Next
+ ' If TextoError <> "" Then
+ ' Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:
{TextoError}", TipoMensaje.MsgAdvertencia)
+ ' RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ ' ObjInventario.RollBack()
+ ' ObjInventario.Dispose()
+ ' ObjConta.Dispose()
+ ' ObjVentas.Dispose()
+ ' ObjEventos.Dispose()
+ ' Exit Sub
+ ' End If
+ ' End If
+ 'End If
+ End If
+
+ '' TERMINA: VALIDACIONES
+
+
+ '' COMIENZA: APARTADOS
+ Dim DtTraspasos As New DataTable
+ DtTraspasos.Columns.Add("CveAlmacen", GetType(Integer))
+ DtTraspasos.Columns.Add("Almacen", GetType(String))
+ DtTraspasos.Columns.Add("CveMovimientoSalida", GetType(Integer))
+ DtTraspasos.Columns.Add("FolioSalida", GetType(Integer))
+ DtTraspasos.Columns.Add("CveMovimientoEntrada", GetType(Integer))
+ DtTraspasos.Columns.Add("FolioEntrada", GetType(Integer))
+
+ Dim CveMovimientoSalida = -1, FolioSalida = -1, CveMovimientoEntrada = -1, CveMovimientoEntradaApartado = -1, FolioEntrada = -1, CveMovimientoSalidaDevRem = -1, FolioMovimientoSalidaDevRem = -1, CveMovimientoEntradaDevRem = -1, FolioMovimientoEntradaDevRem = -1
+ Dim CantidadPendiente As Decimal = 0
+ Dim CantidadSaldo As Decimal = 0
+
+
+ If CveVendedor > 0 AndAlso (UsuarioActual.Empresa.Funcionalidad(146) = "1" Or CveCliente > 0) AndAlso TipoDocto <> "Ped" Then 'no debe considerar cuando es pedido de contrato
+ If TipoMovimiento = 1 Then ' SI ES DEVOLUCION NO APLICA APARTADO
+ ' SALIDA POR TRASPASO DE LOS ALMACENES DE APARTADO
+ For Each Dr As DataRow In DtDatos.Rows
+ If Dr("CantidadGV").ToString.ToDecimal > 0 Then
+
+ If Dr("Inv_CveMetodoInventario").ToString = "5" Then
+
+ DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), SerieLote:=Dr1("SerieLote").ToString, CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) Then
+ For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
+
+ 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
+ CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero
+
+ If Not CveMovimientoSalida > 0 Then
+ CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
+ FolioSalida = ObjInventario.Folio
+
+ If Not CveMovimientoSalida > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ Dim DrMovto = DtTraspasos.NewRow
+ DrMovto("Almacen") = Dr2("Almacen").ToString.ToEntero
+ DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString.ToEntero
+ DrMovto("CveMovimientoSalida") = CveMovimientoSalida
+ DrMovto("FolioSalida") = FolioSalida
+ DtTraspasos.Rows.Add(DrMovto)
+ End If
+
+
+ CantidadPendiente = 1
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
+ DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
+ Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente
+ Exit For
+ Next
+ End If
+ If ErrorMovInv Then Exit For
+ Next
+
+ ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
+
+ DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString.ToEntero, Dr1("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) Then
+
+ CantidadSaldo = Dr("CantidadGV").ToString.ToDecimal
+
+ For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
+
+ 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
+ CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero
+
+ If Not CveMovimientoSalida > 0 Then
+ CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
+ FolioSalida = ObjInventario.Folio
+
+ If Not CveMovimientoSalida > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ Dim DrMovto = DtTraspasos.NewRow
+ DrMovto("Almacen") = Dr2("Almacen").ToString.ToEntero
+ DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString.ToEntero
+ DrMovto("CveMovimientoSalida") = CveMovimientoSalida
+ DrMovto("FolioSalida") = FolioSalida
+ DtTraspasos.Rows.Add(DrMovto)
+ End If
+
+ CantidadPendiente = If(Dr1("Cantidad").ToString.ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("Cantidad").ToString.ToDecimal)
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
+ DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
+
+ CantidadSaldo -= CantidadPendiente
+ Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente
+ If CantidadSaldo <= 0 Then Exit For
+ Next
+ End If
+ Next
+
+ Else
+
+ If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString.ToEntero, Dr("CveUM").ToString.ToEntero, UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1) Then
+
+ CantidadSaldo = Dr("CantidadGV").ToString.ToDecimal
+
+ For Each Dr1 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
+
+ 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
+ CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr1("CveAlmacen")}").ToEntero
+
+ If Not CveMovimientoSalida > 0 Then
+ CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
+ FolioSalida = ObjInventario.Folio
+
+ If Not CveMovimientoSalida > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ Dim DrMovto = DtTraspasos.NewRow
+ DrMovto("Almacen") = Dr1("Almacen").ToString.ToEntero
+ DrMovto("CveAlmacen") = Dr1("CveAlmacen").ToString.ToEntero
+ DrMovto("CveMovimientoSalida") = CveMovimientoSalida
+ DrMovto("FolioSalida") = FolioSalida
+ DtTraspasos.Rows.Add(DrMovto)
+ End If
+
+
+ CantidadPendiente = If(Dr1("ExistenciaFinal").ToString.ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("ExistenciaFinal").ToString.ToDecimal)
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ CantidadSaldo -= CantidadPendiente
+ Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString.ToDecimal + CantidadPendiente
+ If CantidadSaldo <= 0 Then Exit For
+ Next
+
+ If ErrorMovInv Then Exit For
+
+ End If
+
+ End If
+ If ErrorMovInv Then Exit For
+
+ End If
+
+ Next
+
+ 'ENTRADA POR TRASPASO AL ALMACEN GENERAL
+ If Not ErrorMovInv Then
+ For Each Dr1 As DataRow In DtTraspasos.Rows
+ CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero
+
+ CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente)
+ FolioEntrada = ObjInventario.Folio
+
+ If Not CveMovimientoEntradaApartado > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
+ Dr1("FolioEntrada") = FolioEntrada
+
+ If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ End If
+
+ If ErrorMovInv Then Exit For
+
+ Next
+ End If
+ End If
+ End If
+ '' TERMINA: APARTADOS
+
+
+ If Not ErrorMovInv Then
+ Dim ConceptoMovimiento = 3
+ ConceptoMovimiento = If(TipoMovimiento = 1, ConceptoMovimiento, 18)
+ ConceptoMovimiento = If(CveAlmacenTraspasoDestino > 0, 8, ConceptoMovimiento)
+
+ Dim Almacen1 = DdlAlmacen.SelectedValue.ToEntero
+
+ 'DEVOLUCION REMISION
+ If TipoMovimiento = 2 And TipoDocto = "Rem" Then
+ ConceptoMovimiento = 8
+ Almacen1 = CveAlmacenTraspasoDestino
+ CveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero
End If
'CANCELACION DE DEVOLUCION
- If TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1 Then
- ConceptoMovimiento = 2
- Almacen1 = DdlAlmacen.SelectedValue.ToEntero
- CveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero
- End If
-
- CveMovimiento = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveAlmacenDestino:=CveAlmacenTraspasoDestino)
- Folio = ObjInventario.Folio
-
- 'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN)
- 'If Not (CveContrato > 0 And CveAlmacenTraspasoDestino > 0) Then
- If CveMovimiento > 0 Then
-
- 'SACA LO DE TRASPASOS - APARTADO
- For Each Dr1 As DataRow In DtTraspasos.Rows
- CveMovimientoSalida = Dr1("CveMovimientoEntrada").ToString.ToEntero
- If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- End If
- If ErrorMovInv Then Exit For
- Next
-
- 'ES EL MOVIMIENTO PRINCIPAL
- CantidadPendiente = 0
- Dim Cont As Integer = 0
- For Each Dr As DataRow In DtDatos.Rows
- CantidadPendiente = Dr("CantidadGV").ToString.ToDecimal - Dr("CantidadTraspaso").ToString.ToDecimal
- If CantidadPendiente > 0 Then
- Dim PU As Decimal = 0
-
- 'SI FUE POR SERIELOTE
- DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
- DtDetalleLote = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
- If DtDetalle.Rows.Count > 0 Then
- For Each Dr1 As DataRow In DtDetalle.Rows
- If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
- PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'").ToString.ToDecimal
- End If
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- ElseIf DtDetalleLote.Rows.Count > 0 Then
- For Each Dr1 As DataRow In DtDetalleLote.Rows
- If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
- PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'").ToString.ToDecimal
- End If
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr1("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- Else
- If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
- PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero}").ToString.ToDecimal
- End If
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, CantidadPendiente, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
- Exit For
- End If
- End If
- If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then
- For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont}").Rows
- If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacen").ToString.ToEntero, -Dr2("CantidadSeccionAlmacen").ToString.ToDecimal) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- End If
- Cont += 1
- End If
- Next
- Else
- ErrorMovInv = True
- End If
- End If
- 'End If
-
-
- 'ENTRADA POR TRASPASO CUANDO ES REMISION
- If Not ErrorMovInv Then
- If CveAlmacenTraspasoDestino > 0 AndAlso Not (TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1) Then ' TRASPASO CUANDO ES REMISION
- CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenTraspasoDestino, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
- FolioEntrada = ObjInventario.Folio
-
- If CveMovimientoEntrada <= 0 Then
- TextoError = "No se pudo generar el movimiento de entrada correctamente"
- ErrorMovInv = True
- Else
- If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, EsInterno:=EsInterno) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al guardar los movimientos de entrada"
- Exit For
- End If
- Next
- End If
- End If
-
- Else 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN - SALIDA ALMACEN
- Dim DtCostos As DataTable = Nothing
- Dim ValorInventario As Decimal = 0
- If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
- DtCostos = ObjInventario.DtResultados
-
- Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
- Dim 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 IdCtaContable As Integer = 0
- Dim CveCuenta As Integer = 0
- If tmpCostos.Rows.Count > 0 Then
-
-
- If ObjVentas.GetVenta(CveVentaSurtir, UsuarioActual.CveEmpresa) Then
- Dim Fecha As Date = TxtFecha.Text.ToDate ' If(TipoMovimiento <> 1, TxtFecha.Text.ToDate, ObjVentas.DtResultados(0)("Fecha").ToString.ToDate)
- Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero
- Dim ClienteNombre As String = ObjVentas.DtResultados(0)("ClienteNombre").ToString
- Dim SerieFolio As String = ObjVentas.DtResultados(0)("SerieFolio").ToString
- Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL()
- Dim TotalCostoAcumulado As Decimal = 0
- Dim cont As Integer = 1
-
- Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("Inventario/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
- 'Se agrega movimiento separado por la cuenta de ventas (ER)
- For Each RowInv As DataRow In tmpCostos.Rows
- ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL()
- TotalCostoAcumulado += ValorInventario
-
- 'cuando es el último movimiento y hay diferencias en los importes
- If cont = DtCostos.FiltraParametros("", "", {"CveClasificacion"}).Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
- ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
- End If
-
- 'Concepto = String.Format("{0} - {1}", Row2("Clasificacion").ToString, Row2("SubProyecto").ToString)
- IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
- CveCuenta = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostosSIG", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
-
- If Not ErrorMovInv Then
- If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, If(TipoMovimiento = 1, 1, -1) * ValorInventario, SerieFolio, 69, SerieFolio, Fecha, IdCtaContable, -1, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, CveSubProyecto:=CveSubProyecto, ImporteMX:=If(TipoMovimiento = 1, 1, -1) * ValorInventario, CveCuenta:=CveCuenta, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero) Then
- ErrorMovInv = True
- End If
- End If
-
- cont += 1
- Next
-
- If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, If(TipoMovimiento = 1, 1, -1) * TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, CveSubProyecto:=CveSubProyecto, ImporteMX:=If(TipoMovimiento = 1, 1, -1) * TotalCosto, CveCuenta:=CveCuentaAlmacen) Then
- ErrorMovInv = True
- End If
-
- 'AutoConta - El movimiento 1 es el de Venta
+ If TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1 Then
+ ConceptoMovimiento = 3
+ Almacen1 = DdlAlmacen.SelectedValue.ToEntero
+ CveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero
+ End If
+
+ CveMovimiento = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveAlmacenDestino:=CveAlmacenTraspasoDestino)
+ Folio = ObjInventario.Folio
+
+ 'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN)
+ 'If Not (CveContrato > 0 And CveAlmacenTraspasoDestino > 0) Then
+ If CveMovimiento > 0 Then
+
+ 'SACA LO DE TRASPASOS - APARTADO
+ For Each Dr1 As DataRow In DtTraspasos.Rows
+ CveMovimientoSalida = Dr1("CveMovimientoEntrada").ToString.ToEntero
+ If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ End If
+ If ErrorMovInv Then Exit For
+ Next
+
+ 'ES EL MOVIMIENTO PRINCIPAL
+ CantidadPendiente = 0
+ Dim Cont As Integer = 0
+ For Each Dr As DataRow In DtDatos.Rows
+ CantidadPendiente = Dr("CantidadGV").ToString.ToDecimal - Dr("CantidadTraspaso").ToString.ToDecimal
+ If CantidadPendiente > 0 Then
+ Dim PU As Decimal = 0
+
+ 'SI FUE POR SERIELOTE
+ DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
+ DtDetalleLote = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
+ If DtDetalle.Rows.Count > 0 Then
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
+ PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'").ToString.ToDecimal
+ End If
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ ElseIf DtDetalleLote.Rows.Count > 0 Then
+ For Each Dr1 As DataRow In DtDetalleLote.Rows
+ If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
+ PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero} AND SerieLote = '{Dr1("SerieLote").ToString}'").ToString.ToDecimal
+ End If
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr1("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ Else
+ If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
+ PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero}").ToString.ToDecimal
+ End If
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, CantidadPendiente, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, PU, -1, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
+ Exit For
+ End If
+ End If
+ If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then
+ For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont}").Rows
+ If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacen").ToString.ToEntero, -Dr2("CantidadSeccionAlmacen").ToString.ToDecimal) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ End If
+ Cont += 1
+ End If
+ Next
+ Else
+ ErrorMovInv = True
+ End If
+ End If
+ 'End If
+
+
+ 'ENTRADA POR TRASPASO CUANDO ES REMISION
+ If Not ErrorMovInv Then
+ If CveAlmacenTraspasoDestino > 0 AndAlso Not (TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1) Then ' TRASPASO CUANDO ES REMISION
+ CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenTraspasoDestino, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
+ FolioEntrada = ObjInventario.Folio
+
+ If CveMovimientoEntrada <= 0 Then
+ TextoError = "No se pudo generar el movimiento de entrada correctamente"
+ ErrorMovInv = True
+ Else
+ If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString, EsInterno:=EsInterno) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al guardar los movimientos de entrada"
+ Exit For
+ End If
+ Next
+ End If
+ End If
+
+ Else 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN - SALIDA ALMACEN
+ Dim DtCostos As DataTable = Nothing
+ Dim ValorInventario As Decimal = 0
+ If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
+ DtCostos = ObjInventario.DtResultados
+
+ Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
+ Dim 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 IdCtaContable As Integer = 0
+ Dim CveCuenta As Integer = 0
+ If tmpCostos.Rows.Count > 0 Then
+
+
+ If ObjVentas.GetVenta(CveVentaSurtir, UsuarioActual.CveEmpresa) Then
+ Dim Fecha As Date = TxtFecha.Text.ToDate ' If(TipoMovimiento <> 1, TxtFecha.Text.ToDate, ObjVentas.DtResultados(0)("Fecha").ToString.ToDate)
+ Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero
+ Dim ClienteNombre As String = ObjVentas.DtResultados(0)("ClienteNombre").ToString
+ Dim SerieFolio As String = ObjVentas.DtResultados(0)("SerieFolio").ToString
+ Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL()
+ Dim TotalCostoAcumulado As Decimal = 0
+ Dim cont As Integer = 1
+
+ Dim ValorMultiplicador = 1
+
+ If TipoMovimiento = 1 Then
+ ValorMultiplicador = 1
+ ElseIf TipoMovimiento = 2 Then
+ TipoMovimiento = -1
+ ElseIf TipoMovimiento = 2 AndAlso TipoDocto.Contiene({"Dev"}) And (EsDevolucionVenta = 1) Then
+ ValorMultiplicador = 1
+ End If
+
+ Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("Inventario/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
+ 'Se agrega movimiento separado por la cuenta de ventas (ER)
+ For Each RowInv As DataRow In tmpCostos.Rows
+ ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL()
+ TotalCostoAcumulado += ValorInventario
+
+ 'cuando es el último movimiento y hay diferencias en los importes
+ If cont = DtCostos.FiltraParametros("", "", {"CveClasificacion"}).Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
+ ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
+ End If
+
+ 'Concepto = String.Format("{0} - {1}", Row2("Clasificacion").ToString, Row2("SubProyecto").ToString)
+ IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
+ CveCuenta = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostosSIG", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
+
+ If Not ErrorMovInv Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ValorMultiplicador * ValorInventario, SerieFolio, 69, SerieFolio, Fecha, IdCtaContable, -1, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, CveSubProyecto:=CveSubProyecto, ImporteMX:=ValorMultiplicador * ValorInventario, CveCuenta:=CveCuenta, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero) Then
+ ErrorMovInv = True
+ End If
+ End If
+
+ cont += 1
+ Next
+
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ValorMultiplicador * TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, CveSubProyecto:=CveSubProyecto, ImporteMX:=ValorMultiplicador * TotalCosto, CveCuenta:=CveCuentaAlmacen) Then
+ ErrorMovInv = True
+ End If
+
+ 'AutoConta - El movimiento 1 es el de Venta
Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1"
- If AutoConta And Not ErrorMovInv Then
- Dim ObjContPaq = New ClsContPAQi(UsuarioActual.Empresa)
-
- If IdCtaContable > 0 Then
- If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContPaq) Then
- Alert("Ocurrio un Error al contabilizar, pongase en contacto con Soporte Técnico")
- End If
- Else
- Alert(String.Format("No se puede contabilizar ya que falta asignación de las cuentas contables"), TipoMensaje.MsgAdvertencia)
- End If
-
- ObjContPaq.Dispose()
- End If
-
- Else
- ErrorMovInv = True
- TextoError = "Ocurrió un Error al ingresar las prepolizas"
- End If
-
- End If
- End If
- End If
-
- End If
-
- 'DEVOLUCION APARTADOS
- If Not ErrorMovInv Then
- If TipoMovimiento = 2 Then
- If ObjInventario.VentasAlmacenApartadosGet(CveVentaSurtir) Then
-
- Dim DtTempApartados = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 9", "CveAlmacen")
- Dim CveMovimientoSalidaApartado = -1
- Dim CveAlmacenApartado = -1
- Dim CveAlmacenOrigen = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero)
-
- For Each Dr As DataRow In DtTempApartados.Rows
-
- If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString.ToEntero Then
- CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, CveAlmacenDestino:=Dr("CveAlmacen").ToString.ToEntero)
- FolioSalida = ObjInventario.Folio
- CveAlmacenApartado = Dr("CveAlmacen").ToString.ToEntero
-
- Dim DrMovto = DtTraspasos.NewRow
- DrMovto("Almacen") = Dr("Almacen").ToString.ToEntero
- DrMovto("CveAlmacen") = Dr("CveAlmacen").ToString.ToEntero
- DrMovto("CveMovimientoSalida") = CveMovimientoSalidaApartado
- DrMovto("FolioSalida") = FolioSalida
- DtTraspasos.Rows.Add(DrMovto)
- End If
-
- If Not CveMovimientoSalidaApartado > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al guardar los movimientos de control de apartados"
- Exit For
- End If
-
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al guardar los movimientos de control de apartados"
- Exit For
- End If
- Next
-
- If Not ErrorMovInv Then
- For Each Dr1 As DataRow In DtTraspasos.Rows
- CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero
-
- CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente)
- FolioEntrada = ObjInventario.Folio
-
- If Not CveMovimientoEntradaApartado > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
-
- Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
- Dr1("FolioEntrada") = FolioEntrada
-
- If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- End If
-
- If ErrorMovInv Then Exit For
-
- Next
- End If
-
- End If
- End If
- End If
-
- 'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION
- If Not ErrorMovInv And EsDevolucionVenta = 1 And TipoDocto = "Ing" Then
- Dim DtDevRem As New DataTable
- Dim DtMovtosDev As New DataTable
- Dim CveAlmacenTraspasoDestinoDevRem = -1
-
- Dim CveVentaDetalleRem = -1
- Dim CantidadDevolver As Decimal = 0
- Dim CantidadRem As Decimal = 0
-
- 'CARGA REMISIONES DE LA VENTA DEVUELTA
- If ObjInventario.GetDevolucionRemisionesFacturadas(CveVentaSurtir) Then
- DtDevRem = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen > 0")
- Else
- ErrorMovInv = True
- End If
-
- 'CARGA CONCEPTOS DEVUELTOS EN LA VENTA
- If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
- DtMovtosDev = ObjInventario.DtResultados
- Else
- ErrorMovInv = True
- End If
-
- If Not ErrorMovInv Then
- If DtDevRem.Rows.Count > 0 And DtMovtosDev.Rows.Count > 0 Then
-
- For Each DrMovtos As DataRow In DtDevRem.FiltraParametros("", "CveRem", {"CveRem", "CveAlmacenTraspasoDestino"}).Rows
- CveAlmacenTraspasoDestinoDevRem = DrMovtos("CveAlmacenTraspasoDestino").ToString.ToEntero
- If Not CveAlmacenTraspasoDestinoDevRem > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al obtener el almacén de devolucion de remisión."
- Exit For
- End If
-
- 'SALIDA GENERAL
- CveMovimientoSalidaDevRem = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=CveAlmacenTraspasoDestinoDevRem)
- FolioMovimientoSalidaDevRem = ObjInventario.Folio
-
- 'ENTRADA ADELANTADO
- CveMovimientoEntradaDevRem = ObjInventario.AddMovimiento(CveAlmacenTraspasoDestinoDevRem, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimientoSalidaDevRem, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
- FolioMovimientoEntradaDevRem = ObjInventario.Folio
-
- If Not (CveMovimientoSalidaDevRem > 0 And CveMovimientoEntradaDevRem > 0) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al generar los movimientos de devolución a remisión."
- Exit For
- End If
-
-
- 'SALIDA POR TRAPASO DE GENERAL
- For Each DrRem As DataRow In DtDevRem.FiltraParametros($"CveRem = {DrMovtos("CveRem")}").Rows
- CveVentaDetalleRem = DrRem("CveVentaDetalleRem").ToString.ToEntero
- CantidadRem = DrRem("CantidadFacturada").ToString.ToDecimal
- 'CantidadDevolver = DtMovtosDev.FiltroPrimeroValor("Cantidad", $"CveVentaDetalle = {DrRem("CveVentaDetalle").ToString.ToEntero}").ToDouble
- 'If (Dr("Cantidad").ToString.ToDouble > CantidadRem, CantidadRem, Dr("Cantidad").ToString.ToDouble) Then
-
- If Not CveVentaDetalleRem > 0 Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al obtener la relación de la venta con la remisión."
- Exit For
- End If
-
- For Each Dr As DataRow In DtMovtosDev.FiltraParametros($"CveVentaDetalle = {DrRem("CveVentaDetalle").ToString.ToEntero}").Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=CveVentaDetalleRem, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al guardar los movimientos de salida de traspaso de devolucion de remisión."
- Exit For
- End If
- Next
-
- If ErrorMovInv Then
- Exit For
- End If
- Next
-
- If ErrorMovInv Then
- Exit For
- End If
-
- 'ENTRADA POR TRAPASO A ENTREGA POR ADELANTADO
- If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaDevRem, UsuarioActual.CveEmpresa) Then
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al guardar los movimientos de entrada de traspaso de devolucion de remisión."
- Exit For
- End If
- Next
-
- If ErrorMovInv Then
- Exit For
- End If
-
- Else
- ErrorMovInv = True
- TextoError = "Ocurrió un error al obtener los detalles de la devolución de almacén"
- Exit For
- End If
-
-
- If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, DrMovtos("CveRem").ToString.ToEntero) Then
- TextoError = "Ocurrió un error al hacer la devolucion hacia la remision. Por favor vuelva a intentar."
- ErrorMovInv = True
- Exit For
- End If
-
- Next
- End If
- Else
- TextoError = "Ocurrió un error al hacer la devolucion a remisión. Por favor vuelva a intentar."
- ErrorMovInv = True
- End If
-
- End If
-
- 'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER)
- If Not ErrorMovInv And EsDevolucionVenta = 1 Then
- If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then
- TextoError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar."
- ErrorMovInv = True
- End If
- End If
-
- If Not ErrorMovInv And EsDevolucionVenta = 0 Then
- If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, CveVentaSurtir) Then
- TextoError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar."
- ErrorMovInv = True
- End If
- End If
-
- 'AGREGA BITACORA A VENTA
- If Not ErrorMovInv Then
- Dim MensajeBitacora = If(TipoMovimiento = 1, "Surtida", "Devuelta")
- If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: {1}", CveMovimiento, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaSurtir) Then
- ErrorMovInv = True
- End If
- End If
-
- If Not ErrorMovInv Then
- ObjInventario.Commit()
- RegistraScript("playsonidito('beep-07.wav')")
- Dim Msg As New StringBuilder
-
- Msg.AppendFormat("Movimiento Salida: {1}", CveMovimiento, Folio)
- Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento)))
-
-
- 'Msg.AppendFormat("")
- 'Dim script As String = "$('#TxtNumeroGuia').val($('#NumeroGuia').val());$('#BtnNumeroGuia').click();"
-
- If CveMovimientoEntrada > 0 Then
- Msg.AppendFormat("
Movimiento Entrada (Traspaso): {1}", CveMovimientoEntrada, FolioEntrada)
- Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada)))
- End If
-
-
- If DtTraspasos.Rows.Count > 0 Then
- Msg.AppendFormat("
Movimientos de Control (Apartados):")
- For Each Dr As DataRow In DtTraspasos.Rows
- Msg.AppendFormat(" Almacén {0} | Salida por Traspaso: {2} | Entrada por Traspaso: {4} ", Dr("Almacen"), Dr("CveMovimientoSalida"), Dr("FolioSalida"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada"))
- Next
- End If
-
- 'If CveMovimientoSalidaDevRem > 0 Then
- ' Msg.AppendFormat("
Movimiento de entrada de devolución (Traspaso): {1}", CveMovimientoEntradaDevRem, FolioMovimientoEntradaDevRem)
- ' Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntradaDevRem)))
- 'End If
-
- Alert(Msg.ToString, TipoMensaje.MsgInformacion)
-
- Limpia()
- CargaPendientes()
- Else
- Alert(TextoError, TipoMensaje.MsgError)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- ObjInventario.RollBack()
- End If
-
- ObjInventario.Dispose()
- ObjConta.Dispose()
- ObjVentas.Dispose()
- ObjEventos.Dispose()
- End Sub
-
- Private Sub GuardaTraspaso()
-
- 'OBLIGA A SURTIR TODO
- For Each Gvr As GridViewRow In GvDatos.Rows
- If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString.ToDecimal) Then
- Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- Exit Sub
- End If
- Next
-
- 'VALIDA TRANSITORIO
- If ChkTransitorio.Checked Then
- If TxtResponsable.Text.Trim = "" Then
- Alert("Debe seleccionar un responsable para el traspaso transitorio.", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')")
- If ChkTransitorio.Checked Then RegistraScript("$('#DivTransitorio').show(200);")
- Exit Sub
- End If
-
- If DdlAlmacenTransitorio.SelectedValue.ToEntero <= 0 Then
- Alert("Debe seleccionar un almacen transitorio.", TipoMensaje.MsgAdvertencia)
- RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')")
- If ChkTransitorio.Checked Then RegistraScript("$('#DivTransitorio').show(200);")
- Exit Sub
- End If
- End If
-
- Dim ObjInventario As New ClsInventarios : ObjInventario.IniciaTransacSQL()
- Dim CveMovimientoSalida As Integer
- Dim ConceptoMovimiento = 0
- Dim FolioSalida As Integer
- Dim CveMovimientoEntrada As Integer
- Dim FolioEntrada As Integer
- Dim ErrorMovInv As Boolean
- Dim DtDetalle As New DataTable
- Dim DtDetalleLote As New DataTable
- Dim TextoError = ""
-
- 'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
- Dim Index = 0
- For Each gvr As GridViewRow In GvDatos.Rows
- If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
- DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
- End If
- Index += 1
- Next
-
- 'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA
- Dim DtDatosTraspaso As New DataTable
- If ObjInventario.EntregaAlmacenTraspasosGet(CveTraspasoSurtir) Then
- DtDatosTraspaso = ObjInventario.DtResultados
- End If
- Dim CantidadGV = GvDatos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
- If DtDatos.SUM("CantidadF") <> DtDatosTraspaso.SUM("CantidadF") Then
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- CargaTraspasoPorSurtir(CveTraspasoSurtir)
- CargaPendientes()
- Alert("Ha sido cambiada la informacion de existencias del traspaso actual. Por favor verifique.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- 'VALIDA QUE EL TRASPASO SIGA VIGENTE
- If ObjInventario.AddTrasladoSolicitudGet(CveTraspasoSurtir, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 AndAlso ObjInventario.DtResultados.Rows(0)("CveTrasladoEstatus").ToString = "2" Then
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- CargaTraspasoPorSurtir(CveTraspasoSurtir)
- CargaPendientes()
- Alert("Ha sido cambiada la informacion del traspaso actual. Por favor verifique.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- 'VALIDA ALMACENES
- Dim Almacen1 = DdlAlmacen.SelectedValue.ToEntero
- Dim Almacen2 = CveAlmacenTraspasoDestino
- If Almacen1 <= 0 Or Almacen2 <= 0 Then
- Alert("Ocurrió un error al obtener los almacenes del movimiento. Por favor recargue y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- Exit Sub
- End If
-
- 'VERIFICAR EXISTENCIA
- Dim StrXML As New StringBuilder
- StrXML.Append("")
- For Each Dr As DataRow In DtDatos.Rows
- If Dr("CantidadGV").ToString.ToDecimal > 0 Then
- If Dr("Inv_CveMetodoInventario").ToString = "5" Then
- DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- For Each Dr1 As DataRow In DtDetalle.Rows
- StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), 1, Dr1("SerieLote"))
- Next
- ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
- DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
- For Each Dr1 As DataRow In DtDetalle.Rows
- StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'"), Dr1("Lote"))
- Next
- Else
- StrXML.AppendFormat("", Dr("CvePS"), Dr("CveUM"), Dr("CantidadGV"), "-1")
- End If
- End If
- Next
- StrXML.Append("")
-
- Dim TieneErrorExistencia = False
- If ObjInventario.GetExistenciasPSXML(StrXML.ToString(), DdlAlmacen.SelectedValue.ToEntero, TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveSubProyecto, CveVendedor, If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), 1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
- If ObjInventario.DtResultados.Rows.Count > 0 Then
- TieneErrorExistencia = True
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- TextoError += $" - {Dr("CodigoPS")} Existencia: {Dr("Existencia").ToString.ToDecimal.ToString("#,##0.##")} "
- Next
- End If
- Else
- TieneErrorExistencia = True
- End If
-
- If TieneErrorExistencia Then
- ObjInventario.RollBack()
- ObjInventario.Dispose()
- If TextoError.Length > 0 Then
- Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:
{TextoError}", TipoMensaje.MsgAdvertencia)
- End If
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- Exit Sub
- End If
-
- 'SALIDA POR TRASPASO
- If Not ErrorMovInv Then
- ConceptoMovimiento = 26
- CveMovimientoSalida = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:="", CveContrato:=-1, CveAlmacenDestino:=CveAlmacenTraspasoDestino, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, ""))
- FolioSalida = ObjInventario.Folio
- If CveMovimientoSalida > 0 Then
- Dim CantidadPendiente As Decimal = 0
-
- For Each Dr As DataRow In DtDatos.Rows
- DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
- DtDetalleLote = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
- If DtDetalle.Rows.Count > 0 Then 'SI FUE POR SERIELOTE
- For Each Dr1 As DataRow In DtDetalle.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, 1, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=-1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- ElseIf DtDetalleLote.Rows.Count > 0 Then 'SI FUE POR LOTE BATCH
- For Each Dr1 As DataRow In DtDetalleLote.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr1("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVentaDetalle:=-1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
- Exit For
- End If
- Next
- Else 'NORMAL
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr("CantidadGV").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, -1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
- Exit For
- End If
- End If
- Next
- Else
- TextoError = "Ocurrió un error al generar el movimiento de salida."
- ErrorMovInv = True
- End If
- End If
-
- 'ENTRADA POR TRASPASO
- If Not ErrorMovInv Then
- 'sino es transitorio, los transitorios, ya no se hace otro movimiento
- If Not ChkTransitorio.Checked Then
- ConceptoMovimiento = 27 ' If(ChkTransitorio.Checked, 2, 27)
- Almacen2 = If(ChkTransitorio.Checked, DdlAlmacenTransitorio.SelectedValue.ToEntero, CveAlmacenTraspasoDestino)
- CveMovimientoEntrada = ObjInventario.AddMovimiento(Almacen2, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:="", CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimientoSalida, CveAlmacenDestino:=CveAlmacenTraspasoDestino, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, ""))
- FolioEntrada = ObjInventario.Folio
- If CveMovimientoEntrada > 0 Then
- If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
- For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
- ErrorMovInv = True
- TextoError = "Ocurrió un error al guardar los movimientos de entrada"
- Exit For
- End If
- Next
- End If
- Else
- TextoError = "Ocurrió un error al generar el movimiento de entrada"
- ErrorMovInv = True
- End If
- End If
-
- End If
-
- 'MARCA SOLICITUD CON EL MOVIMIENTO GENERADO
- If Not ErrorMovInv Then
- If Not ObjInventario.UpdateTraspasoSolicitudMovimiento(CveTraspasoSurtir, CveMovimientoSalida) Then
- TextoError = "Ocurrió un error al vincular los movimientos con la solicitud de traspaso. Por favor verifique y vuelva a intentar"
- ErrorMovInv = True
- End If
- End If
-
-
- If Not ErrorMovInv Then
- ObjInventario.Commit()
- RegistraScript("playsonidito('beep-07.wav')")
-
- Dim Msg As New StringBuilder
- Msg.AppendFormat("Movimiento Salida: {1}", CveMovimientoSalida, FolioSalida)
- Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalida)))
-
- Msg.AppendFormat("
Movimiento Entrada (Traspaso): {1}", CveMovimientoEntrada, FolioEntrada)
- Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada)))
-
- Alert(Msg.ToString, TipoMensaje.MsgInformacion)
-
- Limpia()
- CargaPendientes()
- Else
- Alert(TextoError, TipoMensaje.MsgError)
- RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
- ObjInventario.RollBack()
- End If
-
- ObjInventario.Dispose()
-
- End Sub
-
- Private Sub Limpia()
-
- 'DATOS DE LA VENTA
- LbCantidad.Text = ""
- LbCliente.Text = ""
- LbObservaciones.Text = ""
- 'LbFolio.Text = ""
- HLFolio.Text = ""
-
- 'DATOS DEL MOVIMINETO
- TxtObservaciones.Text = ""
- TxtFecha.Text = Now.ToShortDateString
- DdlAlmacen.SelectedValueExist(-1)
- CargaFolios()
-
- 'VARIABLES GENERALES
- CveVentaSurtir = -1
- DtDatosDetalle = Nothing
- DtDatosDetalleLote = Nothing
- DtDatos = Nothing
-
- DivTipoCambioAdvertencia.Visible = False
-
- 'TRASPASO
- DivTransitorio1.Visible = False
- ChkTransitorio.Checked = False
- TxtResponsable.Text = ""
- DivTransitorio2.Visible = False
-
- LbSurtida.Visible = False
- TimmerRefresh.Enabled = True
- UpGenerales.Update()
- CargaGvDatos()
- End Sub
-
-#End Region
-
-#Region " TRASPASO - TRANSITORIO "
- Protected Sub ChkTransitorio_CheckedChanged(sender As Object, e As EventArgs)
-
- TxtResponsable.Text = ""
- DivTransitorio2.Visible = ChkTransitorio.Checked
-
- 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("CvePS", 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)
-
- If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then
- Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen.", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- CantidadTotal = gvRow.FCTextBox("TbCantidadF").Text.ToDecimal
- IndexSeccionAlmacen = gvRow.RowIndex
- CvePS = gvRow.DataKey("CvePS").ToEntero
- CargaSeccionAlmacen()
- RegistraScript("$('#DModalSeccionAlmacen').modal()")
- End Sub
-
- Private Sub CargaSeccionAlmacen()
- Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}").SUMD("CantidadSeccionAlmacen")
- GvSeccion.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}")
- GvSeccion.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
- GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = False
- GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "Cuenta con sección almacen"
-
- Else
- GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = True
- GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = ""
-
- End If
-
- If DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") > 0 Then
- DdlAlmacen.Enabled = False
- DdlAlmacen.ToolTip = "Cuenta con sección almacen"
- Else
- DdlAlmacen.Enabled = True
- DdlAlmacen.ToolTip = ""
- End If
-
- UpModalSeccionAlmacen.Update()
- UpDatos.Update()
- UpGenerales.Update()
- End Sub
-
- Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs)
-
- Dim ObjInv As New ClsInventarios
- Dim CantidadDisponible As Decimal = 0
- If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlSeccionAlmacen.SelectedValue.ToEntero, DdlAlmacen.SelectedValue.ToEntero,
- CvePS, UsuarioActual.CveEmpresa) Then
- If ObjInv.DtResultados.Rows.Count > 0 Then
- CantidadDisponible = ObjInv.DtResultados.Rows(0)("CantidadRestante").ToString.ToDecimal
- End If
- End If
- ObjInv.Dispose()
-
- CantidadDisponible -= DtSeccionAlmacen.FiltraParametros($"CvePS = {CvePS} AND CveSeccionAlmacen = {DdlSeccionAlmacen.SelectedValue}").SUMD("CantidadSeccionAlmacen")
-
- If TxtCantidadSeccion.Text.ToDecimal > CantidadDisponible Then
- Alert($"No tiene cantidad de producto suficiente en esta seccion de almacen, su cantidad restante es: {CantidadDisponible}", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- Dim Row As DataRow = Nothing
- DtSeccionAlmacen.AcceptChanges()
- Row = DtSeccionAlmacen.NewRow
- Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal
- Row("IndexSeccionAlmacen") = IndexSeccionAlmacen
- Row("CveSeccionAlmacen") = DdlSeccionAlmacen.SelectedValue.ToEntero
- Row("SeccionAlmacen") = DdlSeccionAlmacen.SelectedItem.Text
- Row("CvePS") = CvePS
- 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
-
- Protected Sub LnkVerSecciones_Click(sender As Object, e As EventArgs)
- If Not CveVentaSurtir > 0 Then
- Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then
- Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
-
- Dim ObjInv As New ClsInventarios
- If ObjInv.GetExistenciaSeccionAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then
- GvVerSeccionesAlmacen.DataSource = ObjInv.DtResultados
- End If
- ObjInv.Dispose()
- GvVerSeccionesAlmacen.DataBind()
- UpVerSeccionesAlmacen.Update()
- RegistraScript("$('#ModalVerSeccionesAlmacen').modal()")
- End Sub
-
-#End Region
-
-
-
-#Region " GUIAS - SABE QUE ES PORQUE NO VEO QUE SE UTILIZE EN ALGUNA PARTE - EN MIRAS DE ELIMINAR - IPP 24 AGOSTO 2017 "
- Private Sub BtnNumeroGuia_Click(sender As Object, e As EventArgs) Handles BtnNumeroGuia.Click
- Dim Objeto As New ClsInventarios
- If Objeto.UpdateMovimientoGuia(TxtGuia.Text, CveMovimiento, UsuarioActual.CveEmpresa) Then
- Alert("Se ha guardado correctamente la póliza", TipoMensaje.MsgConfirmacion)
- End If
- Objeto.Dispose()
- End Sub
-
- Private Sub GvDocs_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDocs.RowDataBound
-
- If e.Row.RowType = DataControlRowType.DataRow Then
-
- Dim ImgDownLoad As Literal = e.Row.FCLiteral("HplDown")
- Dim Adjunto As String = e.Row.DBCampo("Adjunto").ToString
- Dim ArchivoRuta As String = ""
-
- If Adjunto.Trim.Length > 0 Then
- ArchivoRuta = UsuarioActual.Empresa.Ruta & "Documentacion\Ventas\" & Adjunto
- Dim fi As New FileInfo(ArchivoRuta)
- Dim linkDescarga As String = ""
- If fi.Exists() Then
- linkDescarga = $"/Empresas/{UsuarioActual.CveEmpresa}/Documentacion/ventas/{fi.Name}"
- ImgDownLoad.Visible = True
- ImgDownLoad.Text = String.Format(" ", linkDescarga)
-
-
- End If
-
- End If
-
- End If
-
- End Sub
-#End Region
-
-
-
-
-End Class
+ If AutoConta And Not ErrorMovInv Then
+ Dim ObjContPaq = New ClsContPAQi(UsuarioActual.Empresa)
+
+ If IdCtaContable > 0 Then
+ If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContPaq) Then
+ Alert("Ocurrio un Error al contabilizar, pongase en contacto con Soporte Técnico")
+ End If
+ Else
+ Alert(String.Format("No se puede contabilizar ya que falta asignación de las cuentas contables"), TipoMensaje.MsgAdvertencia)
+ End If
+
+ ObjContPaq.Dispose()
+ End If
+
+ Else
+ ErrorMovInv = True
+ TextoError = "Ocurrió un Error al ingresar las prepolizas"
+ End If
+
+ End If
+ End If
+ End If
+
+ End If
+
+ 'DEVOLUCION APARTADOS
+ If Not ErrorMovInv Then
+ If TipoMovimiento = 2 Then
+ If ObjInventario.VentasAlmacenApartadosGet(CveVentaSurtir) Then
+
+ Dim DtTempApartados = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 9", "CveAlmacen")
+ Dim CveMovimientoSalidaApartado = -1
+ Dim CveAlmacenApartado = -1
+ Dim CveAlmacenOrigen = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero)
+
+ For Each Dr As DataRow In DtTempApartados.Rows
+
+ If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString.ToEntero Then
+ CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, CveAlmacenDestino:=Dr("CveAlmacen").ToString.ToEntero)
+ FolioSalida = ObjInventario.Folio
+ CveAlmacenApartado = Dr("CveAlmacen").ToString.ToEntero
+
+ Dim DrMovto = DtTraspasos.NewRow
+ DrMovto("Almacen") = Dr("Almacen").ToString.ToEntero
+ DrMovto("CveAlmacen") = Dr("CveAlmacen").ToString.ToEntero
+ DrMovto("CveMovimientoSalida") = CveMovimientoSalidaApartado
+ DrMovto("FolioSalida") = FolioSalida
+ DtTraspasos.Rows.Add(DrMovto)
+ End If
+
+ If Not CveMovimientoSalidaApartado > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al guardar los movimientos de control de apartados"
+ Exit For
+ End If
+
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al guardar los movimientos de control de apartados"
+ Exit For
+ End If
+ Next
+
+ If Not ErrorMovInv Then
+ For Each Dr1 As DataRow In DtTraspasos.Rows
+ CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString.ToEntero
+
+ CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString.ToEntero, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero, CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente)
+ FolioEntrada = ObjInventario.Folio
+
+ If Not CveMovimientoEntradaApartado > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+
+ Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
+ Dr1("FolioEntrada") = FolioEntrada
+
+ If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ End If
+
+ If ErrorMovInv Then Exit For
+
+ Next
+ End If
+
+ End If
+ End If
+ End If
+
+ 'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION
+ If Not ErrorMovInv And EsDevolucionVenta = 1 And TipoDocto = "Ing" Then
+ Dim DtDevRem As New DataTable
+ Dim DtMovtosDev As New DataTable
+ Dim CveAlmacenTraspasoDestinoDevRem = -1
+
+ Dim CveVentaDetalleRem = -1
+ Dim CantidadDevolver As Decimal = 0
+ Dim CantidadRem As Decimal = 0
+
+ 'CARGA REMISIONES DE LA VENTA DEVUELTA
+ If ObjInventario.GetDevolucionRemisionesFacturadas(CveVentaSurtir) Then
+ DtDevRem = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen > 0")
+ Else
+ ErrorMovInv = True
+ End If
+
+ 'CARGA CONCEPTOS DEVUELTOS EN LA VENTA
+ If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
+ DtMovtosDev = ObjInventario.DtResultados
+ Else
+ ErrorMovInv = True
+ End If
+
+ If Not ErrorMovInv Then
+ If DtDevRem.Rows.Count > 0 And DtMovtosDev.Rows.Count > 0 Then
+
+ For Each DrMovtos As DataRow In DtDevRem.FiltraParametros("", "CveRem", {"CveRem", "CveAlmacenTraspasoDestino"}).Rows
+ CveAlmacenTraspasoDestinoDevRem = DrMovtos("CveAlmacenTraspasoDestino").ToString.ToEntero
+ If Not CveAlmacenTraspasoDestinoDevRem > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al obtener el almacén de devolucion de remisión."
+ Exit For
+ End If
+
+ 'SALIDA GENERAL
+ CveMovimientoSalidaDevRem = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=CveAlmacenTraspasoDestinoDevRem)
+ FolioMovimientoSalidaDevRem = ObjInventario.Folio
+
+ 'ENTRADA ADELANTADO
+ CveMovimientoEntradaDevRem = ObjInventario.AddMovimiento(CveAlmacenTraspasoDestinoDevRem, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimientoSalidaDevRem, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero)
+ FolioMovimientoEntradaDevRem = ObjInventario.Folio
+
+ If Not (CveMovimientoSalidaDevRem > 0 And CveMovimientoEntradaDevRem > 0) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al generar los movimientos de devolución a remisión."
+ Exit For
+ End If
+
+
+ 'SALIDA POR TRAPASO DE GENERAL
+ For Each DrRem As DataRow In DtDevRem.FiltraParametros($"CveRem = {DrMovtos("CveRem")}").Rows
+ CveVentaDetalleRem = DrRem("CveVentaDetalleRem").ToString.ToEntero
+ CantidadRem = DrRem("CantidadFacturada").ToString.ToDecimal
+ 'CantidadDevolver = DtMovtosDev.FiltroPrimeroValor("Cantidad", $"CveVentaDetalle = {DrRem("CveVentaDetalle").ToString.ToEntero}").ToDouble
+ 'If (Dr("Cantidad").ToString.ToDouble > CantidadRem, CantidadRem, Dr("Cantidad").ToString.ToDouble) Then
+
+ If Not CveVentaDetalleRem > 0 Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al obtener la relación de la venta con la remisión."
+ Exit For
+ End If
+
+ For Each Dr As DataRow In DtMovtosDev.FiltraParametros($"CveVentaDetalle = {DrRem("CveVentaDetalle").ToString.ToEntero}").Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDouble, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=CveVentaDetalleRem, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al guardar los movimientos de salida de traspaso de devolucion de remisión."
+ Exit For
+ End If
+ Next
+
+ If ErrorMovInv Then
+ Exit For
+ End If
+ Next
+
+ If ErrorMovInv Then
+ Exit For
+ End If
+
+ 'ENTRADA POR TRAPASO A ENTREGA POR ADELANTADO
+ If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaDevRem, UsuarioActual.CveEmpresa) Then
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al guardar los movimientos de entrada de traspaso de devolucion de remisión."
+ Exit For
+ End If
+ Next
+
+ If ErrorMovInv Then
+ Exit For
+ End If
+
+ Else
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al obtener los detalles de la devolución de almacén"
+ Exit For
+ End If
+
+
+ If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, DrMovtos("CveRem").ToString.ToEntero) Then
+ TextoError = "Ocurrió un error al hacer la devolucion hacia la remision. Por favor vuelva a intentar."
+ ErrorMovInv = True
+ Exit For
+ End If
+
+ Next
+ End If
+ Else
+ TextoError = "Ocurrió un error al hacer la devolucion a remisión. Por favor vuelva a intentar."
+ ErrorMovInv = True
+ End If
+
+ End If
+
+ 'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER)
+ If Not ErrorMovInv And EsDevolucionVenta = 1 Then
+ If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then
+ TextoError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar."
+ ErrorMovInv = True
+ End If
+ End If
+
+ If Not ErrorMovInv And EsDevolucionVenta = 0 Then
+ If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, CveVentaSurtir) Then
+ TextoError = "Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar."
+ ErrorMovInv = True
+ End If
+ End If
+
+ 'AGREGA BITACORA A VENTA
+ If Not ErrorMovInv Then
+ Dim MensajeBitacora = If(TipoMovimiento = 1, "Surtida", "Devuelta")
+ If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: {1}", CveMovimiento, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaSurtir) Then
+ ErrorMovInv = True
+ End If
+ End If
+
+ If Not ErrorMovInv Then
+ ObjInventario.Commit()
+ RegistraScript("playsonidito('beep-07.wav')")
+ Dim Msg As New StringBuilder
+
+ Msg.AppendFormat("Movimiento Salida: {1}", CveMovimiento, Folio)
+ Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento)))
+
+
+ 'Msg.AppendFormat("")
+ 'Dim script As String = "$('#TxtNumeroGuia').val($('#NumeroGuia').val());$('#BtnNumeroGuia').click();"
+
+ If CveMovimientoEntrada > 0 Then
+ Msg.AppendFormat("
Movimiento Entrada (Traspaso): {1}", CveMovimientoEntrada, FolioEntrada)
+ Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada)))
+ End If
+
+
+ If DtTraspasos.Rows.Count > 0 Then
+ Msg.AppendFormat("
Movimientos de Control (Apartados):")
+ For Each Dr As DataRow In DtTraspasos.Rows
+ Msg.AppendFormat(" Almacén {0} | Salida por Traspaso: {2} | Entrada por Traspaso: {4} ", Dr("Almacen"), Dr("CveMovimientoSalida"), Dr("FolioSalida"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada"))
+ Next
+ End If
+
+ 'If CveMovimientoSalidaDevRem > 0 Then
+ ' Msg.AppendFormat("
Movimiento de entrada de devolución (Traspaso): {1}", CveMovimientoEntradaDevRem, FolioMovimientoEntradaDevRem)
+ ' Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntradaDevRem)))
+ 'End If
+
+ Alert(Msg.ToString, TipoMensaje.MsgInformacion)
+
+ Limpia()
+ CargaPendientes()
+ Else
+ Alert(TextoError, TipoMensaje.MsgError)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ ObjInventario.RollBack()
+ End If
+
+ ObjInventario.Dispose()
+ ObjConta.Dispose()
+ ObjVentas.Dispose()
+ ObjEventos.Dispose()
+ End Sub
+
+ Private Sub GuardaTraspaso()
+
+ 'OBLIGA A SURTIR TODO
+ For Each Gvr As GridViewRow In GvDatos.Rows
+ If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString.ToDecimal) Then
+ Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ Exit Sub
+ End If
+ Next
+
+ 'VALIDA TRANSITORIO
+ If ChkTransitorio.Checked Then
+ If TxtResponsable.Text.Trim = "" Then
+ Alert("Debe seleccionar un responsable para el traspaso transitorio.", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')")
+ If ChkTransitorio.Checked Then RegistraScript("$('#DivTransitorio').show(200);")
+ Exit Sub
+ End If
+
+ If DdlAlmacenTransitorio.SelectedValue.ToEntero <= 0 Then
+ Alert("Debe seleccionar un almacen transitorio.", TipoMensaje.MsgAdvertencia)
+ RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')")
+ If ChkTransitorio.Checked Then RegistraScript("$('#DivTransitorio').show(200);")
+ Exit Sub
+ End If
+ End If
+
+ Dim ObjInventario As New ClsInventarios : ObjInventario.IniciaTransacSQL()
+ Dim CveMovimientoSalida As Integer
+ Dim ConceptoMovimiento = 0
+ Dim FolioSalida As Integer
+ Dim CveMovimientoEntrada As Integer
+ Dim FolioEntrada As Integer
+ Dim ErrorMovInv As Boolean
+ Dim DtDetalle As New DataTable
+ Dim DtDetalleLote As New DataTable
+ Dim TextoError = ""
+
+ 'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
+ Dim Index = 0
+ For Each gvr As GridViewRow In GvDatos.Rows
+ If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
+ DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
+ End If
+ Index += 1
+ Next
+
+ 'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA
+ Dim DtDatosTraspaso As New DataTable
+ If ObjInventario.EntregaAlmacenTraspasosGet(CveTraspasoSurtir) Then
+ DtDatosTraspaso = ObjInventario.DtResultados
+ End If
+ Dim CantidadGV = GvDatos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
+ If DtDatos.SUM("CantidadF") <> DtDatosTraspaso.SUM("CantidadF") Then
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ CargaTraspasoPorSurtir(CveTraspasoSurtir)
+ CargaPendientes()
+ Alert("Ha sido cambiada la informacion de existencias del traspaso actual. Por favor verifique.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ 'VALIDA QUE EL TRASPASO SIGA VIGENTE
+ If ObjInventario.AddTrasladoSolicitudGet(CveTraspasoSurtir, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 AndAlso ObjInventario.DtResultados.Rows(0)("CveTrasladoEstatus").ToString = "2" Then
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ CargaTraspasoPorSurtir(CveTraspasoSurtir)
+ CargaPendientes()
+ Alert("Ha sido cambiada la informacion del traspaso actual. Por favor verifique.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ 'VALIDA ALMACENES
+ Dim Almacen1 = DdlAlmacen.SelectedValue.ToEntero
+ Dim Almacen2 = CveAlmacenTraspasoDestino
+ If Almacen1 <= 0 Or Almacen2 <= 0 Then
+ Alert("Ocurrió un error al obtener los almacenes del movimiento. Por favor recargue y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ Exit Sub
+ End If
+
+ 'VERIFICAR EXISTENCIA
+ Dim StrXML As New StringBuilder
+ StrXML.Append("")
+ For Each Dr As DataRow In DtDatos.Rows
+ If Dr("CantidadGV").ToString.ToDecimal > 0 Then
+ If Dr("Inv_CveMetodoInventario").ToString = "5" Then
+ DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), 1, Dr1("SerieLote"))
+ Next
+ ElseIf Dr("Inv_CveMetodoInventario").ToString = "6" Then
+ DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ StrXML.AppendFormat("", Dr1("CvePS"), Dr1("CveUM"), DtDatosDetalleLote.SUM("Cantidad", $"Lote = '{Dr1("Lote").ToString}' AND Batch = '{Dr1("Batch").ToString}'"), Dr1("Lote"))
+ Next
+ Else
+ StrXML.AppendFormat("", Dr("CvePS"), Dr("CveUM"), Dr("CantidadGV"), "-1")
+ End If
+ End If
+ Next
+ StrXML.Append("")
+
+ Dim TieneErrorExistencia = False
+ If ObjInventario.GetExistenciasPSXML(StrXML.ToString(), DdlAlmacen.SelectedValue.ToEntero, TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveSubProyecto, CveVendedor, If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), 1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
+ If ObjInventario.DtResultados.Rows.Count > 0 Then
+ TieneErrorExistencia = True
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ TextoError += $" - {Dr("CodigoPS")} Existencia: {Dr("Existencia").ToString.ToDecimal.ToString("#,##0.##")} "
+ Next
+ End If
+ Else
+ TieneErrorExistencia = True
+ End If
+
+ If TieneErrorExistencia Then
+ ObjInventario.RollBack()
+ ObjInventario.Dispose()
+ If TextoError.Length > 0 Then
+ Alert($" Lo(s) siguiente(s) Productos no tienen existencia suficiente:
{TextoError}", TipoMensaje.MsgAdvertencia)
+ End If
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ Exit Sub
+ End If
+
+ 'SALIDA POR TRASPASO
+ If Not ErrorMovInv Then
+ ConceptoMovimiento = 26
+ CveMovimientoSalida = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:="", CveContrato:=-1, CveAlmacenDestino:=CveAlmacenTraspasoDestino, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, ""))
+ FolioSalida = ObjInventario.Folio
+ If CveMovimientoSalida > 0 Then
+ Dim CantidadPendiente As Decimal = 0
+
+ For Each Dr As DataRow In DtDatos.Rows
+ DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
+ DtDetalleLote = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
+ If DtDetalle.Rows.Count > 0 Then 'SI FUE POR SERIELOTE
+ For Each Dr1 As DataRow In DtDetalle.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, 1, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, SerieLote:=Dr1("SerieLote").ToString, CveVentaDetalle:=-1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ ElseIf DtDetalleLote.Rows.Count > 0 Then 'SI FUE POR LOTE BATCH
+ For Each Dr1 As DataRow In DtDetalleLote.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr1("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, Lote:=Dr1("Lote").ToString, Batch:=Dr1("Batch").ToString, CveVentaDetalle:=-1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
+ Exit For
+ End If
+ Next
+ Else 'NORMAL
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr("CantidadGV").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, -1, -1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
+ Exit For
+ End If
+ End If
+ Next
+ Else
+ TextoError = "Ocurrió un error al generar el movimiento de salida."
+ ErrorMovInv = True
+ End If
+ End If
+
+ 'ENTRADA POR TRASPASO
+ If Not ErrorMovInv Then
+ 'sino es transitorio, los transitorios, ya no se hace otro movimiento
+ If Not ChkTransitorio.Checked Then
+ ConceptoMovimiento = 27 ' If(ChkTransitorio.Checked, 2, 27)
+ Almacen2 = If(ChkTransitorio.Checked, DdlAlmacenTransitorio.SelectedValue.ToEntero, CveAlmacenTraspasoDestino)
+ CveMovimientoEntrada = ObjInventario.AddMovimiento(Almacen2, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:="", CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimientoSalida, CveAlmacenDestino:=CveAlmacenTraspasoDestino, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, ""))
+ FolioEntrada = ObjInventario.Folio
+ If CveMovimientoEntrada > 0 Then
+ If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
+ For Each Dr As DataRow In ObjInventario.DtResultados.Rows
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, Batch:=Dr("Batch").ToString) Then
+ ErrorMovInv = True
+ TextoError = "Ocurrió un error al guardar los movimientos de entrada"
+ Exit For
+ End If
+ Next
+ End If
+ Else
+ TextoError = "Ocurrió un error al generar el movimiento de entrada"
+ ErrorMovInv = True
+ End If
+ End If
+
+ End If
+
+ 'MARCA SOLICITUD CON EL MOVIMIENTO GENERADO
+ If Not ErrorMovInv Then
+ If Not ObjInventario.UpdateTraspasoSolicitudMovimiento(CveTraspasoSurtir, CveMovimientoSalida) Then
+ TextoError = "Ocurrió un error al vincular los movimientos con la solicitud de traspaso. Por favor verifique y vuelva a intentar"
+ ErrorMovInv = True
+ End If
+ End If
+
+
+ If Not ErrorMovInv Then
+ ObjInventario.Commit()
+ RegistraScript("playsonidito('beep-07.wav')")
+
+ Dim Msg As New StringBuilder
+ Msg.AppendFormat("Movimiento Salida: {1}", CveMovimientoSalida, FolioSalida)
+ Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalida)))
+
+ Msg.AppendFormat("
Movimiento Entrada (Traspaso): {1}", CveMovimientoEntrada, FolioEntrada)
+ Msg.AppendFormat(" Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada)))
+
+ Alert(Msg.ToString, TipoMensaje.MsgInformacion)
+
+ Limpia()
+ CargaPendientes()
+ Else
+ Alert(TextoError, TipoMensaje.MsgError)
+ RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
+ ObjInventario.RollBack()
+ End If
+
+ ObjInventario.Dispose()
+
+ End Sub
+
+ Private Sub Limpia()
+
+ 'DATOS DE LA VENTA
+ LbCantidad.Text = ""
+ LbCliente.Text = ""
+ LbObservaciones.Text = ""
+ 'LbFolio.Text = ""
+ HLFolio.Text = ""
+
+ 'DATOS DEL MOVIMINETO
+ TxtObservaciones.Text = ""
+ TxtFecha.Text = Now.ToShortDateString
+ DdlAlmacen.SelectedValueExist(-1)
+ CargaFolios()
+
+ 'VARIABLES GENERALES
+ CveVentaSurtir = -1
+ DtDatosDetalle = Nothing
+ DtDatosDetalleLote = Nothing
+ DtDatos = Nothing
+
+ DivTipoCambioAdvertencia.Visible = False
+
+ 'TRASPASO
+ DivTransitorio1.Visible = False
+ ChkTransitorio.Checked = False
+ TxtResponsable.Text = ""
+ DivTransitorio2.Visible = False
+
+ LbSurtida.Visible = False
+ TimmerRefresh.Enabled = True
+ UpGenerales.Update()
+ CargaGvDatos()
+ End Sub
+
+#End Region
+
+#Region " TRASPASO - TRANSITORIO "
+ Protected Sub ChkTransitorio_CheckedChanged(sender As Object, e As EventArgs)
+
+ TxtResponsable.Text = ""
+ DivTransitorio2.Visible = ChkTransitorio.Checked
+
+ 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("CvePS", 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)
+
+ If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then
+ Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ CantidadTotal = gvRow.FCTextBox("TbCantidadF").Text.ToDecimal
+ IndexSeccionAlmacen = gvRow.RowIndex
+ CvePS = gvRow.DataKey("CvePS").ToEntero
+ CargaSeccionAlmacen()
+ RegistraScript("$('#DModalSeccionAlmacen').modal()")
+ End Sub
+
+ Private Sub CargaSeccionAlmacen()
+ Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}").SUMD("CantidadSeccionAlmacen")
+ GvSeccion.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}")
+ GvSeccion.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
+ GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = False
+ GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "Cuenta con sección almacen"
+
+ Else
+ GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = True
+ GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = ""
+
+ End If
+
+ If DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") > 0 Then
+ DdlAlmacen.Enabled = False
+ DdlAlmacen.ToolTip = "Cuenta con sección almacen"
+ Else
+ DdlAlmacen.Enabled = True
+ DdlAlmacen.ToolTip = ""
+ End If
+
+ UpModalSeccionAlmacen.Update()
+ UpDatos.Update()
+ UpGenerales.Update()
+ End Sub
+
+ Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs)
+
+ Dim ObjInv As New ClsInventarios
+ Dim CantidadDisponible As Decimal = 0
+ If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlSeccionAlmacen.SelectedValue.ToEntero, DdlAlmacen.SelectedValue.ToEntero,
+ CvePS, UsuarioActual.CveEmpresa) Then
+ If ObjInv.DtResultados.Rows.Count > 0 Then
+ CantidadDisponible = ObjInv.DtResultados.Rows(0)("CantidadRestante").ToString.ToDecimal
+ End If
+ End If
+ ObjInv.Dispose()
+
+ CantidadDisponible -= DtSeccionAlmacen.FiltraParametros($"CvePS = {CvePS} AND CveSeccionAlmacen = {DdlSeccionAlmacen.SelectedValue}").SUMD("CantidadSeccionAlmacen")
+
+ If TxtCantidadSeccion.Text.ToDecimal > CantidadDisponible Then
+ Alert($"No tiene cantidad de producto suficiente en esta seccion de almacen, su cantidad restante es: {CantidadDisponible}", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ Dim Row As DataRow = Nothing
+ DtSeccionAlmacen.AcceptChanges()
+ Row = DtSeccionAlmacen.NewRow
+ Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal
+ Row("IndexSeccionAlmacen") = IndexSeccionAlmacen
+ Row("CveSeccionAlmacen") = DdlSeccionAlmacen.SelectedValue.ToEntero
+ Row("SeccionAlmacen") = DdlSeccionAlmacen.SelectedItem.Text
+ Row("CvePS") = CvePS
+ 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
+
+ Protected Sub LnkVerSecciones_Click(sender As Object, e As EventArgs)
+ If Not CveVentaSurtir > 0 Then
+ Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ If Not DdlAlmacen.SelectedValue.ToEntero > 0 Then
+ Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+ Dim ObjInv As New ClsInventarios
+ If ObjInv.GetExistenciaSeccionAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then
+ GvVerSeccionesAlmacen.DataSource = ObjInv.DtResultados
+ End If
+ ObjInv.Dispose()
+ GvVerSeccionesAlmacen.DataBind()
+ UpVerSeccionesAlmacen.Update()
+ RegistraScript("$('#ModalVerSeccionesAlmacen').modal()")
+ End Sub
+
+#End Region
+
+
+
+#Region " GUIAS - SABE QUE ES PORQUE NO VEO QUE SE UTILIZE EN ALGUNA PARTE - EN MIRAS DE ELIMINAR - IPP 24 AGOSTO 2017 "
+ Private Sub BtnNumeroGuia_Click(sender As Object, e As EventArgs) Handles BtnNumeroGuia.Click
+ Dim Objeto As New ClsInventarios
+ If Objeto.UpdateMovimientoGuia(TxtGuia.Text, CveMovimiento, UsuarioActual.CveEmpresa) Then
+ Alert("Se ha guardado correctamente la póliza", TipoMensaje.MsgConfirmacion)
+ End If
+ Objeto.Dispose()
+ End Sub
+
+ Private Sub GvDocs_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDocs.RowDataBound
+
+ If e.Row.RowType = DataControlRowType.DataRow Then
+
+ Dim ImgDownLoad As Literal = e.Row.FCLiteral("HplDown")
+ Dim Adjunto As String = e.Row.DBCampo("Adjunto").ToString
+ Dim ArchivoRuta As String = ""
+
+ If Adjunto.Trim.Length > 0 Then
+ ArchivoRuta = UsuarioActual.Empresa.Ruta & "Documentacion\Ventas\" & Adjunto
+ Dim fi As New FileInfo(ArchivoRuta)
+ Dim linkDescarga As String = ""
+ If fi.Exists() Then
+ linkDescarga = $"/Empresas/{UsuarioActual.CveEmpresa}/Documentacion/ventas/{fi.Name}"
+ ImgDownLoad.Visible = True
+ ImgDownLoad.Text = String.Format(" ", linkDescarga)
+
+
+ End If
+
+ End If
+
+ End If
+
+ End Sub
+#End Region
+
+
+
+
+End Class
diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb
index 8f13eb737..12c0b16df 100644
--- a/Ventas/Ventas.aspx.vb
+++ b/Ventas/Ventas.aspx.vb
@@ -17309,7 +17309,8 @@ Partial Class Ventas
End Sub
Private Sub LbCancelarDocumento_Click(sender As Object, e As EventArgs) Handles LbCancelarDocumento.Click
- If VentaSaldoAlmacen > 0 Then
+
+ If VentaSaldoAlmacen <> 0 Then
Alert("El pedido no se puede cancelar ya que tiene movimientos de almacén. Nota: Primero hay que hacer la devolución al almacén", TipoMensaje.MsgAdvertencia)
Else
If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Dev", "Egs") Then