Files
SIG/Inventarios/RecepcionAlmacen.aspx.vb

5184 lines
266 KiB
VB.net

Option Strict On
Option Explicit On
Imports System.Data
Imports System.IO
Imports Extensiones
Imports GemBox.Spreadsheet
Imports Microsoft.Reporting.WebForms
Partial Class Inventarios_RecepcionAlmacen
Inherits ClsPaginas
#Region "PROPIEDADES"
Private Property EstatusInicial As String
Get
EstatusInicial = ViewState("EstatusInicial").ToString
End Get
Set(value As String)
ViewState("EstatusInicial") = value
End Set
End Property
Private Property EstatusFinalOK As String
Get
EstatusFinalOK = ViewState("EstatusFinalOK").ToString
End Get
Set(value As String)
ViewState("EstatusFinalOK") = value
End Set
End Property
Private Property CveTipoAlmacen As Integer
Get
Return CType(ViewState("CveTipoAlmacen"), Integer)
End Get
Set(value As Integer)
ViewState("CveTipoAlmacen") = value
End Set
End Property
Private Property DtInv As DataTable
Get
If ViewState("DtInv") Is Nothing Then
Return New DataTable
Else
Return CType(ViewState("DtInv"), DataTable)
End If
End Get
Set(value As DataTable)
ViewState("DtInv") = value
End Set
End Property
Private Property dt As DataTable
Get
Return CType(ViewState("dt"), DataTable)
End Get
Set(value As DataTable)
ViewState("dt") = value
End Set
End Property
Private Property CveMoneda As Integer
Get
Return CType(ViewState("CveMoneda"), Integer)
End Get
Set(value As Integer)
ViewState("CveMoneda") = value
End Set
End Property
Private Property CveCompraParametro As Integer
Get
Return CType(ViewState("CveCompraParametro"), Integer)
End Get
Set(value As Integer)
ViewState("CveCompraParametro") = value
End Set
End Property
Private Property CveTipoCompra As Integer
Get
Return CType(IfNull(ViewState("CveTipoCompra"), 0), Integer)
End Get
Set(value As Integer)
ViewState("CveTipoCompra") = value
End Set
End Property
Private Property DtCuentas As DataTable
Get
Return CType(ViewState("DtCuentas"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtCuentas") = value
End Set
End Property
Private ReadOnly Property IdPoliza As Integer
Get
Return ViewState("IdPoliza").ToString.ToEntero
End Get
End Property
Private Property DtAlmacenesDevolucion As DataTable
Get
Return CType(ViewState("DtAlmacenesDevolucion"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtAlmacenesDevolucion") = 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 DtDatosLoteDetalle As DataTable
Get
Return CType(ViewState("DtDatosLoteDetalle"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtDatosLoteDetalle") = value
End Set
End Property
Private Property CvePSSerie As Integer
Get
Return CType(ViewState("CvePSSerie"), Integer)
End Get
Set(value As Integer)
ViewState("CvePSSerie") = value
End Set
End Property
Private Property CveUMSerie As Integer
Get
Return CType(ViewState("CveUMSerie"), Integer)
End Get
Set(value As Integer)
ViewState("CveUMSerie") = value
End Set
End Property
Private Property CantidadTotal As Decimal
Get
Return CType(ViewState("CantidadTotal"), Decimal)
End Get
Set(value As Decimal)
ViewState("CantidadTotal") = value
End Set
End Property
Private Property PUSerie As Decimal
Get
Return CType(ViewState("PUSerie"), Decimal)
End Get
Set(value As Decimal)
ViewState("PUSerie") = value
End Set
End Property
Private Property CveConsecSerie As Integer
Get
Return CType(ViewState("CveConsecSerie"), Integer)
End Get
Set(value As Integer)
ViewState("CveConsecSerie") = value
End Set
End Property
Private Property TotalGV As Decimal
Get
Return CType(ViewState("TotalGV"), Decimal)
End Get
Set(value As Decimal)
ViewState("TotalGV") = value
End Set
End Property
Private Property TotalCompraOC As Decimal
Get
Return CType(ViewState("TotalCompraOC"), Decimal)
End Get
Set(value As Decimal)
ViewState("TotalCompraOC") = value
End Set
End Property
Private Property TipoCambio As Decimal
Get
Return ViewState("TipoCambio").ToString.ToDecimal
End Get
Set(value As Decimal)
ViewState("TipoCambio") = value
End Set
End Property
Private Property DtBitacora As DataTable
Get
Return CType(ViewState("DtBitacora"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtBitacora") = value
End Set
End Property
Private Property RowIndexCantidadEspecial As Integer
Get
Return CType(ViewState("RowIndexCantidadEspecial"), Integer)
End Get
Set(value As Integer)
ViewState("RowIndexCantidadEspecial") = value
End Set
End Property
Private Property CantidadEspecialTemp As Decimal
Get
Return CType(ViewState("CantidadEspecialTemp"), Decimal)
End Get
Set(value As Decimal)
ViewState("CantidadEspecialTemp") = value
End Set
End Property
Private Property EntregaDirecta As Boolean
Get
Return CBool(ViewState("EntregaDirecta"))
End Get
Set(value As Boolean)
ViewState("EntregaDirecta") = value
End Set
End Property
Private Property RecibidaCompleta As Boolean
Get
Return CBool(ViewState("RecibidaCompleta"))
End Get
Set(value As Boolean)
ViewState("RecibidaCompleta") = value
End Set
End Property
Private Property Apartado As Boolean
Get
Return CBool(ViewState("Apartado"))
End Get
Set(value As Boolean)
ViewState("Apartado") = value
End Set
End Property
Private Property BuscaEntregaDirecta As Integer
Get
Return CType(ViewState("BuscaEntregaDirecta"), Integer)
End Get
Set(value As Integer)
ViewState("BuscaEntregaDirecta") = value
End Set
End Property
Private Property CveAlmacenApartado As Integer
Get
Return CType(ViewState("CveAlmacenApartado"), Integer)
End Get
Set(value As Integer)
ViewState("CveAlmacenApartado") = value
End Set
End Property
Private Property CveAlmacenDevolucionProveedor As Integer
Get
Return CType(ViewState("CveAlmacenDevolucionProveedor"), Integer)
End Get
Set(value As Integer)
ViewState("CveAlmacenDevolucionProveedor") = value
End Set
End Property
Private Property TipoMovimiento As Integer
Get
Return CType(ViewState("TipoMovimiento"), Integer)
End Get
Set(value As Integer)
ViewState("TipoMovimiento") = value
End Set
End Property
Private Property CveCompraSurtir As Integer
Get
Return CType(ViewState("CveCompraSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveCompraSurtir") = value
End Set
End Property
Private Property CveProveedor As Integer
Get
Return CType(ViewState("CveProveedor"), Integer)
End Get
Set(value As Integer)
ViewState("CveProveedor") = value
End Set
End Property
Private Property CvePrePolizaCompra As Integer
Get
Return CType(ViewState("CvePrePolizaCompra"), Integer)
End Get
Set(value As Integer)
ViewState("CvePrePolizaCompra") = value
End Set
End Property
Private Property CveOCSurtir As Integer
Get
Return CType(ViewState("CveOCSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveOCSurtir") = value
End Set
End Property
Private Property CveImportacionSurtir As Integer
Get
Return CType(ViewState("CveImportacionSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveImportacionSurtir") = value
End Set
End Property
Private Property CveImportacionCompra As Integer
Get
Return CType(ViewState("CveImportacionCompra"), Integer)
End Get
Set(value As Integer)
ViewState("CveImportacionCompra") = value
End Set
End Property
Private Property CveImportacionProveedor As Integer
Get
Return CType(ViewState("CveImportacionProveedor"), Integer)
End Get
Set(value As Integer)
ViewState("CveImportacionProveedor") = value
End Set
End Property
Private Property CveFleteSurtir As Integer
Get
Return CType(ViewState("CveFleteSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveFleteSurtir") = value
End Set
End Property
Private Property CveFleteOrdenCompra As Integer
Get
Return CType(ViewState("CveFleteOrdenCompra"), Integer)
End Get
Set(value As Integer)
ViewState("CveFleteOrdenCompra") = value
End Set
End Property
Private Property CveFleteCompra As Integer
Get
Return CType(ViewState("CveFleteCompra"), Integer)
End Get
Set(value As Integer)
ViewState("CveFleteCompra") = value
End Set
End Property
Private Property DtExistencias As DataTable
Get
Return CType(ViewState("DtExistencias"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtExistencias") = value
End Set
End Property
Private Property CveCliente As Integer
Get
Return CType(ViewState("CveCliente"), Integer)
End Get
Set(value As Integer)
ViewState("CveCliente") = value
End Set
End Property
Private Property CveVendedor As Integer
Get
Return CType(ViewState("CveVendedor"), Integer)
End Get
Set(value As Integer)
ViewState("CveVendedor") = value
End Set
End Property
Private Property RealizarTraspasoAlmacenDevolucion As Boolean
Get
Return If(IsNothing(ViewState("RealizarTraspasoAlmacenDevolucion")), False, CBool(ViewState("RealizarTraspasoAlmacenDevolucion")))
End Get
Set
ViewState("RealizarTraspasoAlmacenDevolucion") = Value
End Set
End Property
Private Property RealizarMovimientoVirtual As Boolean
Get
Return If(IsNothing(ViewState("RealizarMovimientoVirtual")), False, CBool(ViewState("RealizarMovimientoVirtual")))
End Get
Set
ViewState("RealizarMovimientoVirtual") = Value
End Set
End Property
Private Property SumarImporteUsados As Boolean
Get
Return If(IsNothing(ViewState("SumarImporteUsados")), False, CBool(ViewState("SumarImporteUsados")))
End Get
Set
ViewState("SumarImporteUsados") = Value
End Set
End Property
Private Property ValidarRecepcionUsados As Boolean
Get
Return If(IsNothing(ViewState("ValidarRecepcionUsados")), False, CBool(ViewState("ValidarRecepcionUsados")))
End Get
Set
ViewState("ValidarRecepcionUsados") = Value
End Set
End Property
Private Property ArchivoBitacora As String
Get
Return CType(ViewState("ArchivoBitacora"), String)
End Get
Set(value As String)
ViewState("ArchivoBitacora") = value
End Set
End Property
Private Property ArchivoBitacoraDetalle As String
Get
Return CType(ViewState("ArchivoBitacoraDetalle"), String)
End Get
Set(value As String)
ViewState("ArchivoBitacoraDetalle") = value
End Set
End Property
Private Property CveImportacionSeleccionada As Integer
Get
If ViewState("CveImportacionSeleccionada") Is Nothing Then
ViewState("CveImportacionSeleccionada") = -1
End If
Return ViewState("CveImportacionSeleccionada").ToString.ToEntero
End Get
Set(value As Integer)
ViewState("CveImportacionSeleccionada") = value
End Set
End Property
Private Property CveFleteSeleccionado As Integer
Get
If ViewState("CveFleteSeleccionado") Is Nothing Then
ViewState("CveFleteSeleccionado") = -1
End If
Return ViewState("CveFleteSeleccionado").ToString.ToEntero
End Get
Set(value As Integer)
ViewState("CveFleteSeleccionado") = value
End Set
End Property
#End Region
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
InicializaValores()
CargaUrlParametros()
CargaPendientes()
CargaPermisos()
If UsuarioActual.CveEmpresa.Contiene(72, 80) Then DdlAlmacen.AutoPostBack = True
Dim PermisoEspecialCambioFecha As Boolean = False
If UsuarioActual.CveUsuario.Contiene(100, 1937) Then PermisoEspecialCambioFecha = True
If UsuarioActual.Empresa.Funcionalidad(281).ToEntero = 1 AndAlso Not PermisoEspecialCambioFecha Then
TxtFecha.Enabled = False
ImgFecha.Visible = False
End If
End If
End Sub
#Region " PERMISOS PAGINAS "
Private Sub CargaPermisos()
'IMPORTES
Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201)
GvInv.Columns(8).Visible = TienePermisoImportes
GvInv.Columns(10).Visible = TienePermisoImportes
End Sub
#End Region
#Region " INICIALIZA VALORES "
Private Sub InicializaValores()
CveCompraParametro = -1
CveCompraSurtir = -1
CvePrePolizaCompra = -1
CveOCSurtir = -1
CveImportacionSurtir = -1
CveImportacionProveedor = -1
CveImportacionCompra = -1
CveFleteSurtir = -1
CveFleteOrdenCompra = -1
CveFleteCompra = -1
BuscaEntregaDirecta = -1
CveAlmacenApartado = -1
CveAlmacenDevolucionProveedor = -1
TipoMovimiento = 1
RealizarTraspasoAlmacenDevolucion = False
CantidadTotal = 0
ddlAlmacenAdd.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros("CveTipoAlmacen NOT IN (9)")
ddlAlmacenAdd.DataBind()
CargaAlmacenes(-1)
ddlProveedor.setEsWebService(UsuarioActual.Empresa.Funcionalidad(105) = "1")
If ddlProveedor.UsaWebService Then
ddlProveedor.Attributes.Add("data-metodo", "getproveedores")
Else
ddlProveedor.DataSource = GlobalDTCompProveedores(UsuarioActual.CveEmpresa)
ddlProveedor.DataBind()
ddlProveedor.ddl.Items.Insert(0, New ListItem("Seleccione el Proveedor", "-1"))
ddlProveedor.SelectedValue = "-1"
End If
DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlFolioOC.Items.Insert(0, New ListItem("Seleccione", "-1"))
ConfiguraTipoRecepcion()
If UsuarioActual.CveEmpresa = 119 Then
DivRemision.Visible = True
End If
TxtFechaPendientes.Text = Now.ToShortDateString
TipoCambio = -1
CreaDtDetalle()
ImgClose.Attributes.Add("onclick", "$('#DivAlmacen').hide();")
ImgAdd.Attributes.Add("onclick", "$('#DivAlmacen').hide();")
BtnGuardar.Visible = False
TxtFecha.Text = Now.ToShortDateString
If UsuarioActual.CveEmpresa.Contiene(119) Then RVFecha.MinimumValue = Now.ToShortDateString : CEFecha.StartDate = Now Else RVFecha.MinimumValue = MinFecha.ToShortDateString
InicializaBitacoraTemporal()
DdlMonedaTC.Enabled = False
RVFecha.MaximumValue = Now.ToShortDateString
CEFecha.EndDate = Now
End Sub
''' <summary>
''' Recarga los almacenes [DdlAlmacen] que se pueden usar para el movimiento
''' </summary>
''' <param name="CveSubProyecto"></param>
''' <param name="CveTiposAlmacen">Parametro sin espacios y separado por comas ["1,2,3,21"]</param>
Private Sub CargaAlmacenes(CveSubProyecto As Integer, Optional CveTiposAlmacen As String = "", Optional CveTipoCompra As Integer = -1)
Dim StrAlmacenes As String = ""
StrAlmacenes = $"CveTipoAlmacen IN ({If(CveTiposAlmacen.Length > 0, CveTiposAlmacen, "1,2,15,14,19")}) {If(CveSubProyecto > 0, $"And CveSubProyecto = {CveSubProyecto}", "")}"
If CveTipoCompra = 10 Then
StrAlmacenes = $"Modalidad = 0"
End If
DdlAlmacen.Items.Clear()
DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros(StrAlmacenes) 'GlobalDTAlmacen(UsuarioActual.CveEmpresa)
DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
DdlAlmacen.SelectedValue = "-1"
DdlAlmacen.DataBind()
If UsuarioActual.CveAlmacen > 0 Then
DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
RecargaporAlmacenes()
End If
UpGenerales.Update()
End Sub
Protected Sub DdlAlmacen_SelectedIndexChanged(sender As Object, e As EventArgs)
RecargaporAlmacenes()
End Sub
Private Sub RecargaporAlmacenes()
CveTipoAlmacen = -1
If DdlAlmacen.SelectedValue <> "-1" Then
Dim drr As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero).FiltroPrimero("")
If drr IsNot Nothing Then
CveTipoAlmacen = drr("CveTipoAlmacen").ToString.ToEntero
End If
CargaGVInv()
'For Each Gvr As GridViewRow In GvInv.Rows
' If Gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue = "-1" Then
' Dim Dr As DataRow = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero).FiltroPrimero("")
' If Dr IsNot Nothing Then
' Gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValueExist(Dr("CveSeccion"))
' End If
' End If
'Next
'UPInv.Update()
End If
End Sub
Private Sub ConfiguraTipoRecepcion()
DdlTipo.Items.Insert(0, New ListItem("Compra", "1"))
If UsuarioActual.Empresa.Funcionalidad(131).ToEntero > 0 Then
DdlTipo.Items.Add(New ListItem("OC", "2"))
End If
If UsuarioActual.Empresa.Funcionalidad(155).ToEntero > 0 Then
DdlTipo.Items.Add(New ListItem("Importación", "3"))
End If
If UsuarioActual.Empresa.Funcionalidad(158).ToEntero > 0 Then
DdlTipo.Items.Add(New ListItem("Costo Indirecto", "4"))
End If
UpFiltros.Update()
End Sub
#End Region
#Region " CARGA URL PARAMETROS "
Private Sub CargaUrlParametros()
CveCompraParametro = IfNull(Request("CveCompra"), "-1").ToString.ToEntero
BuscaEntregaDirecta = IfNull(Request("ED"), "-1").ToString.ToEntero
If CveCompraParametro > 0 Then
Dim ObjCompras As New ClsCompras
If ObjCompras.GetCompras(CveCompraParametro, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then
If ObjCompras.DtResultados.Rows.Count >= 1 Then
ddlProveedor.SelectedValue = ObjCompras.DtResultados.Rows(0)("CveProveedor").ToString
ddlProveedor.SelectedText = ObjCompras.DtResultados.Rows(0)("RazonSocial").ToString
ddlProveedor_SelectedIndexChanged(ddlProveedor, EventArgs.Empty)
If (DdlFolio.Items.FindByValue(CveCompraParametro.ToString) Is Nothing) Then
DdlFolio.Items.Insert(1, New ListItem(ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString, CveCompraParametro.ToString)) ' lo genera Obj.SelectedValue = Valor.ToString
End If
DdlFolio.SelectedValueExist(CveCompraParametro.ToString)
btnBuscar_Click(BtnBuscar, EventArgs.Empty)
Else
Alert("La Compra solicitada no se pudo encontrar. Por favor vuelva a intentar.", TipoMensaje.MsgAdvertencia)
End If
Else
Alert("Ocurrió un error al cargar los datos de la Compra. Por favor vuelva a intentar.", TipoMensaje.MsgError)
End If
ObjCompras.Dispose()
End If
End Sub
#End Region
#Region " MODALIDAD RECEPCION "
Protected Sub DdlTipo_SelectedIndexChanged(sender As Object, e As EventArgs)
ModalidadRecepcion()
End Sub
Private Sub ModalidadRecepcion()
LblCompra.Visible = False
DivCompra.Visible = False
LblOC.Visible = False
DivOC.Visible = False
LblImportacion.Visible = False
DivImportacion.Visible = False
LblFletes.Visible = False
DivFletes.Visible = False
LblFactura.Visible = False
DivDdlFactura.Visible = False
Select Case DdlTipo.SelectedValue.ToEntero
Case 1
LblCompra.Visible = True
DivCompra.Visible = True
Case 2
LblOC.Visible = True
DivOC.Visible = True
Case 3
LblImportacion.Visible = True
DivImportacion.Visible = True
LblFactura.Visible = True
DivDdlFactura.Visible = True
Case 4
LblFletes.Visible = True
DivFletes.Visible = True
LblIndirectoFactura.Visible = True
DivDdlIndirectoFactura.Visible = True
End Select
CargaFoliosRecepcion()
End Sub
#End Region
#Region " CARGA FOLIOS RECEPCION "
Protected Sub ddlProveedor_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlProveedor.selectedindexchange
CargaFoliosRecepcion()
'DdlTipo_SelectedIndexChanged(DdlTipo, EventArgs.Empty)
End Sub
Private Sub CargaFoliosRecepcion()
Select Case DdlTipo.SelectedValue.ToEntero
Case 1
CargaFolios()
Case 2
CargaFoliosOC()
Case 3
CargaFoliosImportacion()
Case 4
CargaFletes()
End Select
UpFiltros.Update()
End Sub
Private Sub CargaFolios()
DdlFolio.Items.Clear()
Dim ObjInventarios As New ClsInventarios
If ddlProveedor.SelectedValue.ToEntero > 0 Then
If ObjInventarios.ComprasPendientesAlmacenGet(ddlProveedor.SelectedValue.ToEntero, MinFecha.ToShortDateString.ToDate, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
Dim FiltroTemporal = " AND TipoDocto IN ('Fac','NC','DEV')"
DdlFolio.DataSource = ObjInventarios.DtResultados.FiltraParametros($"CantOC >= 0 {FiltroTemporal}")
Else
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
End If
ObjInventarios.Dispose()
DdlFolio.DataBind()
DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
End Sub
Private Sub CargaFoliosImportacion()
DdlFolioImportacion.Items.Clear()
Dim ObjInventarios As New ClsInventarios
If ddlProveedor.SelectedValue.ToEntero > 0 Then
If ObjInventarios.PendientesAlmacenImportacionGet(ddlProveedor.SelectedValue.ToEntero, MinFecha.ToShortDateString.ToDate, UsuarioActual.CveEmpresa) Then
DdlFolioImportacion.DataSource = ObjInventarios.DtResultados
Else
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
End If
ObjInventarios.Dispose()
DdlFolioImportacion.DataBind()
DdlFolioImportacion.Items.Insert(0, New ListItem("Seleccione", "-1"))
CargaFactura()
End Sub
Protected Sub DdlFolioImportacion_SelectedIndexChanged(sender As Object, e As EventArgs)
CargaFactura()
End Sub
Private Sub CargaFactura()
DdlFactura.Items.Clear()
Dim ObjInventarios As New ClsInventarios
If DdlFolioImportacion.SelectedValue.ToEntero > 0 Then
If ObjInventarios.PendientesAlmacenImportacionComprasGet(DdlFolioImportacion.SelectedValue.ToEntero, ddlProveedor.SelectedValue.ToEntero) Then
DdlFactura.DataSource = ObjInventarios.DtResultados
Else
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
End If
ObjInventarios.Dispose()
DdlFactura.DataBind()
DdlFactura.Items.Insert(0, New ListItem("Todos", "-1"))
End Sub
Private Sub CargaFletes()
DdlFletes.Items.Clear()
Dim ObjInventarios As New ClsInventarios
If ddlProveedor.SelectedValue.ToEntero > 0 Then
If ObjInventarios.GetFletes(UsuarioActual.CveEmpresa, CveProveedor:=ddlProveedor.SelectedValue.ToEntero, OpcionInventario:=1) Then
DdlFletes.DataSource = ObjInventarios.DtResultados.FiltraParametros("CantRest > 0")
Else
Alert("Ocurrió un error al obtener las ordenes de compra pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
End If
ObjInventarios.Dispose()
DdlFletes.DataBind()
DdlFletes.Items.Insert(0, New ListItem("Seleccione", "-1"))
End Sub
Protected Sub DdlFletes_SelectedIndexChanged(sender As Object, e As EventArgs)
CargaFletesFactura()
End Sub
Private Sub CargaFletesFactura()
DdlIndirectoFactura.Items.Clear()
Dim ObjInventarios As New ClsInventarios
If DdlFletes.SelectedValue.ToEntero > 0 Then
If ObjInventarios.GetFletesCompras(DdlFletes.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then
DdlIndirectoFactura.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()
DdlIndirectoFactura.DataBind()
'DdlIndirectoFactura.Items.Insert(0, New ListItem("Todos", "-1"))
End Sub
#End Region
#Region " CARGA POR SURTIR - GV "
Protected Sub TimmerRefresh_Tick(sender As Object, e As EventArgs)
CargaPendientes()
End Sub
Protected Sub BtnConsultarPendientes_Click(sender As Object, e As EventArgs)
CargaPendientes()
End Sub
Private Sub CargaPendientes()
Dim ObjInventarios As New ClsInventarios
Dim DtPendientes As New DataTable
If ObjInventarios.ComprasPendientesAlmacenGet(-1, TxtFechaPendientes.Text.ToDate, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
DtPendientes = ObjInventarios.DtResultados.FiltraParametros($"CantOC >= 0 AND TipoDocto IN ('Fac','NC','DEV') ")
Else
DtPendientes = Nothing
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
'If UsuarioActual.Empresa.Funcionalidad(539) = "1" Then
' BtnGuardar.Enabled = False
' Dim FI As Date = Now.AddDays(-1)
' Dim FF As Date = Now.AddDays(-7)
' If ObjInventarios.RepNotasSinAlmacen(2, -1, FI, FF, "-1", -1, UsuarioActual.Empresa.CveEmpresa) Then
' If ObjInventarios.DtResultados IsNot Nothing AndAlso ObjInventarios.DtResultados.Rows.Count > 1 Then
' BtnGuardar.Enabled = False
' Alert("No se podrá realizar recepción de mercancía si no se les da entrada a los documentos pendientes. Para más información ver el Reporte de notas sin entrada en la sección Compras.", TipoMensaje.MsgAdvertencia)
' Else
' BtnGuardar.Enabled = True
' End If
' End If
'End If
ObjInventarios.Dispose()
If DtPendientes IsNot Nothing Then
GVPendientes.DataSource = DtPendientes
End If
LtActualizado.Text = String.Format("Actualizado: {0}", Now.ToString("H:mm"))
GVPendientes.DataBind()
UpPendientes.Update()
End Sub
Protected Sub GVPendientes_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GVPendientes.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.FCLinkButton("BtnSurtir").CommandArgument = e.Row.DBCampo("CveCompra")
If e.Row.DBCampo("TipoDocto").ToString.Contiene({"Fac"}) And e.Row.DBCampo("EstatusAlmacen").ToString = "0" Then
e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary input-sm"
e.Row.FCLinkButton("BtnSurtir").Text = "<i class='fa fa-arrow-left'></i> Recibir"
Else
e.Row.FCLinkButton("BtnSurtir").CssClass = "btn yellow-gold input-sm"
e.Row.FCLinkButton("BtnSurtir").Text = " Devolver <i class='fa fa-arrow-right'></i>"
End If
If UsuarioActual.TienePermisoProceso(201) Then
e.Row.FCLabel("LblSerieFolio").Text = String.Format("<a class='Texto' href='/Compras/Compras.aspx?CveCompra={0}'>{1} </a>", e.Row.DataKey("CveCompra"), e.Row.FCLabel("LblSerieFolio").Text)
End If
End If
End Sub
#End Region
#Region " CARGA POR SURTIR "
Protected Sub btnBuscar_Click(sender As Object, e As EventArgs) Handles BtnBuscar.Click
'REINICIA VALORES
DdlMonedaTC.SelectedValueExist("1")
TipoCambio = -1
DivBitacora.Visible = False
DtBitacora.Clear()
GvInv.Columns(2).Visible = False
GvInv.Columns(3).Visible = False
CveCompraSurtir = -1
CvePrePolizaCompra = -1
CveOCSurtir = -1
CveImportacionSurtir = -1
CveImportacionProveedor = -1
CveImportacionCompra = -1
CveFleteSurtir = -1
CveFleteOrdenCompra = -1
CveFleteCompra = -1
DivAdvertencia.Visible = False
EntregaDirecta = False
DivTipoCambio.Visible = False
Apartado = False
CveAlmacenApartado = -1
CveAlmacenDevolucionProveedor = -1
RealizarTraspasoAlmacenDevolucion = False
RealizarMovimientoVirtual = False
SumarImporteUsados = False
ValidarRecepcionUsados = False
BtnGuardar.Enabled = True
CargaAlmacenes(-1)
DtInv = Nothing
TxtObservaciones.Text = ""
TxtOC.Text = ""
TxtFecha.Text = Now.ToShortDateString
DdlAlmacen.SelectedValueExist(-1)
TxtRemision.Text = ""
UpTipoCambio.Update()
UPInv.Update()
UpGenerales.Update()
UpFiltros.Update()
UpDatosCompra.Update()
CveImportacionSeleccionada = -1
CveFleteSeleccionado = -1
If TxtOC.Text <> "" Then
LtDocumento.Text = "ORDEN DE COMPRA"
CargaOC()
ElseIf DdlFolioOC.SelectedValue.ToEntero > 0 Then
LtDocumento.Text = "ORDEN DE COMPRA"
CargaOCPorSurtir(DdlFolioOC.SelectedValue.ToEntero)
ElseIf DdlFolio.SelectedValue.ToEntero > 0 Then
LtDocumento.Text = "COMPRA"
CargaCompra(DdlFolio.SelectedValue.ToEntero, ddlProveedor.SelectedValue.ToEntero)
ElseIf DdlFolioImportacion.SelectedValue.ToEntero > 0 Then
LtDocumento.Text = "IMPORTACIÓN"
CargaImportacionSurtir(DdlFolioImportacion.SelectedValue.ToEntero)
ElseIf DdlFletes.SelectedValue.ToEntero > 0 Then
LtDocumento.Text = "FLETE"
CargaFleteSurtir(DdlFletes.SelectedValue.ToEntero)
Else
Alert("Debe seleccionar algun criterio de busqueda (Compra, OC, Importación). Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
BtnGuardar.Visible = False
End If
CargaGVInv()
'DtSeccionAlmacen.Rows.Clear()
'DtSeccionAlmacen.AcceptChanges()
End Sub
Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs)
If CType(sender, LinkButton).CommandArgument.ToEntero > 0 Then
CargaCompra(CType(sender, LinkButton).CommandArgument.ToEntero, -1)
TimmerRefresh.Enabled = False
End If
End Sub
Private Sub CargaCompra(pCveCompra As Integer, pCveProveedor As Integer)
'CargaAlmacenes(-1)
RealizarTraspasoAlmacenDevolucion = False
RealizarMovimientoVirtual = False
SumarImporteUsados = False
ValidarRecepcionUsados = False
CveAlmacenDevolucionProveedor = -1
Dim ObjCompras As New ClsCompras
Dim ObjInventario As New ClsInventarios
If ObjCompras.GetCompras(pCveCompra, "-1", "-1", pCveProveedor, -1, UsuarioActual.CveEmpresa) Then
If ObjCompras.DtResultados.Rows.Count > 0 Then
CveCompraSurtir = pCveCompra
CveProveedor = pCveProveedor
CvePrePolizaCompra = ObjCompras.DtResultados.Rows(0)("CvePrePoliza").ToString.ToEntero
LbProveedor.Text = ObjCompras.DtResultados.Rows(0)("RazonSocial").ToString
HLFolio.Text = ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString
If UsuarioActual.TienePermisoProceso(201) Then
HLFolio.NavigateUrl = $"/Compras/Compras.aspx?CveCompra={CveCompraSurtir}"
End If
LbDescripcionCompra.Text = ObjCompras.DtResultados.Rows(0)("Descripcion").ToString
UpDatosCompra.Update()
CveMoneda = ObjCompras.DtResultados.Rows(0)("CveMoneda").ToString.ToEntero
lbDescripcion.Text = ObjCompras.DtResultados.Rows(0)("Descripcion").ToString
HdnTipoDocto.Value = ObjCompras.DtResultados.Rows(0)("TipoDocto").ToString
If UsuarioActual.CveEmpresa = 140 Then TxtObservaciones.Text = ObjCompras.DtResultados.Rows(0)("Descripcion").ToString
TipoCambio = ObjCompras.DtResultados.Rows(0)("TipoCambio").ToString.ToDecimal
TipoMovimiento = If(ObjCompras.DtResultados.Rows(0)("EstatusAlmacen").ToString.ToEntero = 1, 2, 1)
TipoMovimiento = If(ObjCompras.DtResultados.Rows(0)("TipoDocto").ToString.Contiene("NC", "DEV"), 3, TipoMovimiento)
TotalCompraOC = ObjCompras.DtResultados.Rows(0)("SubTotal").ToString.ToDecimal - ObjCompras.DtResultados.Rows(0)("Descuentos").ToString.ToDecimal
CveTipoCompra = ObjCompras.DtResultados.Rows(0)("CveTipoCompra").ToString.ToEntero
If CveTipoCompra = 9 Then ' apoyo logistico
CargaAlmacenes(-1, "27", CveTipoCompra)
ElseIf CveTipoCompra = 10 Then
CargaAlmacenes(-1, CveTipoCompra:=CveTipoCompra)
ElseIf TipoMovimiento = 3 Then 'devolucion al proveedor
CargaAlmacenes(-1, "1,21,2,27", CveTipoCompra)
Else
CargaAlmacenes(-1)
End If
RecibidaCompleta = False
'' carga desde excel
' HplCargaExcel.Enabled = True
Dim CargaSoloUsados As Boolean = False
If ObjInventario.RecepcionAlmacenGet(pCveCompra, BuscaEntregaDirecta, -1, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
Dim DtRecepcion As DataTable = ObjInventario.DtResultados.Copy()
DtInv = DtRecepcion
Dim NumUsados = ObjInventario.DtResultados.COUNT("EsUsado", "EsUsado = True").ToEntero()
Dim NumProductos = ObjInventario.DtResultados.COUNT("EsUsado", "EsUsado = False").ToEntero()
Dim CveSubProyecto As Integer
ArchivoBitacora = String.Format("{0}Temp\RecepcionDT_{1}_{2}.xml", UsuarioActual.Empresa.Ruta, UsuarioActual.CveUsuario, pCveCompra)
ArchivoBitacoraDetalle = String.Format("{0}Temp\RecepcionDTD_{1}_{2}.xml", UsuarioActual.Empresa.Ruta, UsuarioActual.CveUsuario, pCveCompra)
If ArchivoBitacora <> "" Then
Dim Archivo = New System.IO.FileInfo(ArchivoBitacora)
If Archivo.Exists() Then
HplCargaBitacora.Visible = True
uppCargaBitacora.Update()
End If
End If
If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
'SI LA COMPRA TIENE PRODUCTOS Y USADOS SOLO MOSTRAR LOS PRODUCTOS
If NumProductos > 0 AndAlso NumUsados > 0 Then
DtRecepcion = ObjInventario.DtResultados.FiltraParametros("EsUsado = False")
SumarImporteUsados = True
ValidarRecepcionUsados = True
'SI LA COMPRA TIENE PUROS USADOS, MOSTRAR LOS USADOS Y CARGAR LOS ALMACENES
ElseIf NumProductos = 0 AndAlso NumUsados > 0 Then
CargaSoloUsados = True
SumarImporteUsados = True
ValidarRecepcionUsados = True
DtRecepcion = ObjInventario.DtResultados.Copy()
If TipoMovimiento = 3 Then
CargaAlmacenes(DtRecepcion.Rows(0)("CveSubProyecto").ToString.ToEntero, "21", CveTipoCompra)
Else
CargaAlmacenes(DtRecepcion.Rows(0)("CveSubProyecto").ToString.ToEntero, "22", CveTipoCompra)
End If
Else
DtRecepcion = ObjInventario.DtResultados.Copy()
'VERIFICA LOS QUE TENGAN LAS CLASIFICACION DE USADOS
If ObjCompras.GetCompraDetalle(pCveCompra, UsuarioActual.CveEmpresa) Then
If ObjCompras.DtResultados.COUNT("Cantidad", "CveClasificacion=20519") > 0 Then
SumarImporteUsados = True
ValidarRecepcionUsados = True
Else
SumarImporteUsados = False
ValidarRecepcionUsados = False
End If
End If
End If
End If
CveSubProyecto = DtRecepcion.Rows(0)("CveSubProyecto").ToString.ToEntero
CveAlmacenDevolucionProveedor = DtRecepcion.Rows(0)("CveAlmacenDevolucionProveedor").ToString.ToEntero
'SI ES MOTOBATERIA NO GENERA MOVIMIENTO VIRTUAL
If UsuarioActual.Empresa.Funcionalidad(573) = "1" AndAlso (DtRecepcion.COUNT("CveTamaño", "CveTamaño > 0 AND CveTamaño <> 16") > 0) Then
RealizarMovimientoVirtual = True
DivVirtualAdvertencia.Visible = True
Else
RealizarMovimientoVirtual = False
DivVirtualAdvertencia.Visible = False
End If
'SI LA COMPRA ES DE TIPO "APOYO LOGISTICO" NO DEBE GENERAR VIRTUAL
If Not SumarImporteUsados AndAlso CveTipoCompra = 9 Then
RealizarMovimientoVirtual = False
DivVirtualAdvertencia.Visible = False
End If
If TipoMovimiento = 2 AndAlso CveAlmacenDevolucionProveedor > 0 Then
RealizarTraspasoAlmacenDevolucion = True
DivTraspasoDevolucion.Visible = True
LtlTextoDevolucion.Text = "La mercancía sera trasladada desde el almacen seleccionado al almacén de devolución"
ElseIf TipoMovimiento = 2 AndAlso GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=21).Rows.Count = 0 Then
LtlTextoDevolucion.Text = "La mercancía sera devuelta a el almacen seleccionado."
DivTraspasoDevolucion.Visible = True
End If
If UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
DivDocumentos.Visible = True
UpDocumentos.Update()
End If
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosLoteDetalle = Nothing
CreaDtLoteDetalle()
CreaDTInv(DtRecepcion)
BtnGuardar.Visible = True
'cuando están todos los detalles de la compra, nos indica que se va a recibir la totalidad de la compra
If DtRecepcion.Rows.Count = DtRecepcion.Rows(0)("NumDetalles").ToString.ToEntero Then
RecibidaCompleta = True
End If
''MONEDA DIFERENTE
If CveMoneda <> 1 Then
'DivTipoCambio.Visible = True
DdlMonedaTC.SelectedValueExist("2")
DdlMonedaTC_SelectedIndexChanged(DdlMonedaTC, EventArgs.Empty)
'TxtTipoCambio.Text = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate).ToString, TipoCambio.ToString)
TipoCambio = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal, TipoCambio)
LtAdvertencia.Text = "El cambio de moneda se aplicara al guardar el movimiento con el tipo de cambio indicado."
DivAdvertencia.Visible = True
End If
UpTipoCambio.Update()
''ENTREGA DIRECTA
If BuscaEntregaDirecta > 0 Then
If UsuarioActual.Empresa.Funcionalidad(149) = "1" Then
LtAdvertencia.Text = "La mercancía tendra salida inmediata por ser entrega directa al cliente"
DivAdvertencia.Visible = True
EntregaDirecta = True
CveCliente = DtRecepcion.Rows(0)("CveCliente").ToString.ToEntero
CveVendedor = DtRecepcion.Rows(0)("CveVendedor").ToString.ToEntero
If DtInv.COUNT("EntregaDirecta") <> DtInv.Rows.Count Then
Alert("Todos los conceptos deben estar facturados.", TipoMensaje.MsgAdvertencia)
BtnGuardar.Enabled = False
End If
End If
End If
If DtInv.Rows.Count = 0 Then
Alert("No hay productos pendientes de surtir de esta compra. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
Else
If DtRecepcion.Rows(0)("CveVendedor").ToString.ToEntero > 0 And DtRecepcion.Rows(0)("CveCliente").ToString.ToEntero > 0 Then
If DtInv.SUM("EntregaDirecta") > 0 Then
''ENTREGA DIRECTA
'LtAdvertencia.Text = "La mercancía tendra salida inmediata por ser entrega directa al cliente"
'DivAdvertencia.Visible = True
'EntregaDirecta = True
Else
'APARTADO
'If UsuarioActual.CveUsuario.Contiene(100) Or (DtRecepcion .Rows(0)("CveUsuarioOC").ToString.ToEntero = 1559 And DtRecepcion .Rows(0)("FechaIngOC").ToString.ToDateTime > "2017-04-24 12:00".ToDateTime) Then
If UsuarioActual.Empresa.Funcionalidad(148) = "1" Then
CveAlmacenApartado = DtRecepcion.Rows(0)("CveAlmacenApartado").ToString.ToEntero
DivAdvertencia.Visible = True
Apartado = True
If CveAlmacenApartado <= 0 Then
BtnGuardar.Enabled = False
LtAdvertencia.Text = "No se puede recibir la mercancía por ser de apartados y no contar con un almacen de apartado."
Else
LtAdvertencia.Text = "La mercancía sera traspasada a apartados"
If CargaSoloUsados Then
CargaAlmacenes(DtRecepcion.Rows(0)("CveSubProyecto").ToString.ToEntero, "22", CveTipoCompra)
Else
If TipoMovimiento <> 3 Then 'cuando no es devolución
CargaAlmacenes(DtRecepcion.Rows(0)("CveSubProyecto").ToString.ToEntero, CveTipoCompra:=CveTipoCompra)
End If
End If
End If
End If
'End If
End If
End If
End If
Dim CantidadFaltante As Decimal = DtRecepcion.SUMD("CantidadC", "CantidadF > 0")
If UsuarioActual.Empresa.UsaAC AndAlso CantidadFaltante > 0 Then
PnlAC.Visible = True
CargaAC()
LbTotalPorDevengar.Text = DtRecepcion.SUM("Total", "CantidadF > 0").FormatoNumero
End If
'Existencias
If TipoMovimiento = 2 Then
If ObjInventario.ComprasDevolucionExistenciasGet(CveCompraSurtir) Then
DtExistencias = ObjInventario.DtResultados.Copy
Else
Alert("No se pudieron cargar las existencias del movimiento de entrada, por lo cual no se podra hacer la devolución.", TipoMensaje.MsgError)
BtnGuardar.Enabled = False
End If
End If
End If
DivBitacora.Visible = True
If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
DivCodigoSeriePS.Visible = True
Else
DivCodigoSeriePS.Visible = False
End If
End If
Else
BtnGuardar.Visible = False
End If
ObjCompras.Dispose()
ObjInventario.Dispose()
CargaGVInv()
UpAdvertencias.Update()
UpDocumentos.Update()
End Sub
Private Sub CargaImportacionSurtir(pCveImportacion As Integer)
Dim ObjCompras As New ClsCompras
Dim ObjInventario As New ClsInventarios
If ObjCompras.GetImportaciones(pCveImportacion, -1, -1, "-1", "-1", UsuarioActual.CveEmpresa) Then
If ObjCompras.DtResultados.Rows.Count > 0 Then
CveImportacionSurtir = pCveImportacion
CveImportacionProveedor = ddlProveedor.SelectedValue.ToEntero
CveImportacionCompra = DdlFactura.SelectedValue.ToEntero
LbProveedor.Text = ObjCompras.DtResultados.Rows(0)("ProveedorCompra").ToString
HLFolio.Text = ObjCompras.DtResultados.Rows(0)("PedimentoDescripcion").ToString
If UsuarioActual.TienePermisoProceso(201) Then
HLFolio.NavigateUrl = $"/Compras/Importaciones.aspx?CveImportacion={CveImportacionSurtir}"
End If
UpDatosCompra.Update()
CveMoneda = 1
lbDescripcion.Text = ""
TipoMovimiento = 1
If ObjInventario.RecepcionAlmacenImportacionGet(CveImportacionSurtir, DdlFactura.SelectedValue.ToEntero, CveImportacionProveedor, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosLoteDetalle = Nothing
CreaDtLoteDetalle()
CreaDTInv(ObjInventario.DtResultados)
BtnGuardar.Visible = True
If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
CveImportacionSeleccionada = DdlFolioImportacion.SelectedValue.ToEntero
End If
End If
If DtInv Is Nothing OrElse DtInv.Rows.Count = 0 Then
Alert("No hay productos pendientes de surtir de esta importación. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
End If
DivBitacora.Visible = True
If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
DivCodigoSeriePS.Visible = True
Else
DivCodigoSeriePS.Visible = False
End If
If UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
DivDocumentos.Visible = True
UpDocumentos.Update()
End If
End If
Else
BtnGuardar.Visible = False
End If
ObjCompras.Dispose()
ObjInventario.Dispose()
CargaGVInv()
End Sub
Private Sub CargaFleteSurtir(pCveImportacion As Integer)
Dim ObjInventario As New ClsInventarios
If ObjInventario.GetFletes(UsuarioActual.CveEmpresa, CveFlete:=pCveImportacion) Then
If ObjInventario.DtResultados.Rows.Count > 0 Then
CveFleteSurtir = pCveImportacion
CveFleteOrdenCompra = ObjInventario.DtResultados.Rows(0)("CveOC").ToString.ToEntero
CveFleteCompra = DdlIndirectoFactura.SelectedValue.ToEntero 'ObjInventario.DtResultados.Rows(0)("CveCompra").ToString.ToEntero
CveImportacionCompra = CveFleteCompra ' se iguala para que al guardar el movimiento, se toma esta variable
LbProveedor.Text = ObjInventario.DtResultados.Rows(0)("RazonSocial").ToString
HLFolio.Text = ObjInventario.DtResultados.Rows(0)("Folio").ToString
If UsuarioActual.TienePermisoProceso(201) Then
HLFolio.NavigateUrl = $"/Inventarios/Fletes.aspx?CveFlete={CveFleteSurtir}"
End If
UpDatosCompra.Update()
CveMoneda = 1
lbDescripcion.Text = ""
TipoMovimiento = 1
If ObjInventario.RecepcionAlmacenFleteGet(CveFleteSurtir, CveFleteOrdenCompra, CveFleteCompra, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosLoteDetalle = Nothing
CreaDtLoteDetalle()
CreaDTInv(ObjInventario.DtResultados)
BtnGuardar.Visible = True
If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
CveFleteSeleccionado = DdlFletes.SelectedValue.ToEntero
End If
End If
If DtInv Is Nothing OrElse DtInv.Rows.Count = 0 Then
Alert("No hay productos pendientes de surtir de esta importación. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
End If
DivBitacora.Visible = True
If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
DivCodigoSeriePS.Visible = True
Else
DivCodigoSeriePS.Visible = False
End If
If UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
DivDocumentos.Visible = True
UpDocumentos.Update()
End If
End If
Else
BtnGuardar.Visible = False
End If
ObjInventario.Dispose()
CargaGVInv()
End Sub
#End Region
#Region " GVINV "
Private Sub CreaDTInv(TmDT As DataTable)
TmDT.Columns.Add("CveAlmacen", GetType(Integer))
TmDT.Columns.Add("PUExtranjero", GetType(Decimal))
TmDT.Columns.Add("CostoIndirectoExtranjero", GetType(Decimal))
TmDT.Columns.Add("Consec", GetType(Integer))
TmDT.Columns.Add("CantidadSurtidaPantalla", GetType(Decimal))
If Not TmDT.Columns.Contains("AplicaSeccion") Then
TmDT.Columns.Add("AplicaSeccion", GetType(Decimal))
End If
If Not TmDT.Columns.Contains("AplicaSerie") Then
TmDT.Columns.Add("AplicaSerie", GetType(Decimal))
End If
If Not TmDT.Columns.Contains("AplicaLote") Then
TmDT.Columns.Add("AplicaLote", GetType(Decimal))
End If
If Not TmDT.Columns.Contains("AplicaCaducidad") Then
TmDT.Columns.Add("AplicaCaducidad", GetType(Decimal))
End If
If Not TmDT.Columns.Contains("CostoIndirecto") Then
TmDT.Columns.Add("CostoIndirecto", GetType(Decimal))
End If
If Not TmDT.Columns.Contains("Lote") Then
TmDT.Columns.Add("Lote", GetType(String))
End If
If Not TmDT.Columns.Contains("CveSeccion") Then
TmDT.Columns.Add("CveSeccion", GetType(Integer))
End If
If Not TmDT.Columns.Contains("Caducidad") Then
TmDT.Columns.Add("Caducidad", GetType(Date))
End If
If Not TmDT.Columns.Contains("Seleccionado") Then
TmDT.Columns.Add("Seleccionado", GetType(Boolean))
End If
If Not TmDT.Columns.Contains("CantidadSeleccionada") Then
TmDT.Columns.Add("CantidadSeleccionada", GetType(Decimal))
End If
If Not TmDT.Columns.Contains("CveCategoria") Then
TmDT.Columns.Add("CveCategoria", GetType(Integer))
End If
GvInv.Columns(2).Visible = False
GvInv.Columns(3).Visible = False
GvInv.Columns(9).Visible = TmDT.SUM("CostoIndirecto") > 0
Dim VariableCampo = If(TipoMovimiento.Contiene(1, 3), "CantidadF", "CantidadS")
Dim Index = 1
For Each Dr As DataRow In TmDT.Rows
Dr("PUExtranjero") = Dr("PU")
Dr("CostoIndirectoExtranjero") = Dr("CostoIndirecto")
Dr("Consec") = Index
Index += 1
Dr("CantidadF") = Dr(VariableCampo)
If Dr(VariableCampo).ToString.ToDecimal <> Dr("CantidadC").ToString.ToDecimal Then
GvInv.Columns(3).Visible = True
End If
Dr("Caducidad") = Now
Next
DtInv = TmDT '.FiltraParametros("CantidadF > 0")
dt = TmDT
If DtInv.SUM("CantidadS") > 0 Then
GvInv.Columns(2).Visible = True
End If
End Sub
Private Sub CargaGVInv()
If UsuarioActual.CveEmpresa = 119 Then
DtInv = DtInv.FiltraParametros("", "PS")
End If
Dim AplicaSeccion, AplicaLote, AplicaCaducidad, AplicaSerie As Boolean
If DtInv IsNot Nothing AndAlso DtInv.Rows.Count > 0 Then
AplicaSerie = CBool(DtInv.MAX("AplicaSerie"))
AplicaSeccion = CBool(DtInv.MAX("AplicaSeccion"))
AplicaLote = CBool(DtInv.MAX("AplicaLote"))
AplicaCaducidad = CBool(DtInv.MAX("AplicaCaducidad"))
End If
If AplicaSeccion Then GvInv.Columns(11).Visible = True
If AplicaLote Then GvInv.Columns(12).Visible = True
If Not String.IsNullOrWhiteSpace(UsuarioActual.Empresa.Funcionalidad(147)) Then GvInv.Columns(13).HeaderText = UsuarioActual.Empresa.Funcionalidad(147)
If AplicaCaducidad Then GvInv.Columns(13).Visible = True
If AplicaSerie OrElse AplicaSeccion OrElse AplicaLote OrElse AplicaCaducidad Then
GvInv.Columns(14).Visible = True
End If
GvInv.DataSource = DtInv
GvInv.DataBind()
UPInv.Update()
End Sub
Protected Sub GvInv_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvInv.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
'If e.Row.DBCampo("CveMetodoInventario").ToString.Contiene("5", "6") Then
If CBool(e.Row.DBCampo("AplicaSerie")) Then
'If e.Row.DBCampo("CveMetodoInventario").ToString = "5" Then
e.Row.FCButton("BtnSerie").Visible = True
e.Row.FCButton("BtnSerie").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PU"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec"))
e.Row.FCTextBox("TbCantidadF").Enabled = False
e.Row.FCCheckBox("cbInv").Enabled = False
Dim Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DataKey("Consec"))).Rows.Count
e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString
'' Empresa Acumuladores
If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
If CveTipoAlmacen = 21 Then
e.Row.FCButton("BtnSerie").Visible = False
e.Row.FCTextBox("TbCantidadF").Enabled = True
e.Row.FCCheckBox("cbInv").Enabled = True
If UsuarioActual.TienePermisoProceso(345) Then 'carga la cantidad con el rol AD
e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").ToDecimal().ToString("{#,###.##}")
End If
End If
End If
'ElseIf e.Row.DBCampo("CveMetodoInventario").ToString = "6" Then
' e.Row.FCButton("BtnLote").Visible = True
' e.Row.FCButton("BtnLote").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PU"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec"))
' e.Row.FCTextBox("TbCantidadF").Enabled = False
' e.Row.FCCheckBox("cbInv").Enabled = False
' Dim Contador = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DataKey("Consec"))).Rows.Count
' e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString
'End If
Else
e.Row.FCButton("BtnSerie").Visible = False
e.Row.FCButton("BtnLote").Visible = False
e.Row.FCTextBox("TbCantidadF").Enabled = True
e.Row.FCTextBox("TbCantidadF").Attributes.Add("onblur", String.Format("ValidarCantidad(this,{0})", e.Row.DBCampo("CantidadF")))
e.Row.FCCheckBox("cbInv").Attributes.Add("onclick", String.Format("Check(this, {0}, {1});", e.Row.FCTextBox("TbCantidadF").ClientID, e.Row.DBCampo("CantidadF")))
If e.Row.DBCampo("EntregaDirecta").ToString = "1" And TipoMovimiento = 1 Then
e.Row.FCCheckBox("cbInv").Checked = True
e.Row.FCCheckBox("cbInv").Enabled = False
e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero
e.Row.FCTextBox("TbCantidadF").Enabled = False
End If
If UsuarioActual.TienePermisoProceso(345) Then 'carga la cantidad con el rol AD
e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero
End If
End If
If CBool(e.Row.DBCampo("AplicaSeccion")) Then
e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True
If DdlAlmacen.SelectedValue.ToEntero > 0 Then
CargaSeccionesAlmacen(e.Row.FCDropDownList("DdlSeccionAlmacen"), DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero, UsuarioActual.CveEmpresa, True)
'Dim dtsec As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero)
'e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtsec
'e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind()
'If dtsec.Rows.Count = 1 Then
' e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedIndex = 0
' e.Row.FCDropDownList("DdlSeccionAlmacen").Enabled = False
'Else 'si es mayor a uno que por default seleccione el primero, que seria el predeterminado
' e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedValueExist(dtsec.FiltroPrimeroValor("CveSeccionAlmacen", "Predeterminado = 1"))
'End If
'e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1"))
'dtsec.Dispose()
End If
e.Row.FCTextBox("TxtDividir").Visible = True
Else
e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = False
End If
If CBool(e.Row.DBCampo("AplicaCaducidad")) Then
e.Row.FCTextBox("TxtCaducidad").Visible = True
e.Row.FCLinkButton("LnkCaducidad").Visible = True
e.Row.FCTextBox("TxtCaducidad").Text = Now.ToShortDateString
e.Row.FCTextBox("TxtDividir").Visible = True
Else
e.Row.FCTextBox("TxtCaducidad").Visible = False
e.Row.FCLinkButton("LnkCaducidad").Visible = False
End If
If CBool(e.Row.DBCampo("AplicaLote")) Then
e.Row.FCTextBox("TxtLote").Visible = True
Else
e.Row.FCTextBox("TxtLote").Visible = False
End If
e.Row.FCButton("BtnDividir").Attributes.Add("onclick", String.Format("Dividir('{0}');", e.Row.FCTextBox("TxtDividir").ClientID))
e.Row.FCButton("BtnDividir").CommandArgument = e.Row.RowIndex.ToString
e.Row.FCTextBox("TxtDividir").Attributes.Add("onkeyup", String.Format("LimitaCantidad({0},this,'{1}');", e.Row.DBCampo("CantidadF"), e.Row.FCButton("BtnDividir").ClientID))
'FUNCIONALIDAD PISTOLA DE CODIGOS
If UsuarioActual.Empresa.Funcionalidad(132) = "1" And e.Row.DBCampo("CodigoBarras").Trim <> "" And Not UsuarioActual.TienePermisoProceso(174) Then
e.Row.FCTextBox("TbCantidadF").Enabled = False
If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then 'acumuladoras
If e.Row.DBCampo("CveCategoria") <> "249" Then
e.Row.FCTextBox("TbCantidadF").Enabled = True
End If
End If
End If
If e.Row.DBCampo("CantidadF").ToDecimal = 0 Then
e.Row.FCTextBox("TbCantidadF").Visible = False
e.Row.Cells(3).Text = "0"
e.Row.FCCheckBox("cbInv").Visible = False
End If
e.Row.FCLabel("LbTotal").Text = ((e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal).FormatoNumero
TotalGV += (e.Row.DBCampo("PU").ToDecimal + e.Row.DBCampo("CostoIndirecto").ToDecimal) * e.Row.DBCampo("CantidadF").ToDecimal
End If
If e.Row.RowType = DataControlRowType.Footer Then
Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201)
e.Row.FCLabel("LbTotal").Visible = TienePermisoImportes
If TienePermisoImportes Then
e.Row.FCLabel("LbTotal").Text = TotalGV.FormatoNumero
TotalGV = 0.0D
e.Row.Font.Bold = True
e.Row.Cells(6).Text = "Total"
e.Row.Cells(6).HorizontalAlign = HorizontalAlign.Right
End If
End If
End Sub
#End Region
#Region " AGREGAR "
#Region " AGREGA CON TXT | CODIGO - SERIE "
Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs)
If TxtCodigoPS.Text = "" Then
Exit Sub
End If
TdSeriePS.Visible = False
For Each Gvr As GridViewRow In GvInv.Rows
If Gvr.DataKey("CodigoBarras") = TxtCodigoPS.Text.Trim Then
Dim TxtCantidad = GvInv.Rows(Gvr.RowIndex).FCTextBox("TbCantidadF")
If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then
If Gvr.DataKey("AplicaSerie") = "True" Then
TdSeriePS.Visible = True
TxtSeriePS.Focus()
CveConsecSerie = Gvr.DataKey("Consec").ToEntero
CvePSSerie = Gvr.DataKey("CvePS").ToEntero
CveUMSerie = Gvr.DataKey("CveUM").ToEntero
Exit Sub
End If
Dim CantidadEspecial = Gvr.DataKey("CveClasificacion").ToString.ToEntero.Contiene(17601, 17881) OrElse Gvr.DataKey("CvePS").ToString.ToEntero.Contiene(343032, 343033)
If CantidadEspecial Then
RegistraScript("CantidadEspecial();window.setTimeout(FocusCantidadEspecial,200);")
LtlProductoCantidad.Text = $"{Gvr.DataKey("Codigo")}"
RowIndexCantidadEspecial = Gvr.RowIndex
CantidadEspecialTemp = Gvr.DataKey("CantidadF").ToDecimal
TxtCodigoPS.Text = ""
Exit Sub
Else
'VERIFICA EXISTENCIAS
Dim MensajeSinExistencias As New StringBuilder
If TipoMovimiento > 1 Then
Dim ExistenciaActual = DtInv.SUM("CantidadSurtidaPantalla", $"CvePS = {Gvr.DataKey("CvePS").ToEntero} AND CveUM = {Gvr.DataKey("CveUM").ToEntero} ") + 1
Dim ObjInventarios As New ClsInventarios
Dim Existencia = ObjInventarios.GetExistenciasPS(Gvr.DataKey("CvePS").ToEntero, Gvr.DataKey("CveUM").ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"))
ObjInventarios.Dispose()
If Existencia < ExistenciaActual Then
Alert($"El producto con el codigo de barras <b>{TxtCodigoPS.Text}</b> no tiene la existencia suficiente.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'EXISTENCIAS DE LA COMPRAR - PARA DEVOLUCION
If TipoMovimiento = 2 Then
If DtExistencias.SUM("Existencia", $"CvePS = {Gvr.DataKey("CvePS").ToEntero} AND CveUM = {Gvr.DataKey("CveUM").ToEntero}") < ExistenciaActual Then
Alert($"El producto con el codigo de barras <b>{TxtCodigoPS.Text}</b> no tiene la existencia suficiente de recepción.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
End If
End If
TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + 1).ToString.FormatoNumero
TxtCodigoPS.Text = ""
RegistraScript("playsonidito('beep-07.wav')")
UPInv.Update()
Dim Dr = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0)
Dr("CantidadSurtidaPantalla") = TxtCantidad.Text.ToDecimal
DtInv.AcceptChanges()
Exit Sub
End If
End If
Alert($"Ya se ha cargado la totalidad del Producto ""<b>{Gvr.DataKey("PS").ToString}</b>"" con el Codigo ""<b>{TxtCodigoPS.Text}</b>"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
Next
Alert($"No se ha encontrado un producto para surtir con el Codigo ""<b>{TxtCodigoPS.Text}</b>"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
TxtCodigoPS.Text = ""
End Sub
Protected Sub BtnSeriePS_Click(sender As Object, e As EventArgs)
AgregaSerie(TxtSeriePS.Text.Trim, 2, CargaMasivaSeries:=True)
TdSeriePS.Visible = False
TxtSeriePS.Text = ""
TxtCodigoPS.Text = ""
TxtCodigoPS.Focus()
UPInv.Update()
GvInv.DataSource = DtInv
GvInv.DataBind()
End Sub
Protected Sub BtnGuardarCantidadEspecial_Click(sender As Object, e As EventArgs)
AgregaCantidadEspecial()
End Sub
Private Sub AgregaCantidadEspecial()
Dim TxtCantidad = GvInv.Rows(RowIndexCantidadEspecial).FCTextBox("TbCantidadF")
If CantidadEspecialTemp - TxtCantidadEspecialDiv.Text.ToDecimal - TxtCantidad.Text.ToDecimal >= 0 Then
TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + TxtCantidadEspecialDiv.Text.ToDecimal).ToString.FormatoNumero
'RegistraScript("$('#ModalCantidad').modal('hide');")
RegistraScript("$('#DivCantidadEspecial').hide(200);")
UPInv.Update()
TxtCodigoPS.Focus()
RegistraScript("playsonidito('beep-07.wav')")
Else
Alert("La cantidad excede la pendiente por surtir. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
TxtCantidadEspecialDiv.Text = "1"
End Sub
#End Region
#Region " AGREGA POR SERIE/LOTE "
Protected Sub BtnSerie_Click(sender As Object, e As EventArgs)
Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c)
LbProducto.Text = Argumentos(3)
LbCantidad.Text = Argumentos(4).FormatoNumero
CvePSSerie = Argumentos(0).ToEntero
CveUMSerie = Argumentos(1).ToEntero
PUSerie = Argumentos(2).ToDecimal
CveConsecSerie = Argumentos(5).ToEntero
CargaSerie(1)
End Sub
Private Sub CreaDtDetalle()
If DtDatosDetalle Is Nothing Then
DtDatosDetalle = New DataTable
DtDatosDetalle.Columns.Add("Consec", GetType(Integer))
DtDatosDetalle.Columns.Add("ConsecId", GetType(Integer))
DtDatosDetalle.Columns.Add("CvePS", GetType(Integer))
DtDatosDetalle.Columns.Add("CveUM", GetType(Integer))
DtDatosDetalle.Columns.Add("PU", GetType(Decimal))
DtDatosDetalle.Columns.Add("Serie", GetType(String))
DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(String))
End If
End Sub
Private Sub CreaDTAlmacenDevolucion()
If DtAlmacenesDevolucion Is Nothing Then
DtAlmacenesDevolucion = New DataTable
DtAlmacenesDevolucion.Columns.Add("CveCompraDetalle", GetType(Integer))
DtAlmacenesDevolucion.Columns.Add("CveAlmacenOriginal", GetType(Integer))
End If
End Sub
Private Sub CargaSerie(Tipo As Integer, Optional CerrarCompletado As Boolean = False)
'RegistraScript("document.getElementById(""TxtSerie"").focus();")
RegistraScript("$('#DivSerie').modal();", "ModalLote")
GvSerie.DataSource = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC")
GvSerie.DataBind()
'VALIDA QUE SIGA AGREGANDO
If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count < LbCantidad.Text.ToEntero Then
BtnAgregarPS.Enabled = True
If CerrarCompletado Then
RegistraScript("$('#DivSerie').modal('hide');")
End If
Else
BtnAgregarPS.Enabled = True
End If
'SI TIENE ENTRADA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
Dim Contador = 0
For Each Gvr As GridViewRow In GvInv.Rows
If Gvr.DataKey("CvePS").ToEntero = CvePSSerie Then
Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
Gvr.FCCheckBox("cbInv").Enabled = False
Gvr.FCTextBox("TbCantidadF").Enabled = False
If DtDatosDetalle IsNot Nothing AndAlso Contador > 0 Then
Gvr.FCCheckBox("cbInv").Checked = True
Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString
ElseIf Gvr.DataKey("CantidadF").ToString.ToDecimal <> 0 Then
Gvr.FCCheckBox("cbInv").Checked = False
Gvr.FCTextBox("TbCantidadF").Text = "0"
End If
End If
Dim Dr = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0)
Dr("CantidadSurtidaPantalla") = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal
DtInv.AcceptChanges()
Next
UPInv.Update()
UpSerie.Update()
TxtSerie.Text = ""
TxtSerie.Focus()
If Tipo = 1 Then
RegistraScript(String.Format("$('#{0}').on('shown.bs.modal', function () {{$('#{0}').focus(); $('#{0}').trigger(jQuery.Event('keypress', {{which: 13}})); }});$('#DivSerie').modal('show'); ", TxtSerie.ClientID))
End If
End Sub
Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs)
AgregaSerie(TxtSerie.Text.Replace(" ", String.Empty), 1)
End Sub
Private Sub AgregaSerie(Serie As String, Tipo As Integer, Optional AlertaSonido As Boolean = True, Optional CargaMasivaSeries As Boolean = False)
If Serie.Trim = "" Then
Alert("El campo Serie es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim SeriesArreglo = Serie.Trim.Split(";"c)
'VALIDACION DE SERIES DUPLICADAS
Dim MensajeAlert As New StringBuilder
Dim DtDuplicado As New DataTable
'PARA VALIDAR SI LA SERIE ES IGUAL AL CODIGO O CODIGOBARRAS
Dim dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerie).FiltroPrimero("", "PS")
For Each Serie In SeriesArreglo
DtDuplicado = DtDatosDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Serie = '{Serie}'")
If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then
MensajeAlert.Append($"<br/> El numero de Serie <b>""{Serie}""</b> proporcionado ya se encuentra ingresado.")
TxtSerie.Text = ""
TxtSerie.Focus()
Continue For
End If
'PARA VALIDAR SI LA SERIE ES IGUAL AL CODIGO O CODIGOBARRAS
If Serie.ToUpper = dr("Codigo").ToString.ToUpper OrElse Serie.ToUpper = dr("CodigoBarras").ToString.ToUpper Then
MensajeAlert.Append($"<br/> El numero de Serie <b>{Serie}</b> coincide con el codigo o codigo de barras del producto. Por favor rectifique y vuelva a intentar.")
Continue For
End If
Next
If MensajeAlert.ToString <> "" Then
Alert(MensajeAlert.ToString, TipoMensaje.ToastError)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
Dim MensajeSinExistencias As New StringBuilder
Dim ObjInventarios As New ClsInventarios
Dim Index = 0
Dim Cantidad As Integer = LbCantidad.Text.ToEntero
If CargaMasivaSeries Then Cantidad = DtInv.FiltroPrimeroValor("CantidadF", "Consec = " & CveConsecSerie).ToEntero
'DtInv
For Each Serie In SeriesArreglo
If Serie <> "" Then
Dim Row = DtDatosDetalle.NewRow
Index = Index + 1
If Index > Cantidad Then Exit For
'VALIDA QUE SIGA AGREGANDO
If Not DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count < Cantidad Then
MensajeAlert.Append("series cargadas en su totalidad") : Exit For
End If
'VERIFICA EXISTENCIAS
If TipoMovimiento > 1 Then
Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerie, CveUMSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Serie)
If Existencia < 1 Then
MensajeSinExistencias.Append($"Serie: <b>{Serie}</b>. <br/>")
Continue For
End If
If TipoMovimiento = 2 Then
If DtExistencias.SUM("Existencia", $"Serie = '{Serie}'") = 0 Then
MensajeSinExistencias.Append($"Serie: <b>{Serie}</b>. <br/>")
Continue For
End If
End If
End If
Row("ConsecId") = CveConsecSerie
Row("Consec") = DtDatosDetalle.Rows.Count + 1
Row("CvePS") = CvePSSerie
Row("CveUM") = CveUMSerie
Row("PU") = PUSerie
Row("Serie") = Serie
Row("FechaCaducidad") = MinFecha.ToShortDateString
DtDatosDetalle.Rows.Add(Row)
ActualizaBitacora()
End If
Next
ObjInventarios.Dispose()
If Tipo = 1 Then
TxtSerie.Text = ""
End If
If Not CargaMasivaSeries Then CargaSerie(Tipo, True)
If MensajeAlert.ToString <> "" Then
If AlertaSonido Then RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Else
If MensajeSinExistencias.ToString <> "" Then
Alert($"Las siguientes Series no cuentan con la existencia suficiente por lo cual se omitieron. <br?><br/> {MensajeSinExistencias.ToString}", TipoMensaje.MsgAdvertencia)
End If
If AlertaSonido Then RegistraScript("playsonidito('beep-07.wav')", "SoniditoSerie")
End If
End Sub
#Region "Bitacora"
Private Sub ActualizaBitacora(Optional Eliminar As Boolean = False)
If Not Eliminar Then
DtInv.TableName = "DtDatos"
DtDatosDetalle.TableName = "DtDatosDetalle"
DtInv.WriteXml(ArchivoBitacora, XmlWriteMode.WriteSchema)
DtDatosDetalle.WriteXml(ArchivoBitacoraDetalle, XmlWriteMode.WriteSchema)
Else
File.Delete(ArchivoBitacora)
End If
End Sub
Protected Sub HplCargaBitacora_Click(sender As Object, e As EventArgs)
If IO.File.Exists(ArchivoBitacora) Then
'DtInv.Clear()
'DtDatosDetalle.Clear()
DtInv.ReadXml(ArchivoBitacora)
If IO.File.Exists(ArchivoBitacoraDetalle) Then
Dim dtt As New DataTable
dtt.ReadXml(ArchivoBitacoraDetalle)
DtDatosDetalle = dtt
Alert("Registro(s) Recuperados", TipoMensaje.ToastInformacion)
End If
CargaGVInv()
Else
Alert("No hay bitácora para recuperar.", TipoMensaje.ToastInformacion)
End If
End Sub
#End Region
Protected Sub GvSerie_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSerie.RowDeleting
Dim keySerieLote As String = e.Keys("Serie").ToString
Try
For Each dr As DataRow In DtDatosDetalle.Rows
If dr("Serie").ToString = keySerieLote Then
dr.Delete()
End If
Next
Catch ex As Exception
End Try
DtDatosDetalle.AcceptChanges()
ActualizaBitacora()
CargaSerie(1)
End Sub
#End Region
#Region " AGREGAR POR LOTE BATCH "
Private Sub CreaDtLoteDetalle()
If DtDatosLoteDetalle Is Nothing Then
DtDatosLoteDetalle = New DataTable
DtDatosLoteDetalle.Columns.Add("Consec", GetType(Integer))
DtDatosLoteDetalle.Columns.Add("ConsecId", GetType(Integer))
DtDatosLoteDetalle.Columns.Add("Cantidad", GetType(Decimal))
DtDatosLoteDetalle.Columns.Add("CvePS", GetType(Integer))
DtDatosLoteDetalle.Columns.Add("CveUM", GetType(Integer))
DtDatosLoteDetalle.Columns.Add("PU", GetType(Decimal))
DtDatosLoteDetalle.Columns.Add("Lote", GetType(String))
DtDatosLoteDetalle.Columns.Add("FechaCaducidad", GetType(String))
End If
End Sub
Protected Sub BtnLote_Click(sender As Object, e As EventArgs)
Dim Argumentos = CType(sender, Button).CommandArgument.Split("°"c)
LbLoteProducto2.Text = Argumentos(3)
LbLoteCantidad2.Text = Argumentos(4).FormatoNumero
CvePSSerie = Argumentos(0).ToEntero
CveUMSerie = Argumentos(1).ToEntero
PUSerie = Argumentos(2).ToDecimal
CveConsecSerie = Argumentos(5).ToEntero
CargaLote(1)
End Sub
Private Sub CargaLote(Tipo As Integer, Optional CerrarCompletado As Boolean = False)
RegistraScript("$('#DivLote').modal();", "ModalLote")
GvLote.Columns(2).HeaderText = UsuarioActual.Empresa.Funcionalidad(147)
GvLote.DataSource = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC")
GvLote.DataBind()
'VALIDA QUE SIGA AGREGANDO
If Not DtDatosLoteDetalle.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerie)) < LbLoteCantidad2.Text.ToDecimal Then
BtnAddPSLote.Enabled = False
If CerrarCompletado Then
RegistraScript("$('#DivLote').modal('hide');")
End If
Else
BtnAddPSLote.Enabled = True
End If
'SI TIENE ENTRADA POR LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
Dim Contador = 0.0
For Each Gvr As GridViewRow In GvInv.Rows
If Gvr.DataKey("CvePS").ToEntero = CvePSSerie Then
Contador = DtDatosLoteDetalle.SUM("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec")))
Gvr.FCCheckBox("cbInv").Enabled = False
Gvr.FCTextBox("TbCantidadF").Enabled = False
If DtDatosLoteDetalle IsNot Nothing AndAlso Contador > 0 Then
Gvr.FCCheckBox("cbInv").Checked = True
Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString
ElseIf Gvr.DataKey("CantidadF").ToString.ToDecimal <> 0 Then
Gvr.FCCheckBox("cbInv").Checked = False
Gvr.FCTextBox("TbCantidadF").Text = "0"
End If
End If
Dim Dr = DtInv.Select($"Consec = {Gvr.DataKey("Consec")}")(0)
Dr("CantidadSurtidaPantalla") = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal
DtInv.AcceptChanges()
Next
RVCantidadLote.MaximumValue = (If((LbLoteCantidad2.Text.ToDecimal - Contador) = 0, 0.02, LbLoteCantidad2.Text.ToDecimal - Contador)).ToString.FormatoNumero
TxtCantidadLote.Text = "1"
TxtLote.Text = ""
TxtBatch.Text = ""
TxtFechaCaducidadLote.Text = If(TxtFechaCaducidadLote.Text.Trim = "", Now.ToShortDateString(), TxtFechaCaducidadLote.Text)
TxtLote.Focus()
UPInv.Update()
UpLote.Update()
If Tipo = 1 Then
RegistraScript(String.Format("$('#{0}').on('shown.bs.modal', function () {{$('#{0}').focus(); $('#{0}').trigger(jQuery.Event('keypress', {{which: 13}})); }});$('#DivLote').modal('show'); ", TxtLote.ClientID))
End If
End Sub
Protected Sub BtnAddPSLote_Click(sender As Object, e As EventArgs)
AgregaLote(TxtLote.Text.Trim, 1)
End Sub
Private Sub AgregaLote(Lote As String, Tipo As Integer)
If Lote.Trim = "" Then
Alert("El campo Lote es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'VALIDACION DE SERIES DUPLICADAS
Dim MensajeAlert As New StringBuilder
Dim DtDuplicado As New DataTable
Dim DtSeriesNuevas As New DataTable
DtSeriesNuevas.Columns.Add("Serie", GetType(String))
DtDuplicado = DtDatosLoteDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Lote = '{Lote}' ")
If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then
Alert($"<br/> El numero de Lote <b>""{Lote}""</b> proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
Dim Row = DtDatosLoteDetalle.NewRow
Dim CantidadLote = TxtCantidadLote.Text.ToDecimal
Dim MensajeSinExistencias As New StringBuilder
Dim ObjInventarios As New ClsInventarios
'VERIFICA EXISTENCIAS
If TipoMovimiento > 1 Then
Dim Existencia = ObjInventarios.GetExistenciasPS(CvePSSerie, CveUMSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Lote)
If Existencia < CantidadLote Then
Alert($"<br/> El numero de Lote <b>""{Lote}""</b> proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
If TipoMovimiento = 2 Then
If Not DtExistencias.SUM("Existencia", $"Lote = '{Lote}' ") = 0 Then
Alert($"<br/> El numero de Lote <b>""{Lote}""</b> proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
End If
End If
Row("ConsecId") = CveConsecSerie
Row("Consec") = DtDatosDetalle.Rows.Count + 1
Row("Cantidad") = CantidadLote
Row("CvePS") = CvePSSerie
Row("CveUM") = CveUMSerie
Row("PU") = PUSerie
Row("Lote") = Lote
'Row("FechaCaducidad") = FechaCaducidad
'Row("FechaCaducidad") = If(IsDate(TxtFechaCaducidadLote.Text), TxtFechaCaducidadLote.Text, MinFecha.ToShortDateString)
'Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidadLote.Text, MinFecha.ToShortDateString)
DtDatosLoteDetalle.Rows.Add(Row)
ObjInventarios.Dispose()
If Tipo = 1 Then
TxtLote.Text = ""
End If
CargaLote(1, True)
End Sub
Protected Sub GvLote_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvLote.RowDeleting
Dim keyLote As String = e.Keys("Lote").ToString
Try
For Each dr As DataRow In DtDatosLoteDetalle.Rows
If dr("Lote").ToString = keyLote Then
dr.Delete()
End If
Next
Catch ex As Exception
End Try
DtDatosLoteDetalle.AcceptChanges()
CargaLote(1)
End Sub
#End Region
#End Region
#Region " GUARDAR "
Private Function ValidaGuardar() As Boolean
Dim TotalCantidad As Decimal = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.FCTextBox("TbCantidadF").Text.ToDecimal)
If TotalCantidad <= 0 Then
Alert("No se seleccionó ninguna cantidad de productos a guardar. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Return False
End If
'verifica si recibió al 100% la compra
'bandera que me indica que se cargaron todos los productos, yque se verifique si los detalle s se van a recibir al 100
' que la cantidad orginal sea igual a la recibida. para considedrarse completa
If RecibidaCompleta Then
For Each Gvr As GridViewRow In GvInv.Rows
If Not Gvr.FCCheckBox("cbInv").Checked Or Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadF").ToString.ToDecimal OrElse Gvr.DataKey("CantidadC").ToString.ToDecimal <> Gvr.DataKey("CantidadF").ToString.ToDecimal Then
RecibidaCompleta = False
End If
Next
End If
If EntregaDirecta Then
For Each Gvr As GridViewRow In GvInv.Rows
If Not Gvr.FCCheckBox("cbInv").Checked Or Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadF").ToString.ToDecimal Then
Alert("La compra se debe surtir completa por ser entrega directa. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Return False
End If
Next
End If
Dim TotalPorDevengar As Decimal = 0
If UsuarioActual.Empresa.UsaAC Then
TotalPorDevengar += GvAC.Rows.Cast(Of GridViewRow)().Sum(Function(Gvr) Gvr.FCTextBox("TxtImporte").Text.ToDecimal)
If TotalPorDevengar <= 0 Then
Alert("Especifique el importe del presupuesto", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Return False
End If
End If
If DdlMonedaTC.SelectedValue = "2" Then
AplicarTipoCambio()
If TipoCambio <= 0 Then
Alert("Ocurrió un error al obtener el tipo de cambio. Por favor verifique e intente de nuevo.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Return False
End If
End If
'VALIDA SI HUBO CAMBIOS EN LOS DETALLES COMPRA
If CveCompraSurtir > 0 Then
Dim VariableCampo = If(TipoMovimiento.Contiene(1, 3), "CantidadF", "CantidadS")
Dim ObjComprasDif As New ClsInventarios
Dim DtDatosCompra As New DataTable
If ObjComprasDif.RecepcionAlmacenGet(CveCompraSurtir, BuscaEntregaDirecta, -1, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
DtDatosCompra = ObjComprasDif.DtResultados
End If
Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
Dim CantConsulta = DtDatosCompra.SUM(VariableCampo)
If Math.Abs(CantidadGV - CantConsulta) > 0.01 Then
CargaCompra(CveCompraSurtir, -1)
CargaPendientes()
Alert("Ha sido cambiada la información de existencias de la compra actual, se han recargado la información.", TipoMensaje.MsgAdvertencia)
ObjComprasDif.Dispose()
Return False
End If
ObjComprasDif.Dispose()
End If
'VALIDA SI HUBO CAMBIOS EN LOS DETALLES OC
If CveOCSurtir > 0 Then
Dim VariableCampo = If(TipoMovimiento = 1, "CantidadF", "CantidadS")
Dim ObjComprasDif As New ClsInventarios
Dim DtDatosOC As New DataTable
If ObjComprasDif.RecepcionAlmacenOCGet(CveOCSurtir, UsuarioActual.CveEmpresa) Then
DtDatosOC = ObjComprasDif.DtResultados.FiltraParametros("CantidadCompra = 0")
End If
Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
Dim CantConsulta = DtDatosOC.SUM(VariableCampo)
If Math.Abs(CantidadGV - CantConsulta) > 0.1 Then
CargaOCPorSurtir(CveOCSurtir)
Alert("Ha sido cambiada la información de existencias de la orden de compra actual, se han recargado la información.", TipoMensaje.MsgAdvertencia)
ObjComprasDif.Dispose()
Return False
End If
ObjComprasDif.Dispose()
End If
'VALIDA SI HUBO CAMBIOS EN LOS DETALLES IMPORTACION
If CveImportacionSurtir > 0 Then
Dim VariableCampo = If(TipoMovimiento = 1, "CantidadF", "CantidadS")
Dim ObjComprasDif As New ClsInventarios
Dim DtDatosImportacion As New DataTable
If ObjComprasDif.RecepcionAlmacenImportacionGet(CveImportacionSurtir, CveImportacionCompra, CveImportacionProveedor, UsuarioActual.CveEmpresa) Then
DtDatosImportacion = ObjComprasDif.DtResultados
End If
Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
Dim CantConsulta = DtDatosImportacion.SUM(VariableCampo)
If CantidadGV <> CantConsulta Then
CargaImportacionSurtir(CveImportacionSurtir)
Alert("Ha sido cambiada la información de existencias de la importación actual, se han recargado la información.", TipoMensaje.MsgAdvertencia)
ObjComprasDif.Dispose()
Return False
End If
ObjComprasDif.Dispose()
End If
'VALIDA SI HUBO CAMBIOS EN LOS DETALLES FLETES
If CveFleteSurtir > 0 Then
Dim VariableCampo = If(TipoMovimiento = 1, "CantidadF", "CantidadS")
Dim ObjComprasDif As New ClsInventarios
Dim DtDatosImportacion As New DataTable
If ObjComprasDif.RecepcionAlmacenFleteGet(CveFleteSurtir, CveFleteOrdenCompra, CveFleteCompra, UsuarioActual.CveEmpresa) Then
DtDatosImportacion = ObjComprasDif.DtResultados
End If
Dim CantidadGV = GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
Dim CantConsulta = DtDatosImportacion.SUM(VariableCampo)
If CantidadGV <> CantConsulta Then
CargaFleteSurtir(CveFleteSurtir)
Alert(String.Format("Ha sido cambiada la informacion de existencias costo indirecto actual, se han recargado la información.[{0}-{1}]", CantidadGV, CantConsulta), TipoMensaje.MsgAdvertencia)
ObjComprasDif.Dispose()
Return False
End If
ObjComprasDif.Dispose()
End If
Dim ValidaSeccion As Boolean = False : Dim ValidaCaducidad As Boolean = False : Dim ValidaLote As Boolean = False
'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
Dim Index = 0
For Each gvr As GridViewRow In GvInv.Rows
If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
DtInv.Rows(Index)("CantidadSurtidaPantalla") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
If CBool(gvr.DataKey("AplicaSeccion")) AndAlso gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero <= 0 Then
ValidaSeccion = True
End If
If CBool(gvr.DataKey("AplicaCaducidad")) AndAlso gvr.FCTextBox("TxtCaducidad").Text.Trim = "" Then
ValidaCaducidad = True
End If
If CBool(gvr.DataKey("AplicaLote")) AndAlso gvr.FCTextBox("TxtLote").Text.Trim = "" Then
ValidaLote = True
End If
End If
Index += 1
Next
If ValidaSeccion Then
Alert("La sección de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Return False
End If
If ValidaCaducidad Then
Alert("La caducidad no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Return False
End If
If ValidaLote Then
Alert("El lote de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Return False
End If
If UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
Dim Filesgral As List(Of Archivo) = TxtDocumento.getfiles().Archivos
If Filesgral Is Nothing OrElse Filesgral.Count = 0 Then
Alert("Es necesario agregar un documento.", TipoMensaje.MsgAdvertencia)
Return False
End If
End If
'VERIFICA EXISTENCIAS
If TipoMovimiento > 1 Then
Dim MensajeExistencias As New StringBuilder
Dim ObjInventarios As New ClsInventarios
For Each gvr As GridViewRow In GvInv.Rows
Dim ExistenciaActual = DtInv.SUM("CantidadSurtidaPantalla", $"CvePS = {gvr.DataKey("CvePS").ToEntero} AND CveUM = {gvr.DataKey("CveUM").ToEntero} ")
If TipoMovimiento = 2 Then
'If gvr.DataKey("CantidadC").ToString.ToDecimal <> ExistenciaActual Then
' Alert("La devolución debe de ser completa.", TipoMensaje.MsgAdvertencia)
' Exit Sub
'End If
If DtExistencias.SUM("Existencia", $"CvePS = {gvr.DataKey("CvePS").ToEntero} AND CveUM = {gvr.DataKey("CveUM").ToEntero}") < ExistenciaActual Then
MensajeExistencias.Append($"Producto: <b>{GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=gvr.DataKey("CvePS").ToString.ToEntero).FiltroPrimeroValor("PSCodigo")}</b>.</br>")
Continue For
End If
End If
Dim Existencia = ObjInventarios.GetExistenciasPS(gvr.DataKey("CvePS").ToEntero, gvr.DataKey("CveUM").ToEntero, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, FechaMovto:= (TxtFecha.Text & " " & Now.ToShortTimeString).ToDateTime.ToString("yyyy/MM/dd HH:mm"))
If Existencia < ExistenciaActual Then
MensajeExistencias.Append($"Producto: <b>{GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=gvr.DataKey("CvePS").ToString.ToEntero).FiltroPrimeroValor("PSCodigo")}</b>.</br>")
Continue For
End If
Next
ObjInventarios.Dispose()
If MensajeExistencias.ToString <> "" Then
Alert($"Los siguientes productos no cuentan con la existencia suficiente para hacer la devolución. </br></br> {MensajeExistencias.ToString}", TipoMensaje.MsgAdvertencia)
Return False
End If
End If
Return True
End Function
Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click
'VALIDACIONES
If Not ValidaGuardar() Then
Exit Sub
End If
If CveCompraSurtir > 0 Or CveOCSurtir > 0 Then
GuardaCompraOC()
ElseIf CveImportacionSurtir > 0 Then
GuardaImportacionFlete()
ElseIf CveFleteSurtir > 0 Then
GuardaImportacionFlete()
Else
Alert("Ocurrio un error al procesar la informacion para guardar el movimiento. Por favor comuniquese con atencion SIG.", TipoMensaje.MsgError)
End If
End Sub
Private Function GeneraPrePolizaSalidaEntregaDirecta(CveMovimiento As Integer, ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, ByRef ObjContaContPAQ As ClsContPAQi, EsContabilizable As Boolean) As Boolean
Dim Retorno As Boolean = True
Try
Dim DtCostos As DataTable = Nothing
Dim ValorInventario As Decimal = 0
Dim ValorInventarioME As Decimal = 0
Dim CveConcepto As Integer = 3
ObjInventario.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa)
Dim CveVenta As Integer = ObjInventario.CveVenta
Dim CveAlmacen As Integer = ObjInventario.CveAlmacen
Dim SerieFolio As String = ObjInventario.DtResultados.Rows(0)("SerieFolioVenta").ToString
Dim MovAlmacen As Boolean = True
Dim OrigenMov As Integer = GlobalDTInvConceptos.FiltroPrimeroValor("Origen", "CveConcepto = " & CveConcepto).ToEntero
If OrigenMov = 1 Then MovAlmacen = False Else MovAlmacen = True
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
DtCostos = ObjInventario.DtResultados
Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
Dim IdCtaContable As Integer = 0
Dim ConceptoPoliza As String = String.Format("{0}-{1}", "Salida de Almacen", SerieFolio)
If tmpCostos.Rows.Count > 0 Then
Dim Concepto As String = ConceptoPoliza
Dim CvePrePoliza = ObjConta.AddPrePolizas("RecepAlm", 74, DtCostos.SUM("Total"), DtCostos.SUM("Total"), 1, TxtFecha.Text.ToDate, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
Dim tCveSubProyecto = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen={CveAlmacen}").ToEntero
Dim tCveConcepto As Integer = 69
For Each RowInv As DataRow In tmpCostos.Rows
ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL
If tCveConcepto = 69 Then
IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
End If
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not MovAlmacen, ValorInventario, Concepto, tCveConcepto, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ValorInventario, CveSubProyecto:=tCveSubProyecto, Contabilizable:=EsContabilizable) Then
Retorno = False
Exit For
End If
Next
IdCtaContable = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen={CveAlmacen}").ToEntero
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, MovAlmacen, DtCostos.SUMD("Total").RoundSQL, Concepto, 68, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=DtCostos.SUMD("Total").RoundSQL, Contabilizable:=If(CveTipoCompra = 10, False, EsContabilizable)) Then
Retorno = False
End If
If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, 6) Then
If ObjConta.ValorPolizaDescuadre > 0 Then
GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
Retorno = False
End If
End If
'CONTABILIZAR - SIMPLIFICAR
If Retorno Then
If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then
If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then
Retorno = False
End If
End If
If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then
If ObjContaContPAQ Is Nothing Then
ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa)
ObjContaContPAQ.IniciaTransacSQL()
End If
If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then
Retorno = False
End If
End If
End If
Else
Retorno = False
End If
Else
Retorno = False
End If
Catch ex As Exception
OnError("Ocurrió un error al guadar la prepoliza", ex)
Retorno = False
End Try
Return Retorno
End Function
Private Function GeneraPrePolizaMovimientoAlmacen(CveMovimientoEntrada As Integer, CveMovimientoSalida As Integer, ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, ByRef ObjContaContPAQ As ClsContPAQi, EsContabilizable As Boolean) As Boolean
Dim Retorno As Boolean = True
Try
Dim DtCostos As DataTable = Nothing
Dim ValorInventario As Decimal = 0
Dim ValorInventarioME As Decimal = 0
Dim CveConcepto As Integer = 3
ObjInventario.GetMovimientos(CveMovimientoEntrada, -1, -1, UsuarioActual.CveEmpresa)
Dim CveVenta As Integer = ObjInventario.CveVenta
Dim CveAlmacen As Integer = ObjInventario.CveAlmacen
Dim SerieFolio As String = ObjInventario.DtResultados.Rows(0)("SerieFolioVenta").ToString
Dim MovAlmacen As Boolean = True
Dim OrigenMov As Integer = GlobalDTInvConceptos.FiltroPrimeroValor("Origen", "CveConcepto = " & CveConcepto).ToEntero
If OrigenMov = 1 Then MovAlmacen = False Else MovAlmacen = True
If ObjInventario.GetMovimientosDetalle(CveMovimientoEntrada, UsuarioActual.CveEmpresa) Then
DtCostos = ObjInventario.DtResultados
Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
Dim IdCtaContable As Integer = 0
Dim ConceptoPoliza As String = String.Format("{0}-{1}", "Salida de Almacen", SerieFolio)
If tmpCostos.Rows.Count > 0 Then
Dim Concepto As String = ConceptoPoliza
Dim CvePrePoliza = ObjConta.AddPrePolizas("RA-01", 74, DtCostos.SUM("Total"), DtCostos.SUM("Total"), 1, TxtFecha.Text.ToDate, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
Dim tCveSubProyecto = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen={CveAlmacen}").ToEntero
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not MovAlmacen, ValorInventario, Concepto, 68, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveMovimientoAlmacen:=CveMovimientoEntrada, ImporteMX:=ValorInventario, CveSubProyecto:=tCveSubProyecto, Contabilizable:=EsContabilizable) Then
Retorno = False
End If
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, MovAlmacen, ValorInventario, Concepto, 68, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveMovimientoAlmacen:=CveMovimientoSalida, ImporteMX:=ValorInventario, Contabilizable:=If(CveTipoCompra = 10, False, EsContabilizable)) Then
Retorno = False
End If
If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, 6) Then
If ObjConta.ValorPolizaDescuadre > 0 Then
GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
Retorno = False
End If
End If
'CONTABILIZAR - SIMPLIFICAR
If Retorno Then
If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then
If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then
Retorno = False
End If
End If
If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then
If ObjContaContPAQ Is Nothing Then
ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa)
ObjContaContPAQ.IniciaTransacSQL()
End If
If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then
Retorno = False
End If
End If
End If
Else
Retorno = False
End If
Else
Retorno = False
End If
Catch ex As Exception
OnError("Ocurrió un error al guadar la prepoliza", ex)
Retorno = False
End Try
Return Retorno
End Function
Private Sub GuardaCompraOC()
Dim CveMovimiento As Integer
Dim CveMovimientoOriginal As Integer
'Dim CveMovimientoS
Dim InvFolio As String = ""
Dim FechaMovto As Date = TxtFecha.Text.ToDate
Dim ErrorMovInv As Boolean
Dim MensajeError = ""
Dim ObjInventario As New ClsInventarios
Dim ObjBitacora As New ClsOIEventos(ObjInventario.IniciaTransacSQL())
Dim ObjCompras As New ClsCompras(ObjInventario.IniciaTransacSQL())
Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
Dim ObjOC As New ClsOC(ObjInventario.IniciaTransacSQL())
Dim ObjAcum As New ClsAcumuladores(ObjInventario.IniciaTransacSQL())
Dim ObjVentas As New ClsVentas(ObjInventario.IniciaTransacSQL())
Dim ObjContaAC As ClsContPAQi = Nothing
Dim ObjContaContPAQ As ClsContPAQi = Nothing
Dim MensajeOC As New StringBuilder
'ENTREGA DIRECTA
Dim MovtosEntradaExA As New List(Of Integer)
Dim FoliosEntradaExA As New List(Of Integer)
Dim MovtosSalidaDirecta As New List(Of Integer)
Dim FoliosSalidaDirecta As New List(Of Integer)
'APARTADOS
Dim MovtosSalida As New List(Of Integer)
Dim FoliosSalida As New List(Of Integer)
Dim MovtosEntrada As New List(Of Integer)
Dim FoliosEntrada As New List(Of Integer)
'VIRUAL
Dim CveMovimientoVirtual As Integer = -1
Dim FolioVirtual As Integer = -1
'TRASPASO DEVOLUCION
Dim CveMovimientoSalidaTraspaso As Integer = -1
Dim FolioSalidaTraspaso As String = ""
'CONTABILIDAD
Dim CvePrePoliza = -1
Dim MensajeContabilidad = ""
If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
'VALIDA SI SE VAN A RECIBIR TODOS LOS PRODUCTOS
If ValidarRecepcionUsados Then
For Each gvr As GridViewRow In GvInv.Rows
If gvr.FCTextBox("TbCantidadF").Text.ToDecimal() <> gvr.DataKey("CantidadC").ToDecimal() Then
ValidarRecepcionUsados = False
Exit For
End If
Next
End If
End If
Try
'RECARGA TC CUANDO ES RECEPCION CON OC Y DOLARES
If CveOCSurtir > 0 And CveMoneda <> 1 Then
TipoCambio = GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal
End If
If HdnTipoDocto.Value <> "Fac" Then RecibidaCompleta = False
Dim CveConceptoAlmacen As Integer = If(TipoMovimiento > 1, 13, 2)
Dim CveAlmacen As Integer = DdlAlmacen.SelectedValue.ToEntero
Dim CveModalidad As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveModalidad").ToEntero()
Dim EsContabilizable As Boolean = (CveModalidad = 1)
If RealizarTraspasoAlmacenDevolucion AndAlso TipoMovimiento = 2 Then
CveConceptoAlmacen = 26
'For Each gvr As GridViewRow In GvInv.Rows
' If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
' Dim Row As DataRow = DtAlmacenesDevolucion.NewRow()
' Row("CveCompraDetalle") = gvr.DataKey("CveCompraDetalle").ToEntero()
' Row("CveAlmacenOriginal") = gvr.DataKey("CveAlmacenOriginal").ToEntero()
' DtAlmacenesDevolucion.Rows.Add(Row)
' End If
'Next
Dim DtDetalle As New DataTable
Dim DtDetalleLote As New DataTable
Dim PU As Decimal = 0.0D
Dim PUExtranjero As Decimal = 0.0D
Dim CostoIndirecto As Decimal = 0.0D
Dim SumaTotal As Decimal = 0.0D
Dim Cont As Integer = 0
Dim CveMovtoSalidaActual = -1
Dim CveMovtoEntradaActual = -1
Dim CveVendedorActual = -1
Dim CveClienteActual = -1
Dim CveAlmacenDestino = CveAlmacenDevolucionProveedor
Dim CveSeccionDestino As Integer = -1
'For Each RowAlmacen As DataRow In DtAlmacenesDevolucion.FiltraParametros("", DistinctColumns:={"CveAlmacenOrignal"}).Rows
'SALIDA DE ALMACEN POR TRASPASO
CveMovimientoSalidaTraspaso = ObjInventario.AddMovimiento(CveAlmacen, CveConceptoAlmacen, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa,
CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio),
MovimientoFijo:=If(TipoMovimiento = 2, True, False), CveAlmacenDestino:=CveAlmacenDestino, Remision:=TxtRemision.Text, Modulo:="RA/G11")
If CveMovimientoSalidaTraspaso > 0 Then
FolioSalidaTraspaso = ObjInventario.Folio.ToString()
For Each gvr As GridViewRow In GvInv.Rows '.Cast(Of GridViewRow).Where(Function(row) row.DataKey("CveAlmacenOrignal") = RowAlmacen("CveAlmacenOrignal").ToString())
If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
PU = DtInv.Rows(gvr.RowIndex)("PU").ToString.ToDecimal
CostoIndirecto = DtInv.Rows(gvr.RowIndex)("CostoIndirecto").ToString.ToDecimal
PUExtranjero = DtInv.Rows(gvr.RowIndex)("PUExtranjero").ToString.ToDecimal
' por redondeo
If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundAD
'SI FUE POR SERIE LOTE
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero))
DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero))
If DtDetalle.Rows.Count > 0 Then
Dim ContDt As Integer = 0
' por redondeo
If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundAD
For Each Dr As DataRow In DtDetalle.Rows
SumaTotal += PU + CostoIndirecto
If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalle.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal Then
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
PU = (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - (PU))
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaTraspaso, 1, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Serie:=Dr("Serie").ToString, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), Lote:=If(CBool(gvr.DataKey("AplicaLote")), gvr.FCTextBox("TxtLote").Text, ""), CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
ContDt += 1
Next
ElseIf DtDetalleLote.Rows.Count > 0 Then
Dim ContDt As Integer = 0
' por redondeo
If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundSQL
For Each Dr As DataRow In DtDetalleLote.Rows
SumaTotal += Dr("Cantidad").ToString.ToDecimal * (PU + CostoIndirecto)
If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalleLote.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal Then
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
PU = ((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - (Dr("Cantidad").ToString.ToDecimal * (PU)))) / Dr("Cantidad").ToString.ToDecimal
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaTraspaso, Dr("Cantidad").ToString.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Lote:=Dr("Lote").ToString, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario, CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
ContDt += 1
Next
Else
' por redondeo
If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundAD
SumaTotal += gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU + CostoIndirecto) ' considerar el costo indirecto para el ajuste
If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal.RoundSQL Then
Dim tTotal As Decimal = gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU)
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
PU = ((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - tTotal)) / gvr.FCTextBox("TbCantidadF").Text.ToDecimal
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaTraspaso, gvr.FCTextBox("TbCantidadF").Text.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), Lote:=If(CBool(gvr.DataKey("AplicaLote")), gvr.FCTextBox("TxtLote").Text, ""), CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
End If
'If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then
' For Each Dr As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {gvr.RowIndex}").Rows
' If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr("CveSeccionAlmacen").ToString.ToEntero, Dr("CantidadSeccionAlmacen").ToString.ToDecimal) Then
' ErrorMovInv = True
' Exit For
' End If
' Next
'End If
Cont += 1
End If
Next
Else
ErrorMovInv = True
End If
'Next
'MODIFICA EL CONCEPTO PARA REALIZAR LA ENTRADA
CveConceptoAlmacen = 27
CveAlmacen = CveAlmacenDevolucionProveedor
End If
'ENTRADA ALMACÉN
CveMovimiento = ObjInventario.AddMovimiento(CveAlmacen, CveConceptoAlmacen, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa,
CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio),
MovimientoFijo:=If(TipoMovimiento = 2, True, False), CveMovimientoRelacionado:=CveMovimientoSalidaTraspaso, Remision:=TxtRemision.Text, Modulo:="RA/G1")
If CveMovimiento > 0 Then
CveMovimientoOriginal = CveMovimiento
InvFolio = ObjInventario.Folio.ToString
Dim DtDetalle As New DataTable
Dim DtDetalleLote As New DataTable
Dim PU As Decimal = 0.0D
Dim PUExtranjero As Decimal = 0.0D
Dim CostoIndirecto As Decimal = 0.0D
Dim SumaTotal As Decimal = 0.0D
Dim Cont As Integer = 0
Dim ListaOC As New List(Of DetalleOC)
For Each gvr As GridViewRow In GvInv.Rows
If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
PU = DtInv.Rows(gvr.RowIndex)("PU").ToString.ToDecimal
CostoIndirecto = DtInv.Rows(gvr.RowIndex)("CostoIndirecto").ToString.ToDecimal
PUExtranjero = DtInv.Rows(gvr.RowIndex)("PUExtranjero").ToString.ToDecimal
'SI FUE POR SERIE LOTE
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero))
DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero))
If DtDetalle.Rows.Count > 0 Then
Dim ContDt As Integer = 0
' por redondeo
PU = PU.RoundAD
For Each Dr As DataRow In DtDetalle.Rows
SumaTotal += PU.RoundAD + CostoIndirecto ' se redondea a dos decimales. por la unidad es uno
If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalle.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal Then
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
PU = (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - (PU))
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Serie:=Dr("Serie").ToString, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), Lote:=If(CBool(gvr.DataKey("AplicaLote")), gvr.FCTextBox("TxtLote").Text, ""), CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
ContDt += 1
Next
ElseIf DtDetalleLote.Rows.Count > 0 Then
Dim ContDt As Integer = 0
' por redondeo
If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundSQL
For Each Dr As DataRow In DtDetalleLote.Rows
SumaTotal += Dr("Cantidad").ToString.ToDecimal * (PU + CostoIndirecto)
If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso ContDt + 1 = DtDetalleLote.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal Then
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
PU = ((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - (Dr("Cantidad").ToString.ToDecimal * (PU)))) / Dr("Cantidad").ToString.ToDecimal
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Lote:=Dr("Lote").ToString, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario, CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
ContDt += 1
Next
Else
' por redondeo
If gvr.FCTextBox("TbCantidadF").Text.ToDouble = 1 Then PU = PU.RoundSQL
SumaTotal += gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU + CostoIndirecto) ' considerar el costo indirecto para el ajuste
If RecibidaCompleta AndAlso Cont + 1 = GvInv.Rows.Count AndAlso (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> SumaTotal.RoundSQL Then
Dim tTotal As Decimal = gvr.FCTextBox("TbCantidadF").Text.ToDecimal * (PU)
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
PU = ((TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL - (SumaTotal - tTotal)) / gvr.FCTextBox("TbCantidadF").Text.ToDecimal
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, gvr.FCTextBox("TbCantidadF").Text.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveUsuarioModifico:=UsuarioActual.CveUsuario, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), Lote:=If(CBool(gvr.DataKey("AplicaLote")), gvr.FCTextBox("TxtLote").Text, ""), CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
End If
Cont += 1
End If
If DdlTipo.SelectedValue = "2" Then
ListaOC.Add(New DetalleOC With {.CveOCDetalle = gvr.DataKey("CveOrdenCompraDetalle").ToEntero,
.Cantidad = gvr.FCTextBox("TbCantidadF").Text.ToDecimal,
.CantidadOC = gvr.DataKey("CantidadF").ToDecimal,
.PS = gvr.DataKey("PS")})
End If
Next
'' SI ES ENTRADA POR OC. VERIFICA QUE SE RECIBA LA TOTALIDAD POR PARTIDA. SINO SE DIVIDE
'si es entrada por oc, se verifican las cantidades, si la cantidad recibida es menor, se ajusta la cantidad en la OC. y se genera una nueva partida con la diferencia
If DdlTipo.SelectedValue = "2" Then
'se actualiza ListaOC
Dim resultsOC = ListaOC.GroupBy(
Function(row) row.CveOCDetalle) _
.Select(Function(group) New With
{
.CveOCDetalle = group.Key,
.CantidadOC = group.Sum(Function(row) row.CantidadOC),
.Cantidad = group.Sum(Function(row) row.Cantidad),
.PS = group.Max(Function(row) row.PS),
.Data = group
})
'comentado para subir versión, dividirOC
'For Each oc In resultsOC
' If oc.Cantidad < oc.CantidadOC Then
' MensajeOC.AppendFormat("- {0}</br>", oc.PS)
' If Not ObjOC.UpdateOrdenCompraDetalleDivideCantidad(CveOCSurtir, oc.CveOCDetalle, oc.Cantidad, UsuarioActual.CveUsuario) Then
' ErrorMovInv = True
' End If
' End If
'Next
End If
Else
ErrorMovInv = True
End If
''VALIDACIÓN DE IMPORTES INGRESADOS VS LA COMPRA U OC
If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
If Not ErrorMovInv AndAlso RecibidaCompleta AndAlso ObjInventario.GetMovimientosDetalle(CveMovimientoOriginal, UsuarioActual.CveEmpresa) Then
Dim dtt As DataTable = ObjInventario.DtResultados
Dim tTotalInsertado As Decimal = dtt.SUMD("TotalOriginal")
If CveTipoCompra = 8 Then 'entrada almacen con costo indirecto cargado en la misma compra
tTotalInsertado = dtt.SUMD("Total") ' está incluido el costo indirecto en la factura
End If
If (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> tTotalInsertado.RoundSQL Then
ErrorMovInv = True
Alert("La Entrada no coincide con el valor del documento.." & (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)) & " -" & tTotalInsertado, TipoMensaje.MsgError)
GuardaLog("La Entrada no coincide con el valor del documento.." & (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)) & " -" & tTotalInsertado)
End If
End If
End If
Dim ImporteIngresoAdicional As Decimal = 0
'SI RECEPCION VALIDA [ENTREGADIRECTA, APARTADOS, AC]
If TipoMovimiento = 1 Then
'ENTREGA DIRECTA
If EntregaDirecta Then
If Not ErrorMovInv Then
Dim Dt As DataTable = Nothing
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
If ObjInventario.DtResultados.Rows.Count > 0 Then
Dt = ObjInventario.DtResultados
End If
End If
'GENERA UN MOVIMIENTO POR CADA VENTA
For Each DrVenta As DataRow In Dt.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows
Dim CveMovtoSalidaDirecta As Integer = -1
Dim FolioSalidaDirecta As Integer = -1
Dim CveVenta As Integer = DrVenta("CveVenta").ToString().ToEntero()
Dim ObjFactura As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa)
Dim DtDetalleMovimiento As DataTable = Dt.FiltraParametros($"CveVenta={ObjFactura.CveVenta}")
If ObjFactura.TipoDocto = "Ing" Then
Dim MovSalida = GenerarMovimientoAlmacenVenta(DdlAlmacen.SelectedValue.ToEntero(), 3, ObjFactura.CveVenta, CveMovimiento, DtDetalleMovimiento, ObjInventario, ObjConta, ObjContaContPAQ, EsContabilizable, "RA/G2")
ErrorMovInv = MovSalida.CveMovimiento <= 0
If Not ErrorMovInv Then
MovtosSalidaDirecta.Add(MovSalida.CveMovimiento)
FoliosSalidaDirecta.Add(MovSalida.Folio)
End If
ElseIf ObjFactura.TipoDocto = "Rem" Then
Dim MovSalidaExA = GenerarMovimientoAlmacenVenta(DdlAlmacen.SelectedValue.ToEntero(), 8, ObjFactura.CveVenta, -1, DtDetalleMovimiento, ObjInventario, ObjConta, ObjContaContPAQ, False, "RA/G2R1")
ErrorMovInv = MovSalidaExA.CveMovimiento <= 0
If Not ErrorMovInv Then
MovtosSalidaDirecta.Add(MovSalidaExA.CveMovimiento)
FoliosSalidaDirecta.Add(MovSalidaExA.Folio)
Dim dttexa As DataTable = DtDetalleMovimiento.Copy
'se limpia la seccion, para que lo tome automaticamente
For Each drr As DataRow In dttexa.Rows
drr("CveSeccionAlmacen") = -3
Next
Dim MovEntradaExA = GenerarMovimientoAlmacenVenta(ObjFactura.CveAlmacenTraspasoDestino, 9, ObjFactura.CveVenta, MovSalidaExA.CveMovimiento, dttexa, ObjInventario, ObjConta, ObjContaContPAQ, False, "RA/G2R2")
ErrorMovInv = MovEntradaExA.CveMovimiento <= 0
If Not ErrorMovInv Then
MovtosEntradaExA.Add(MovEntradaExA.CveMovimiento)
FoliosEntradaExA.Add(MovEntradaExA.Folio)
'SI LA REMISION FUE FACTURADA GENERA EL MOVIMIENTO DE SALIDA DIRECTA
If ObjFactura.DtRemisionesDocumentosRelacionados.Rows.Count > 0 Then
If ObjVentas.VerificarRemisionFacturada(ObjFactura.CveVenta) Then
Dim dttsalida As DataTable = dttexa.Copy
'se limpia la seccion, para que lo tome automaticamente
For Each drr As DataRow In dttsalida.Rows
Dim RowFactura As DataRow = ObjVentas.DtResultados.FiltroPrimero($"CveVentaDetalleRemision={drr("CveVentaDetalle")}")
drr("CveVentaDetalle") = RowFactura("CveVentaDetalleFacturada")
drr("CveVenta") = RowFactura("CveVenta")
Next
For Each DrFactura As DataRow In Dt.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows
Dim dtSalidaFactura As DataTable = dttsalida.FiltraParametros($"CveVenta={DrFactura("CveVenta")}")
Dim MovSalidaDirectaExA = GenerarMovimientoAlmacenVenta(ObjFactura.CveAlmacenTraspasoDestino, 40, DrFactura("CveVenta").ToString().ToEntero(), MovEntradaExA.CveMovimiento, dtSalidaFactura, ObjInventario, ObjConta, ObjContaContPAQ, False, "RA/G2R3")
ErrorMovInv = MovSalidaDirectaExA.CveMovimiento <= 0
If ErrorMovInv Then
Exit For
Else
MovtosSalidaDirecta.Add(MovSalidaDirectaExA.CveMovimiento)
FoliosSalidaDirecta.Add(MovSalidaDirectaExA.Folio)
End If
Next
End If
End If
End If
End If
End If
Next
If Not ErrorMovInv Then
If Not ObjInventario.LimpiaEntregaDirecta(CveMovimiento) Then
ErrorMovInv = True
End If
End If
End If
End If
'APARTADOS
If Apartado Then
If ObjInventario.GetMovimientosDetalleVendedor(CveMovimiento) Then
Dim CveMovtoSalidaActual = -1
Dim CveMovtoEntradaActual = -1
Dim CveVendedorActual = -1
Dim CveClienteActual = -1
Dim CveAlmacenDestino = CveAlmacenApartado
Dim CveSeccionDestino As Integer = -1
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If CveVendedorActual = -1 Or (Dr("CveVendedor").ToString.ToEntero <> CveVendedorActual Or Dr("CveCliente").ToString.ToEntero <> CveClienteActual) Then
CveMovtoSalidaActual = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 8, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim,
TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), CveAlmacenDestino:=CveAlmacenDestino, MovimientoFijo:=True, CveVendedor:=Dr("CveVendedor").ToString.ToEntero,
CveCliente:=Dr("CveCliente").ToString.ToEntero, Remision:=TxtRemision.Text, Modulo:="RA/G3")
MovtosSalida.Add(CveMovtoSalidaActual)
FoliosSalida.Add(ObjInventario.Folio)
CveMovtoEntradaActual = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), CveAlmacenDestino:=CveAlmacenDestino, CveMovimientoRelacionado:=CveMovtoSalidaActual, CveVendedor:=Dr("CveVendedor").ToString.ToEntero, CveCliente:=Dr("CveCliente").ToString.ToEntero, Remision:=TxtRemision.Text, Modulo:="RA/G7")
MovtosEntrada.Add(CveMovtoEntradaActual)
FoliosEntrada.Add(ObjInventario.Folio)
CveVendedorActual = Dr("CveVendedor").ToString.ToEntero
CveClienteActual = Dr("CveCliente").ToString.ToEntero
End If
If CveMovtoSalidaActual <= 0 Or CveMovtoEntradaActual <= 0 Then
ErrorMovInv = True
Exit For
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovtoSalidaActual, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then
ErrorMovInv = True
Exit For
End If
CveSeccionDestino = -3 'se madna este dato, para que el trigger, obtenga la seccion automaticamente
If Not ObjInventario.AddMovimientoDetalle(CveMovtoEntradaActual, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=CveSeccionDestino, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then
ErrorMovInv = True
Exit For
End If
Next
If Not ErrorMovInv Then
'registra la prepóliza en el traspaso
If Not GeneraPrePolizaMovimientoAlmacen(CveMovtoEntradaActual, CveMovtoSalidaActual, ObjInventario, ObjConta, ObjContaContPAQ, False) Then
ErrorMovInv = True
End If
End If
End If
End If
'VIRTUAL
If RealizarMovimientoVirtual Then
Dim DtPSVirtual As New DataTable("DtTamanios")
Dim tCveAlmacen As Integer = -1
If ObjInventario.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
tCveAlmacen = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen").ToEntero()
End If
Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=tCveAlmacen).FiltroPrimeroValor("CveAlmacenVirtual").ToEntero()
'VERIFICA SI TIENE ALMACEN VIRTUAL
If CveAlmacenVirtual > 0 Then
ValidarRecepcionUsados = RecibidaCompleta
If ObjInventario.GetMovimientosDetalleVirtual(CveMovimiento, UsuarioActual.CveEmpresa, CveCompra:=CveCompraSurtir, ValidaUsadosCompra:=ValidarRecepcionUsados) Then 'ValidarRecepcionUsados
DtPSVirtual = ObjInventario.DtResultados
End If
If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 Then
Dim CveTipoAlmacenFiltro As Integer = If(CveTipoCompra = 9, 25, 24)
CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, If(TipoMovimiento > 1, 37, 36), 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, CveMovimientoRelacionado:=CveMovimiento, Observaciones:=TxtObservaciones.Text.Trim, Modulo:="RA/G4")
FolioVirtual = ObjInventario.Folio
For Each RowUsado As DataRow In DtPSVirtual.Rows
Dim CvePS = RowUsado("CvePS").ToString().ToEntero()
Dim CantidadUsado As Decimal = RowUsado("Cantidad").ToString().ToDecimal()
Dim PU As Decimal = RowUsado("Cargo").ToString().ToDecimal()
Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero()
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then
ErrorMovInv = True
Exit For
End If
Next
If SumarImporteUsados Then
If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) Then
ImporteIngresoAdicional = ObjInventario.DtResultados.SUMD("TotalOriginal")
End If
End If
Dim tConcepto As String = String.Format("Entrada Virtual {0}", HLFolio.Text)
Dim tReferencia As String = HLFolio.Text
Dim tCvePrePoliza = ObjConta.AddPrePolizas("Inv_RAlmVirtual", 74, 0, 0, 1, TxtFecha.Text.ToDate, tConcepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If tCvePrePoliza > 0 Then
If ObjConta.AddPrePolizasDetalle(tCvePrePoliza, True, ImporteIngresoAdicional, tReferencia, 205, tConcepto, TxtFecha.Text.ToDate, 0, -1, CveCompra:=CveCompraSurtir, CveMovimientoAlmacen:=CveMovimientoVirtual, ImporteMX:=ImporteIngresoAdicional) Then
If Not ObjConta.AddPrePolizasDetalle(tCvePrePoliza, False, ImporteIngresoAdicional, tReferencia, 68, tConcepto, TxtFecha.Text.ToDate, 0, -1, CveCompra:=CveCompraSurtir, CveMovimientoAlmacen:=CveMovimientoVirtual, ImporteMX:=ImporteIngresoAdicional) Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
End If
'DEVENGAR AC
If Not ErrorMovInv AndAlso UsuarioActual.Empresa.UsaAC AndAlso EsContabilizable Then
Dim IDPoliza As Integer
Dim TotalDetalle As Decimal = 0
Dim TotalPorDevengar = 0.0
TotalPorDevengar += GvInv.Rows.Cast(Of GridViewRow)().Sum(Function(Gvr) Math.Round(Gvr.DataKey("PU").ToString.ToDecimal, 4) * Math.Round(Gvr.DataKey("CantidadF").ToString.ToDecimal, 4))
TotalPorDevengar = Math.Round(TotalPorDevengar, 4)
If ObjContaAC Is Nothing Then
ObjContaAC = New ClsContPAQi(UsuarioActual.Empresa)
ObjContaAC.IniciaTransacSQL()
End If
IDPoliza = ObjContaAC.AddPoliza(4, "Devengado", TotalPorDevengar * 2, TotalPorDevengar * 2, UsuarioActual.CveUsuario, FechaMovto)
If IDPoliza > 0 AndAlso ObjContaAC.GetCuentas(-1, "-1", -1) Then
DtCuentas = ObjContaAC.DtResultados.Copy
Dim drRegistroMatriz As DataRow
Dim CuentaCargo As Integer
Dim CuentaAbono As Integer
Dim Importe As Decimal = 0
For Each gvr As GridViewRow In GvInv.Rows
Importe = gvr.FCTextBox("TbCantidadF").Text.ToDecimal * gvr.DataKey("PU").ToString.ToDecimal
TotalDetalle += Importe
If Importe > 0 Then
If ObjContaAC.AddMovimiento(IDPoliza, 1, False, Importe, "", "", 0, FechaMovto, "") Then
'actualizo el idcuenta del presupuesto
If Not ObjContaAC.AddMovimiento(IDPoliza, gvr.DataKey("IdCuentaComprometido").ToString.ToEntero, True, Importe, "", "", 0, FechaMovto, "") Then
ErrorMovInv = True
Exit For
End If
Else
ErrorMovInv = True
Exit For
End If
'AFECTAR MATRIZ EGRESOS
drRegistroMatriz = GlobalDTAC_MatrizEgresos.FiltroPrimero(String.Format("Partida = {0} And TipoGasto = {1}", gvr.DataKey("CodigoClasificacion").ToString, gvr.DataKey("CveTipoGasto").ToString))
If drRegistroMatriz IsNot Nothing AndAlso drRegistroMatriz("CuentaCargo").ToString.ToEntero > 0 Then
CuentaCargo = DtCuentas.FiltroPrimeroValor("Id", String.Format("Codigo = '{0}'", drRegistroMatriz("CuentaCargo").ToString)).ToEntero
CuentaAbono = DtCuentas.FiltroPrimeroValor("Id", String.Format("Codigo = '{0}'", drRegistroMatriz("CuentaAbono").ToString)).ToEntero
If CuentaCargo > 0 AndAlso CuentaAbono > 0 Then
If ObjContaAC.AddMovimiento(IDPoliza, CuentaCargo, False, Importe, "", "", 0, FechaMovto, "") Then
If Not ObjContaAC.AddMovimiento(IDPoliza, CuentaAbono, True, Importe, "", "", 0, FechaMovto, "") Then
ErrorMovInv = True
Exit For
End If
Else
ErrorMovInv = True
Exit For
End If
Else
ErrorMovInv = True
Exit For
End If
End If
'TERMINA AFECTAR MATRIZ INGRESOS
End If
Next
If TotalDetalle <= 0 AndAlso TotalPorDevengar >= TotalDetalle Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
If ErrorMovInv Then
Alert("Error al registrar los movimientos Contables", TipoMensaje.MsgError)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
End If
'TERMINA: DEVENGAR
Else
'VIRTUAL
If CveTipoCompra = 9 And RealizarMovimientoVirtual Then
Dim DtPSVirtual As New DataTable("DtTamanios")
DtPSVirtual.Columns.Add(New DataColumn("CvePS", GetType(Integer)))
DtPSVirtual.Columns.Add(New DataColumn("Cantidad", GetType(Decimal)))
DtPSVirtual.Columns.Add(New DataColumn("PU", GetType(Decimal)))
DtPSVirtual.Columns.Add(New DataColumn("CveUM", GetType(Integer)))
Dim DtComprasDetalle As DataTable = Nothing
Dim DtTamanios As DataTable = Nothing
If ObjCompras.GetCompraDetalle(CveCompraSurtir, UsuarioActual.CveEmpresa) Then
DtComprasDetalle = ObjCompras.DtResultados.Copy()
End If
DtTamanios = GlobalDTAcumTamaños(UsuarioActual.CveEmpresa)
For Each GvRow As GridViewRow In GvInv.Rows
If GvRow.RowType = DataControlRowType.DataRow Then
For Each Tam As DataRow In DtTamanios.Rows
If Tam("CveTamaño").ToString() = GvRow.DataKey("CveTamaño") Then
Dim CvePSCargo = Tam("CvePSCargo").ToString().ToEntero()
Dim RowCompraDetalle = DtComprasDetalle.FiltroPrimero($"CvePS = {CvePSCargo}")
If RowCompraDetalle IsNot Nothing Then
Dim Row As DataRow = DtPSVirtual.NewRow()
Row("CvePS") = CvePSCargo
Row("Cantidad") = GvRow.FCTextBox("TbCantidadF").Text.ToDecimal()
Row("PU") = RowCompraDetalle("PU").ToString().ToDecimal()
Row("CveUM") = GvRow.DataKey("CveUM").ToEntero()
DtPSVirtual.Rows.Add(Row)
End If
End If
Next
End If
Next
If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 Then
'Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero()
Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveAlmacenVirtual").ToEntero()
CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, If(TipoMovimiento > 1, 37, 36), 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Modulo:="RA/G5")
FolioVirtual = ObjInventario.Folio
For Each RowUsado As DataRow In DtPSVirtual.Rows
Dim CvePS = RowUsado("CvePS").ToString().ToEntero()
Dim CantidadUsado As Decimal = RowUsado("Cantidad").ToString().ToDecimal()
Dim PU As Decimal = RowUsado("PU").ToString().ToDecimal()
Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero()
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then
ErrorMovInv = True
Exit For
End If
Next
End If
If SumarImporteUsados Then
If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) Then
ImporteIngresoAdicional = ObjInventario.DtResultados.SUMD("TotalOriginal")
End If
End If
Else
Dim CveTipoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero()).FiltroPrimeroValor("CveTipoAlmacen").ToEntero()
If CveTipoAlmacen = 21 Then 'tipo: devs a proveedore
RealizarMovimientoVirtual = False
End If
If RealizarMovimientoVirtual Then
Dim DtPSVirtual As New DataTable("DtTamanios")
Dim CveMovimientoRef As Integer = -1
If RealizarTraspasoAlmacenDevolucion Then
CveMovimientoRef = CveMovimientoSalidaTraspaso
Else
CveMovimientoRef = CveMovimiento
End If
If ObjInventario.GetMovimientosDetalleVirtual(CveMovimientoRef, UsuarioActual.CveEmpresa, CveCompra:=CveCompraSurtir, ValidaUsadosCompra:=ValidarRecepcionUsados) Then
DtPSVirtual = ObjInventario.DtResultados
End If
If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 Then
Dim CveTipoAlmacenFiltro As Integer = 24
Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero()).FiltroPrimeroValor("CveAlmacenVirtual").ToEntero()
CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, 13, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, CveMovimientoRelacionado:=CveMovimientoRef, Observaciones:=TxtObservaciones.Text.Trim, Modulo:="RA/VD")
If CveMovimientoVirtual > 0 Then
FolioVirtual = ObjInventario.Folio
For Each RowUsado As DataRow In DtPSVirtual.Rows
Dim CvePS = RowUsado("CvePS").ToString().ToEntero()
Dim CantidadUsado As Decimal = RowUsado("Cantidad").ToString().ToDecimal()
Dim PU As Decimal = RowUsado("Cargo").ToString().ToDecimal()
Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero()
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then
ErrorMovInv = True
Exit For
End If
Next
If SumarImporteUsados Then
If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) Then
ImporteIngresoAdicional = ObjInventario.DtResultados.SUMD("TotalOriginal")
End If
End If
Else
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
End If
End If
''VALIDACIÓN DE IMPORTES INGRESADOS VS LA COMPRA U OC
'If Not UsuarioActual.Empresa.Funcionalidad(531) = "1" Then
If Not ErrorMovInv AndAlso RecibidaCompleta AndAlso UsuarioActual.CveEmpresa <> 140 Then
If ObjInventario.GetMovimientosDetalle(CveMovimientoOriginal, UsuarioActual.CveEmpresa) Then
Dim dtt As DataTable = ObjInventario.DtResultados
Dim tTotalInsertado As Decimal = dtt.SUMD("TotalOriginal") + ImporteIngresoAdicional
If CveTipoCompra = 8 Then 'entrada almacen con costo indirecto cargado en la misma compra
tTotalInsertado = dtt.SUMD("Total") + ImporteIngresoAdicional ' está incluido el costo indirecto en la factura
End If
If (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL <> tTotalInsertado.RoundSQL Then
ErrorMovInv = True
Alert("La Entrada no coincide con el valor del documento." & (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL & " -" & tTotalInsertado.RoundSQL.ToString, TipoMensaje.MsgError)
GuardaLog("La Entrada no coincide con el valor del documento." & (TotalCompraOC * If(TipoCambio > 1, TipoCambio, 1)).RoundSQL & " -" & tTotalInsertado.RoundSQL.ToString)
End If
Else
ErrorMovInv = True
End If
End If
' End If
'ACTUALIZA ESTATUS ALMACEN
If TipoMovimiento = 2 Then
If Not ObjCompras.UpdateEstatusAlmacen(CveCompraSurtir, 0, UsuarioActual.CveUsuario) Then
ErrorMovInv = True
End If
End If
'VERIFICA SI TIENE PENDIENTE POR SURTIR
If UsuarioActual.CveEmpresa = 140 AndAlso TipoMovimiento = 3 Then
If ObjInventario.RecepcionAlmacenGet(CveCompraSurtir, -1, -1, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
Dim DtFaltante As DataTable = ObjInventario.DtResultados.FiltraParametros("CantidadF > 0")
If DtFaltante.Rows.Count = 0 Then
If Not ObjCompras.UpdateEstatusAlmacen(CveCompraSurtir, 2, UsuarioActual.CveUsuario) Then
ErrorMovInv = True
End If
End If
DtFaltante.Dispose()
End If
End If
'AGREGA BITACORA TEMPORAL
If DtBitacora IsNot Nothing AndAlso DtBitacora.Rows.Count > 0 Then
ErrorMovInv = GuardaBitacoraTemporal(ObjBitacora, CveMovimiento)
End If
'PREPOLIZA - SOLO CUANDO SEA RECEPCIÓN
If TipoMovimiento = 1 AndAlso Not ErrorMovInv Then
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
Dim DtCostos As DataTable = Nothing
Dim ValorInventario As Decimal = 0
DtCostos = ObjInventario.DtResultados
Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL
Dim TotalCostoExtranjero As Decimal = DtCostos.SUMD("TotalExtranjero")
'VARIABLES
Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero
' Dim CveCuentaAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero
Dim IdCtaContableRecepcion = -1
Dim IdCtaContableRecepcionME = -1
Dim IdCtaContableRecepcionComplementaria = -1
Dim Fecha As Date = Now
Dim CveProveedor As Integer = -1
Dim ProveedorNombre As String = ""
Dim SerieFolio As String = ""
Dim CveConceptoContableCosto = -1
Dim CveConceptoContableCostoME = -1
Dim CveConceptoContableCostoComplementaria = -1
Dim UsaComplementariaFleteImportaciones As Boolean = False
If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = False
If DtCostos.Rows.Count > 0 Then
If CveCompraSurtir > 0 Then
If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then
'Fecha = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate
Fecha = TxtFecha.Text.ToDate
CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero
ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString
SerieFolio = $"Compra: {ObjCompras.DtResultados(0)("SerieFolio").ToString}"
CveConceptoContableCosto = 205
CveConceptoContableCostoME = 230
CveConceptoContableCostoComplementaria = 231
If ObjConta.GetRetCuenta(205, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(230, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(231, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
Else
ErrorMovInv = True
End If
ElseIf CveOCSurtir > 0 Then
If ObjOC.GetOC(CveOCSurtir, UsuarioActual.CveEmpresa) Then
'Fecha = ObjOC.DtResultados(0)("Fecha").ToString.ToDate
Fecha = TxtFecha.Text.ToDate
CveProveedor = ObjOC.DtResultados(0)("CveProveedor").ToString.ToEntero
ProveedorNombre = ObjOC.DtResultados(0)("RazonSocial").ToString
SerieFolio = String.Format("{0} OC# {1} - Almacén# {2}", ProveedorNombre, ObjOC.DtResultados(0)("Folio"), ObjInventario.Folio)
CveConceptoContableCosto = 176
CveConceptoContableCostoME = 228
CveConceptoContableCostoComplementaria = 229
If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaFleteImportaciones = True
If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(176, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableRecepcion = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(228, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableRecepcionME = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
If UsaComplementariaFleteImportaciones AndAlso ObjConta.GetRetCuenta(229, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableRecepcionComplementaria = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
Else
ErrorMovInv = True
End If
End If
If Not ErrorMovInv Then
Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero
CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen", 74, TotalCosto, TotalCosto, 1, Fecha, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePoliza > 0 Then
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveSubProyecto:=CveSubProyecto, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, Contabilizable:=If(CveTipoCompra = 10, False, EsContabilizable)) Then
'AGREGA POR CONCEPTO POR CVEOCDETALLE
If CveOCSurtir > 0 Then
Dim TotalCostoDetalle As Decimal = 0
Dim TotalCostoAcumulado As Decimal = 0
Dim cont As Integer = 1
For Each Dr As DataRow In DtCostos.Rows
TotalCostoDetalle = (Dr("Total").ToString.ToDecimal)
TotalCostoExtranjero = Dr("TotalExtranjero").ToString.ToDecimal
TotalCostoAcumulado += TotalCostoDetalle.RoundSQL
'si es el último movimiento verifica los importes que sean igual
If cont = DtCostos.Rows.Count AndAlso (TotalCosto.RoundSQL <> TotalCostoAcumulado.RoundSQL) Then
TotalCostoDetalle = TotalCostoDetalle + (TotalCosto.RoundSQL(3) - TotalCostoAcumulado.RoundSQL(3))
TotalCostoExtranjero = TotalCostoExtranjero + (TotalCosto.RoundSQL(3) - TotalCostoAcumulado.RoundSQL(3))
End If
If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then
'COMPLEMENTARIA
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero, Contabilizable:=EsContabilizable) Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveSubProyecto:=CveSubProyecto, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero, Contabilizable:=EsContabilizable) Then
ErrorMovInv = True
Exit For
End If
Else
ErrorMovInv = True
Exit For
End If
Else
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoDetalle, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveSubProyecto:=CveSubProyecto, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoDetalle, CveCuenta:=-1, CveOCDetalle:=Dr("CveOrdenCompraDetalle").ToString.ToEntero) Then
ErrorMovInv = True
Exit For
End If
End If
cont = cont + 1
Next
Else
TotalCosto = DtCostos.SUMD("Total").RoundSQL
TotalCostoExtranjero = DtCostos.SUMD("TotalExtranjero")
If CveMoneda <> 1 AndAlso UsaComplementariaFleteImportaciones Then
'COMPLEMENTARIA
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoME, SerieFolio, Fecha, IdCtaContableRecepcionME, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio, Contabilizable:=EsContabilizable) Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto - TotalCostoExtranjero, SerieFolio, CveConceptoContableCostoComplementaria, SerieFolio, Fecha, IdCtaContableRecepcionComplementaria, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto - TotalCostoExtranjero, ImporteME:=TotalCostoExtranjero, TipoCambio:=TipoCambio, Contabilizable:=EsContabilizable) Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
Else
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto, SerieFolio, CveConceptoContableCosto, SerieFolio, Fecha, IdCtaContableRecepcion, -1, CveCompra:=CveCompraSurtir, CveOC:=CveOCSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=-1, Contabilizable:=EsContabilizable) Then
ErrorMovInv = True
End If
End If
End If
Else
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then
If ObjConta.ValorPolizaDescuadre > 0 Then
GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
MensajeError = "El Movimiento presenta una diferencia en el registro."
ErrorMovInv = True
End If
End If
'CONTABILIZAR - UNIFICAR Y SIMPLIFICAR CON PP DE LA COMPRA
If Not ErrorMovInv Then
If CvePrePolizaCompra > 0 Then
If UsuarioActual.Empresa.Funcionalidad(219) = "1" Then
If Not ObjConta.PrePolizaUnificacion(CvePrePoliza, CvePrePolizaCompra) Then
ErrorMovInv = True
MensajeError = "Error al unificar los conceptos contables"
End If
End If
End If
If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then
If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then
ErrorMovInv = True
MensajeError = "Error al simplificar los conceptos contables"
End If
End If
If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then
If ObjContaContPAQ Is Nothing Then
ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa)
ObjContaContPAQ.IniciaTransacSQL()
End If
If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then
MensajeContabilidad = $"<br>Movimiento contabilizado en el folio: <b><a class='Texto' href = '/Contabilidad/RegPoliza.aspx?IdPoliza={ObjConta.ContaIdPoliza}'>{ObjConta.ContaFolio}</a></b><br>"
Else
ErrorMovInv = True
MensajeError = "Error al contabilizar los conceptos contables"
End If
End If
End If
End If
Else
ErrorMovInv = True
MensajeError = "Error al obtener movimientos"
End If
End If
'PREPOLIZA - NC
If TipoMovimiento = 3 AndAlso Not ErrorMovInv Then
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
Dim DtCostos As DataTable = Nothing
DtCostos = ObjInventario.DtResultados
Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL
Dim TotalNC As Decimal = 0
Dim CveClasificacionDifCostoNC = -1
Dim tTipoCambio As Decimal = 1
If CveMoneda <> 1 Then tTipoCambio = TipoCambio
For Each gvr As GridViewRow In GvInv.Rows
TotalNC += gvr.FCTextBox("TbCantidadF").Text.ToDecimal * gvr.DataKey("PU").ToDecimal * tTipoCambio
CveClasificacionDifCostoNC = gvr.DataKey("CveClasificacion").ToEntero
Next
Dim IdCtaContableClasificacion As Integer = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {CveClasificacionDifCostoNC}").ToEntero
TotalNC = TotalNC.RoundSQL
Dim DifCostoNC As Decimal = (TotalCosto - TotalNC).RoundSQL
'VARIABLES
Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero
'Dim CveCuentaAlmacen As Integer = 0 'GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContableSIG", $"CveAlmacen = {DdlAlmacen.SelectedValue}").ToEntero
Dim Fecha As Date = TxtFecha.Text.ToDate
Dim CveProveedor As Integer = -1
Dim ProveedorNombre As String = ""
Dim SerieFolio As String = ""
Dim IdCtaContableNC = 0
Dim CveConceptoContableNC = -1
If DtCostos.Rows.Count > 0 Then
If CveCompraSurtir > 0 Then
If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then
CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero
ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString
SerieFolio = $"NC: {ObjCompras.DtResultados(0)("SerieFolio").ToString}"
CveConceptoContableNC = 225
If ObjConta.GetRetCuenta(CveConceptoContableNC, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableNC = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
Else
ErrorMovInv = True
End If
End If
Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {DdlAlmacen.SelectedValue}").ToEntero()
If Not ErrorMovInv Then
CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen-NC", 74, TotalCosto, TotalCosto, 1, Fecha, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePoliza > 0 Then
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalNC, SerieFolio, CveConceptoContableNC, SerieFolio, Fecha, IdCtaContableNC, -1, CveCompra:=CveCompraSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalNC, Contabilizable:=EsContabilizable) Then
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto * -1, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto * -1, Contabilizable:=If(CveTipoCompra = 10, False, EsContabilizable)) Then
If DifCostoNC <> 0 Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, DifCostoNC * -1, SerieFolio, 69, SerieFolio, Fecha, IdCtaContableClasificacion, -1, CveClasificacion:=CveClasificacionDifCostoNC, CveCompra:=CveCompraSurtir, CveProveedor:=CveProveedor, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=DifCostoNC * -1, Contabilizable:=EsContabilizable, CveSubProyecto:=CveSubProyecto) Then
ErrorMovInv = True
End If
End If
Else
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then
If ObjConta.ValorPolizaDescuadre > 0 Then
GuardaLogAD($"Inventarios/RecepcionAlmacen-PPNC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
ErrorMovInv = True
End If
End If
'CONTABILIZAR - UNIFICAR Y SIMPLIFICAR CON PP DE LA COMPRA
If Not ErrorMovInv Then
If CvePrePolizaCompra > 0 Then
If UsuarioActual.Empresa.Funcionalidad(219) = "1" Then
If Not ObjConta.PrePolizaUnificacion(CvePrePoliza, CvePrePolizaCompra) Then
ErrorMovInv = True
MensajeError = "Error al unificar los conceptos contables"
End If
End If
End If
If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then
If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then
ErrorMovInv = True
MensajeError = "Error al simplificar los conceptos contables"
End If
End If
If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then
ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa)
ObjContaContPAQ.IniciaTransacSQL()
If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then
MensajeContabilidad = $"<br>Movimiento contabilizado en el folio: <b><a class='Texto' href = '/Contabilidad/RegPoliza.aspx?IdPoliza={ObjConta.ContaIdPoliza}'>{ObjConta.ContaFolio}</a></b><br>"
Else
ErrorMovInv = True
MensajeError = "Error al contabilizar los conceptos contables"
End If
End If
End If
End If
Else
ErrorMovInv = True
MensajeError = "Error al obtener movimientos"
End If
End If
If Not ErrorMovInv AndAlso TipoMovimiento = 2 AndAlso CveMovimientoSalidaTraspaso > 0 Then
'VARIABLES
Dim Fecha As Date = Now
Dim CveProveedor As Integer = -1
Dim ProveedorNombre As String = ""
Dim SerieFolio As String = ""
'Dim DrAlmO, DrAlmD As DataRow
'Dim CveSucursalOrigen, CveSucursalDestino As Integer
'Dim TipoAlmacenOrigen, TipoAlmacenDestino As Integer
'Dim CveSubProyectoOrigen, CveSubProyectoDestino As Integer
Dim IdCtaContableOrigen, IdCtaContableDestino As Integer
If ObjCompras.GetCompras(CveCompraSurtir, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then
'Fecha = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate
Fecha = TxtFecha.Text.ToDate
CveProveedor = ObjCompras.DtResultados(0)("CveProveedor").ToString.ToEntero
ProveedorNombre = ObjCompras.DtResultados(0)("RazonSocial").ToString
SerieFolio = $"Compra: {ObjCompras.DtResultados(0)("SerieFolio").ToString}"
Else
ErrorMovInv = True
End If
'DrAlmO = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero).FiltroPrimero("")
'DrAlmD = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenDevolucionProveedor).FiltroPrimero("")
'If Not ErrorMovInv AndAlso DrAlmO IsNot Nothing AndAlso DrAlmD IsNot Nothing Then
' CveSucursalOrigen = DrAlmO("CveSubProyecto").ToString.ToEntero
' TipoAlmacenOrigen = DrAlmO("CveTipoAlmacen").ToString.ToEntero
' CveSubProyectoOrigen = DrAlmO("CveSubProyecto").ToString.ToEntero
' IdCtaContableOrigen = DrAlmO("IdCtaContable").ToString.ToEntero
' CveSucursalDestino = DrAlmD("CveSubProyecto").ToString.ToEntero
' TipoAlmacenDestino = DrAlmD("CveTipoAlmacen").ToString.ToEntero
' CveSubProyectoDestino = DrAlmD("CveSubProyecto").ToString.ToEntero
' IdCtaContableDestino = DrAlmO("IdCtaContable").ToString.ToEntero
'Else
' ErrorMovInv = True
'End If
Dim resultado As DataTable = Nothing
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaTraspaso, UsuarioActual.CveEmpresa) Then
resultado = ObjInventario.DtResultados.Copy()
Else
ErrorMovInv = True
End If
'Dim CveSubProyecto As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen= {CveAlmacenDevolucionProveedor}").ToEntero()
'AGREGAMOS PREPOLIZAS TRASPASO DIRECTO:
Dim CvePrePolizaTraspaso As Integer = ObjConta.AddPrePolizas("RecepcionAlmacen/TraspasoAlmacen", 53, 0, 0, 1, Now, ProveedorNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePolizaTraspaso > 0 AndAlso ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaTraspaso, UsuarioActual.CveEmpresa) Then
Dim importe As Decimal = resultado.SUMD("Total").RoundSQL
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, True, importe, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContableOrigen, -1, CveMovimientoAlmacen:=CveMovimientoSalidaTraspaso, Contabilizable:=False, ImporteMX:=importe) Then
ErrorMovInv = True
End If
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, False, importe, TxtObservaciones.Text, 68, TxtObservaciones.Text, Fecha, IdCtaContableDestino, -1, CveMovimientoAlmacen:=CveMovimiento, Contabilizable:=False, ImporteMX:=importe) Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
'AGREGA SALDOS A OC SURTIDAS
If Not ErrorMovInv And CveOCSurtir > 0 Then
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If Not ObjOC.OrdenesCompraDetalleSaldosInvCompraAdd(Dr("CveOrdenCompraDetalle").ToString.ToEntero, Dr("CveMovimientoDetalle").ToString.ToEntero, Dr("Cantidad").ToString.ToDecimal, -1, -1) Then
ErrorMovInv = True
Exit For
End If
Next
Else
ErrorMovInv = True
End If
End If
'DOCUMENTOS RELACIONADOS AL MOVIMIENTO
If Not ErrorMovInv AndAlso UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
If Not ErrorMovInv AndAlso Not GuardaDocumentoBitacora(ObjBitacora, CveMovimiento) Then
ErrorMovInv = True
Alert("Ocurrió un error al guardar los datos adjuntos de la bitácora", TipoMensaje.MsgError)
End If
End If
Catch ex As Exception
OnError("Ocurrió un error al guardar RA.", ex)
ErrorMovInv = True
End Try
'FINAL
If Not ErrorMovInv Then
ObjInventario.Commit() ' aplica los movimientos insertados
If ObjContaAC IsNot Nothing Then ObjContaAC.Commit()
If ObjContaContPAQ IsNot Nothing Then ObjContaContPAQ.Commit()
RegistraScript("playsonidito('beep-07.wav')")
' 'ENVIO DE CORREO NOTIFICACION A VENDEDORES DE OC
MandaCorreoOCVendedores(CveCompraSurtir, CveMovimiento)
Dim Msg As New StringBuilder
Dim link As String = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimiento, InvFolio)
'SI LO SOLO GENERO EL MOVIMIENTO DE ENTRADA O SALIDA
If CveMovimiento > 0 AndAlso CveMovimientoSalidaTraspaso <= 0 Then
Msg.AppendFormat("Movimiento Registrado: Folio: <b>{0}</b>", link)
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento)))
If MensajeOC.Length > 0 Then
Msg.AppendFormat("<br/>La Orden de Compra se dividió en los siguientes productos:<br/>{0}", MensajeOC)
End If
If UsuarioActual.CveEmpresa.Contiene(1, 119) Then
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Etiqueta Individual</a> ", Encripta(String.Format("OP=Etiqueta&CveMovimiento={0}&Modalidad={1}", CveMovimiento, "Individual")))
'Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Etiqueta Por Caja</a> ", Encripta(String.Format("OP=Etiqueta&CveMovimiento={0}&Modalidad={1}", CveMovimiento, "Caja")))
End If
'SI GENERO UN TRASPASO AL ALMACEN DE DEVOLUCION
ElseIf CveMovimiento > 0 AndAlso CveMovimientoSalidaTraspaso > 0 Then
Msg.AppendFormat("Movimiento de Salida: Folio: <b>{0}</b>", String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimientoSalidaTraspaso, FolioSalidaTraspaso))
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalidaTraspaso)))
Msg.AppendFormat("<br/><br/>Movimiento de control: Folio: <b>{0}</b>", link)
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento)))
End If
'If CveMovtoSalidaDirecta > 0 Then
' Msg.AppendFormat("<br/><br/> Movimientos de control:<br/>")
' link = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovtoSalidaDirecta, FolioSalidaDirecta)
' Msg.AppendFormat("Movimiento de Salida Folio: <b>{0}</b>", link)
'End If
'ENTREGA DIRECTA
If MovtosSalidaDirecta.Count > 0 Then
Msg.AppendFormat("<br/><br/> Movimientos de control:<br/>")
If MovtosEntradaExA.Count > 0 Then
For index = 0 To MovtosEntradaExA.Count - 1
link = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", MovtosEntradaExA(index), FoliosEntradaExA(index))
Msg.AppendFormat("<br/>Movimiento de Entrada Folio: <b>{0}</b>", link)
Next
End If
For index = 0 To MovtosSalidaDirecta.Count - 1
link = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", MovtosSalidaDirecta(index), FoliosSalidaDirecta(index))
Msg.AppendFormat("<br/>Movimiento de Salida Folio: <b>{0}</b>", link)
Next
End If
'APARTADO
If MovtosSalida.Count > 0 Then
Msg.AppendFormat("<br/><br/> Movimientos de control:<br/>")
For index = 0 To MovtosSalida.Count - 1
link = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", MovtosSalida(index), FoliosSalida(index))
Msg.AppendFormat("<br/>Movimiento de Salida por Traspaso: Folio: <b>{0}</b>", link)
link = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", MovtosEntrada(index), FoliosEntrada(index))
Msg.AppendFormat("<br/>Movimiento de Entrada por Traspaso: Folio: <b>{0}</b><br/>", link)
Next
End If
'VIRTUAL
If CveMovimientoVirtual > 0 Then
link = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimientoVirtual, FolioVirtual)
Msg.AppendFormat("<br/>Movimiento de Entrada al Almacen Virtual: Folio: <b>{0}</b>", link)
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoVirtual)))
End If
'CONTABILIDAD
Msg.Append(MensajeContabilidad)
Alert(Msg.ToString, TipoMensaje.MsgInformacion)
If ObjInventario.RecepcionAlmacenGet(CveCompraSurtir, -1, -1, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
CreaDTInv(ObjInventario.DtResultados)
CargaGVInv()
BtnGuardar.Visible = True
End If
Limpia()
Else
ObjInventario.RollBack()
If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack()
If ObjContaContPAQ IsNot Nothing Then ObjContaContPAQ.RollBack()
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
If Not String.IsNullOrEmpty(MensajeError) Then
Alert($"Ocurrió un error al guardar el movimiento de almacén. Por favor vuelva a intentar. <br><br> {MensajeError}", TipoMensaje.MsgError)
End If
End If
ObjInventario.Dispose()
If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose()
If ObjContaContPAQ IsNot Nothing Then ObjContaContPAQ.Dispose()
End Sub
Private Function GenerarMovimientoAlmacenVenta(CveAlmacen As Integer, CveConceptoAlmacen As Integer, CveVenta As Integer, CveMovimientoRelacionado As Integer, DtDetalle As DataTable, ObjInventario As ClsInventarios, ObjConta As ClsContabilidad, ObjContaContPAQ As ClsContPAQi, EsContabilizable As Boolean, Modulo As String) As MMovimientoAlmacen
Dim ErrorMovInv As Boolean = False
Dim Retorno As New MMovimientoAlmacen
Dim CveMovtoSalidaDirecta As Integer = -1
Dim FolioSalidaDirecta As Integer = -1
CveMovtoSalidaDirecta = ObjInventario.AddMovimiento(CveAlmacen, CveConceptoAlmacen, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1,
CveVenta, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio),
MovimientoFijo:=True, CveMovimientoRelacionado:=CveMovimientoRelacionado, Remision:=TxtRemision.Text, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:=Modulo)
FolioSalidaDirecta = ObjInventario.Folio
If Not CveMovtoSalidaDirecta > 0 Then
ErrorMovInv = True
End If
If Not ErrorMovInv AndAlso DtDetalle IsNot Nothing Then
For Each Dr As DataRow In DtDetalle.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovtoSalidaDirecta, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then
ErrorMovInv = True
Exit For
End If
Next
End If
If Not ErrorMovInv AndAlso CveConceptoAlmacen = 3 Then
If Not GeneraPrePolizaSalidaEntregaDirecta(CveMovtoSalidaDirecta, ObjInventario, ObjConta, ObjContaContPAQ, EsContabilizable) Then
ErrorMovInv = True
End If
End If
If Not ErrorMovInv Then
Retorno.CveMovimiento = CveMovtoSalidaDirecta
Retorno.Folio = FolioSalidaDirecta
End If
Return Retorno
End Function
Private Sub GuardaImportacionFlete()
Dim CveMovimiento As Integer
Dim InvFolio As String = ""
Dim FechaMovto As Date = TxtFecha.Text.ToDate
Dim ErrorMovInv As Boolean
Dim MensajeError = ""
Dim ObjInventario As New ClsInventarios
Dim ObjBitacora As New ClsOIEventos(ObjInventario.IniciaTransacSQL())
Dim ObjCompras As New ClsCompras(ObjInventario.IniciaTransacSQL())
Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
Dim ObjOC As New ClsOC(ObjInventario.IniciaTransacSQL())
Dim ObjContaAC As ClsContPAQi = Nothing
'ENTRADA ALMACÉN
CveMovimiento = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, 2, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveImportacionCompra, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=-1, Remision:=TxtRemision.Text, Modulo:="RA/G6")
If CveMovimiento > 0 Then
InvFolio = ObjInventario.Folio.ToString
Dim DtDetalle As New DataTable
Dim DtDetalleLote As New DataTable
Dim PU As Decimal = 0
Dim CostoIndirecto As Decimal = 0
Dim PUExtranjero As Decimal = 0
For Each gvr As GridViewRow In GvInv.Rows
If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
PU = DtInv.Rows(gvr.RowIndex)("PU").ToString.ToDecimal
CostoIndirecto = DtInv.Rows(gvr.RowIndex)("CostoIndirecto").ToString.ToDecimal
PUExtranjero = DtInv.Rows(gvr.RowIndex)("PUExtranjero").ToString.ToDecimal
'SI FUE POR SERIE LOTE
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero))
DtDetalleLote = DtDatosLoteDetalle.FiltraParametros(String.Format("ConsecId = {0}", gvr.DataKey("Consec").ToEntero))
If DtDetalle.Rows.Count > 0 Then
For Each Dr As DataRow In DtDetalle.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Serie:=Dr("Serie").ToString, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), Lote:=If(CBool(gvr.DataKey("AplicaLote")), gvr.FCTextBox("TxtLote").Text, ""), CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
Next
ElseIf DtDetalleLote.Rows.Count > 0 Then
For Each Dr As DataRow In DtDetalleLote.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
Next
Else
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, gvr.FCTextBox("TbCantidadF").Text.ToDouble, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, PU, -1, PUTC:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, PUExtranjero), CveCompraDetalle:=gvr.DataKey("CveCompraDetalle").ToEntero, CveOrdenCompraDetalle:=gvr.DataKey("CveOrdenCompraDetalle").ToEntero, CveVentaDetalle:=gvr.DataKey("CveVentaDetalle").ToEntero, CostoIndirecto:=CostoIndirecto, FechaCaducidad:=If(CBool(gvr.DataKey("AplicaCaducidad")), gvr.FCTextBox("TxtCaducidad").Text.ToDate, MinFecha), Lote:=If(CBool(gvr.DataKey("AplicaLote")), gvr.FCTextBox("TxtLote").Text, ""), CveSeccionAlmacen:=If(CBool(gvr.DataKey("AplicaSeccion")), gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, -1)) Then
ErrorMovInv = True
Exit For
End If
End If
End If
Next
Else
ErrorMovInv = True
End If
'AGREGA BITACORA TEMPORAL
If DtBitacora IsNot Nothing AndAlso DtBitacora.Rows.Count > 0 Then
ErrorMovInv = GuardaBitacoraTemporal(ObjBitacora, CveMovimiento)
End If
Dim CvePrePoliza As Integer = 0
Dim UsaComplementariaCostoIndirecto As Boolean = False
Dim ConceptoPrePoliza As String = String.Format("{0}-{1}", LbProveedor.Text, HLFolio.Text)
If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaCostoIndirecto = False
Dim PorcentajeCompraImportacion As Decimal = 0 ' si hay mas de una factura de importación saber lo que se está recibiendo
'SE REGISTRAN LAS PREPOLIZAS
If Not ErrorMovInv Then
CvePrePoliza = ObjConta.AddPrePolizas("Inventario/RecepcionAlmacen CostoInd", 74, 0, 0, 1, FechaMovto, ConceptoPrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
Dim DtTempCompras As DataTable = Nothing
PorcentajeCompraImportacion = 1
If CveFleteSurtir > 0 Then
If ObjInventario.GetFleteDetalle(CveFleteSurtir) Then
DtTempCompras = ObjInventario.DtResultados
' faltaría agregar la factura de producto,
If ObjCompras.GetCompras(CveFleteCompra, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa) Then
Dim drc As DataRow = DtTempCompras.NewRow
Dim drr As DataRow = ObjCompras.DtResultados.FiltroPrimero("")
If drr IsNot Nothing Then
drc("CveCompra") = CveFleteCompra
drc("SubTotal") = drr("SubTotal")
drc("TipoCambio") = drr("TipoCambio")
drc("CveProveedor") = drr("CveProveedor")
drc("SubTotalTC") = drr("SubTotalTC")
DtTempCompras.Rows.Add(drc)
End If
End If
Else
ErrorMovInv = True
End If
Else
If CveImportacionSurtir > 0 Then
If ObjCompras.GetImportacionesDetalle(CveImportacionSurtir, -1) Then
DtTempCompras = ObjCompras.DtResultados
Dim CveCompraImportacion As Integer = -1
If (DdlFactura.SelectedValue.ToEntero > 0) Then CveCompraImportacion = DdlFactura.SelectedValue.ToEntero
If ObjCompras.GetImportacionCompras(CveImportacionSurtir, CveCompraImportacion) Then
For Each drt As DataRow In ObjCompras.DtResultados.Rows
PorcentajeCompraImportacion = If(CveCompraImportacion > 0, drt("PorcentajeCompra").ToString.ToDecimal, 1)
Dim drc As DataRow = DtTempCompras.NewRow
drc("CveCompra") = drt("CveCompra")
drc("SubTotal") = drt("SubTotal")
drc("TipoCambio") = drt("TipoCambio")
drc("CveProveedor") = drt("CveProveedor")
drc("SubTotalTC") = drt("SubTotalTC")
DtTempCompras.Rows.Add(drc)
Next
End If
Else
ErrorMovInv = True
End If
End If
End If
If CvePrePoliza > 0 Then
Dim dtta As DataTable = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero)
Dim IdCtaContableAlmacen As Integer = -1
Dim CveSubProyecto As Integer = -1
If dtta IsNot Nothing Then
IdCtaContableAlmacen = dtta.FiltroPrimeroValor("IdCtaContable").ToEntero
CveSubProyecto = dtta.FiltroPrimeroValor("CveSubProyecto").ToEntero
End If
ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa)
Dim TotalCosto As Decimal = ObjInventario.DtResultados.SUMD("Total").RoundSQL()
Dim IdCtaContableCostoInd As Integer = 0
'si reciben parcialidades de producto. en base al total de la importacion y lo recibido.
Dim PorcentajeRecepcionCompras As Decimal = TotalCosto / DtTempCompras.SUMD("SubTotalTC")
Dim ConceptoPartida As String = String.Format("{0}- Inv#{1}", HLFolio.Text, InvFolio)
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, InvFolio, 68, InvFolio, FechaMovto, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveSubProyecto:=CveSubProyecto, Contabilizable:=If(CveTipoCompra = 10, False, True)) Then
'se recorren las facturas a descontar el recepción
If DtTempCompras IsNot Nothing AndAlso DtTempCompras.Rows.Count > 0 Then
For Each dr As DataRow In DtTempCompras.Rows
Dim CveComp As Integer = dr("CveCompra").ToString.ToEntero
'el porcentaje solo aplica a las facturas de costo indirecto
Dim SubTotalPartida As Decimal = dr("SubTotal").ToString.ToDecimal * If(dr("TipoCompra").ToString = "CI", PorcentajeCompraImportacion, 1) * PorcentajeRecepcionCompras
Dim ImporteAbono As Decimal = (SubTotalPartida * dr("TipoCambio").ToString.ToDecimal).RoundSQL
Dim ImporteAbonoME As Decimal = 0
Dim CveConceptoCostoIndirecto As Integer = If(CveImportacionSurtir > 0, 240, 237)
If ObjConta.GetRetCuenta(CveConceptoCostoIndirecto, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then
IdCtaContableCostoInd = ObjConta.DtResultados.FiltroPrimeroValor("IdCtaContable").ToEntero
End If
If UsaComplementariaCostoIndirecto Then
CveConceptoCostoIndirecto = If(CveImportacionSurtir > 0, 241, 238)
ImporteAbono = SubTotalPartida
ImporteAbonoME = (SubTotalPartida * dr("TipoCambio").ToString.ToDecimal) - SubTotalPartida
End If
If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, ConceptoPartida, CveConceptoCostoIndirecto, ConceptoPartida, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono, CveSubProyecto:=CveSubProyecto) Then
' si tiene valor es que hay complementaria
If ImporteAbonoME > 0 Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, ConceptoPartida, If(CveImportacionSurtir > 0, 242, 239), ConceptoPartida, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then
ErrorMovInv = True
End If
End If
Else
ErrorMovInv = True
End If
Next
End If
End If
'DOCUMENTOS RELACIONADOS AL MOVIMIENTO
If Not ErrorMovInv AndAlso UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
If Not ErrorMovInv AndAlso Not GuardaDocumentoBitacora(ObjBitacora, CveMovimiento) Then
ErrorMovInv = True
Alert("Ocurrió un error al guardar los datos adjuntos de la bitácora", TipoMensaje.MsgError)
End If
End If
Else
ErrorMovInv = True
End If
End If
If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, 6) Then
If ObjConta.ValorPolizaDescuadre > 0 Then
GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
ErrorMovInv = True
End If
End If
If Not ErrorMovInv AndAlso UsuarioActual.Empresa.Funcionalidad(200) = "1" Then
ObjContaAC = New ClsContPAQi(UsuarioActual.Empresa)
ObjContaAC.IniciaTransacSQL()
If ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaAC) Then
MensajeError = $"<br>Movimiento contabilizado en el folio: <b><a class='Texto' href = '/Contabilidad/RegPoliza.aspx?IdPoliza={ObjConta.ContaIdPoliza}'>{ObjConta.ContaFolio}</a></b><br>"
Else
ErrorMovInv = True
MensajeError = "Error al contabilizar los conceptos contables"
End If
End If
If Not ErrorMovInv AndAlso CveImportacionSeleccionada > 0 Then
If Not ObjInventario.UpdateImportacionCierre(CveImportacionSeleccionada, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
ErrorMovInv = True
End If
End If
If Not ErrorMovInv AndAlso CveFleteSeleccionado > 0 Then
If Not ObjInventario.UpdateFleteCierre(CveFleteSeleccionado, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
ErrorMovInv = True
End If
End If
'FINAL
If Not ErrorMovInv Then
ObjInventario.Commit() ' aplica los movimientos insertados
If ObjContaAC IsNot Nothing Then ObjContaAC.Commit()
RegistraScript("playsonidito('beep-07.wav')")
Dim Msg As New StringBuilder
Dim link As String = String.Format("<a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimiento, InvFolio)
Msg.AppendFormat("Movimiento Registrado: Folio: <b>{0}</b>", link)
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento)))
Alert(Msg.ToString, TipoMensaje.MsgInformacion)
Limpia()
Else
ObjInventario.RollBack()
If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack()
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
GuardaLog(MensajeError)
Alert("Error al guardar el movimiento de almacen. Por favor vuelva a intentar.", TipoMensaje.MsgError)
End If
ObjInventario.Dispose()
If ObjContaAC IsNot Nothing Then ObjContaAC.Dispose()
End Sub
Private Sub Limpia()
CveCompraSurtir = -1
CvePrePolizaCompra = -1
CveOCSurtir = -1
CveImportacionSurtir = -1
CveImportacionProveedor = -1
CveImportacionCompra = -1
BuscaEntregaDirecta = -1
DivAdvertencia.Visible = False
EntregaDirecta = False
DtInv = Nothing
CargaGVInv()
TxtObservaciones.Text = ""
TxtOC.Text = ""
TxtFecha.Text = Now.ToShortDateString
DdlAlmacen.SelectedValueExist(-1)
TxtRemision.Text = ""
'ddlProveedor.SelectedValueExist(-1)
ddlProveedor.SelectedValue = "-1"
DdlFolio.Items.Clear()
DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlFolioOC.Items.Clear()
DdlFolioOC.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlFolioImportacion.Items.Clear()
DdlFolioImportacion.Items.Insert(0, New ListItem("Seleccione", "-1"))
CargaFoliosRecepcion()
DtBitacora.Clear()
DivBitacora.Visible = False
CargaEventoBitacoraTemp()
DdlMonedaTC.SelectedValueExist("1")
TipoCambio = 0
'TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate).ToString
DivTipoCambio.Visible = False
DivAdvertencia.Visible = False
UpTipoCambio.Update()
UPInv.Update()
UpGenerales.Update()
UpFiltros.Update()
HLFolio.Text = ""
HLFolio.NavigateUrl = "#"
LbProveedor.Text = ""
LbDescripcionCompra.Text = ""
DivDocumentos.Visible = False
'If DtDocumentos IsNot Nothing Then
' DtDocumentos.Clear()
' TxtDocumento.Text = ""
' 'GvDocumentos.DataSource = DtDocumentos
' 'GvDocumentos.DataBind()
'End If
UpDocumentos.Update()
UpDatosCompra.Update()
CargaPendientes()
End Sub
Private Function GuardaPrePoliza() As Boolean
Return True
End Function
#End Region
#Region " OC "
Private Sub CargaFoliosOC()
DdlFolioOC.Items.Clear()
Dim ObjInventarios As New ClsInventarios
If ddlProveedor.SelectedValue.ToEntero > 0 Then
If ObjInventarios.PendientesAlmacenOCGet(ddlProveedor.SelectedValue.ToEntero, MinFecha.ToShortDateString.ToDate, UsuarioActual.CveEmpresa) Then
DdlFolioOC.DataSource = ObjInventarios.DtResultados
Else
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
End If
ObjInventarios.Dispose()
DdlFolioOC.DataBind()
DdlFolioOC.Items.Insert(0, New ListItem("Seleccione", "-1"))
End Sub
Private Sub CargaPendientesOC()
Dim ObjInventarios As New ClsInventarios
Dim DtPendientesOC As New DataTable
If ObjInventarios.PendientesAlmacenOCGet(ddlProveedor.SelectedValue.ToEntero, TxtFechaPendientes.Text.ToDate, UsuarioActual.CveEmpresa) Then
DtPendientesOC = ObjInventarios.DtResultados
Else
DtPendientesOC = Nothing
Alert("Ocurrió un error al obtener las OC pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
ObjInventarios.Dispose()
If DtPendientesOC IsNot Nothing Then
GVPendientes.DataSource = DtPendientesOC
End If
LtActualizado.Text = String.Format("Actualizado: {0}", Now.ToString("H:mm"))
GVPendientes.DataBind()
UpPendientes.Update()
End Sub
Protected Sub BtnBuscarOC_Click(sender As Object, e As EventArgs) Handles BtnBuscarOC.Click
CargaOC()
End Sub
Private Sub CargaOC()
'OBTENE CveOC
Dim CveOC = -1
Dim MensajeCompra = ""
Dim FolioOC = TxtOC.Text.Trim.ToEntero
Dim ObjOC As New ClsOC
If ObjOC.GetOrdenesCompraRep("OC", -1, -1, -1, -1, MinFecha, MaxFecha, -1, -1, FolioOC, -1, -1, UsuarioActual.CveEmpresa, -1) Then
'If ObjOC.DtResultados.FiltraParametros("TipoTermino = 3").Rows.Count = 1 Then
If ObjOC.DtResultados.Rows(0)("TieneCompra").ToString.ToEntero > 0 Then 'Or UsuarioActual.Empresa.Funcionalidad(153).ToEntero > 0
MensajeCompra = String.Format("<a href=""/Inventarios/RecepcionAlmacen.aspx?CveCompra={0}"">{1}</a>", ObjOC.DtResultados.Rows(0)("CveCompraVinculada").ToString, ObjOC.DtResultados.Rows(0)("SerieFolioCompraVinculada").ToString)
Else
CveOC = ObjOC.DtResultados.FiltroPrimeroValor("CveOrdenCompra").ToString.ToEntero
End If
'End If
End If
ObjOC.Dispose()
RecibidaCompleta = False
If CveOC > 0 Then
CargaOCPorSurtir(CveOC)
Else
If MensajeCompra <> "" Then
Alert($"La orden de compra ya esta vinculada y debe darse recepción por medio de su compra: <br/>{MensajeCompra}", TipoMensaje.MsgAdvertencia)
Else
Alert("No se encontro ninguna orden de compra pendiente de recepción de almacén con el folio especificado.", TipoMensaje.MsgAdvertencia)
End If
End If
UpGenerales.Update()
UPInv.Update()
End Sub
Private Sub CargaOCPorSurtir(CveOC As Integer)
'REINICIALIZA VALORES
DdlMonedaTC.SelectedValueExist("1")
TipoCambio = 0
DivAdvertencia.Visible = False
EntregaDirecta = False
DivTipoCambio.Visible = False
DivAdvertencia.Visible = False
Apartado = False
BtnGuardar.Enabled = True
CargaAlmacenes(-1)
LtDocumento.Text = "ORDEN DE COMPRA"
CveCompraSurtir = -1
CvePrePolizaCompra = -1
Dim ObjOC As New ClsOC
Dim ObjInventario As New ClsInventarios
If ObjOC.GetOC(CveOC, UsuarioActual.CveEmpresa) Then
If ObjOC.DtResultados.Rows.Count > 0 Then
CveOCSurtir = CveOC
LbProveedor.Text = ObjOC.DtResultados.Rows(0)("RazonSocial").ToString
HLFolio.Text = ObjOC.DtResultados.Rows(0)("Folio").ToString
If UsuarioActual.TienePermisoProceso(201) Then
HLFolio.NavigateUrl = $"/OC/OC.aspx?OC={CveOCSurtir}"
End If
LbDescripcionCompra.Text = ObjOC.DtResultados.Rows(0)("Descripcion").ToString
CveMoneda = ObjOC.DtResultados.Rows(0)("CveMoneda").ToString.ToEntero
lbDescripcion.Text = ObjOC.DtResultados.Rows(0)("Descripcion").ToString
TotalCompraOC = ObjOC.DtResultados.Rows(0)("SubTotal").ToString.ToDecimal
'TipoCambio = ObjOC.DtResultados.Rows(0)("TipoCambio").ToString.ToDecimal
TipoCambio = 0
TipoMovimiento = 1
If ObjInventario.RecepcionAlmacenOCGet(CveOC, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosLoteDetalle = Nothing
CreaDtLoteDetalle()
CreaDTInv(ObjInventario.DtResultados.FiltraParametros("CantidadCompra = 0"))
BtnGuardar.Visible = True
'cuando están todos los detalles de la compra, nos indica que se va a recibir la totalidad de la compra
If ObjInventario.DtResultados.Rows.Count = ObjInventario.DtResultados.Rows(0)("NumDetalles").ToString.ToEntero Then
RecibidaCompleta = True
End If
''MONEDA DIFERENTE
If CveMoneda <> 1 Then
'DivTipoCambio.Visible = True
DdlMonedaTC.SelectedValueExist("2")
DdlMonedaTC_SelectedIndexChanged(DdlMonedaTC, EventArgs.Empty)
'TxtTipoCambio.Text = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate).ToString, TipoCambio.ToString)
TipoCambio = If(TipoCambio <= 0, GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal, TipoCambio)
If TipoCambio > 0 Then
LtAdvertencia.Text = "El cambio de moneda se aplicara al guardar el movimiento con el tipo de cambio indicado."
DivAdvertencia.Visible = True
Else
Alert("Ocurrió un error al cargar el tipo cambio. Por favor comuniquese con asistencia SIG.", TipoMensaje.MsgError)
BtnGuardar.Visible = False
End If
End If
UpTipoCambio.Update()
DivBitacora.Visible = True
If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
DivCodigoSeriePS.Visible = True
Else
DivCodigoSeriePS.Visible = False
End If
If UsuarioActual.Empresa.Funcionalidad(594) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(314) Then
DivDocumentos.Visible = True
UpDocumentos.Update()
End If
CargaGVInv()
Else
Alert("No hay productos pendientes de surtir de esta orden de compra. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
HLFolio.Text = ""
HLFolio.NavigateUrl = "#"
LbProveedor.Text = ""
LbDescripcionCompra.Text = ""
DtInv = Nothing
CargaGVInv()
CargaFoliosRecepcion()
End If
End If
Else
BtnGuardar.Visible = False
End If
ObjOC.Dispose()
ObjInventario.Dispose()
UpDatosCompra.Update()
End Sub
Class DetalleOC
Property CveOCDetalle As Integer
Property CantidadOC As Decimal
Property Cantidad As Decimal
Property PS As String
End Class
#End Region
#Region " TIPO DE CAMBIO "
Protected Sub DdlMonedaTC_SelectedIndexChanged(sender As Object, e As EventArgs)
Select Case DdlMonedaTC.SelectedValue.ToEntero
Case 1
TrTC1.Visible = False
TrTC2.Visible = False
For Each Dr As DataRow In DtInv.Rows
Dr("PU") = Dr("PUExtranjero")
Dr("Total") = Dr("PU").ToString.ToDecimal * Dr("Cantidad").ToString.ToDecimal
Dr("CostoIndirecto") = Dr("CostoIndirectoExtranjero")
Next
CargaGVInv()
'LtTotal.Text = DtMovimientos.SUM("Total", "").ToString.FormatoNumero
UPInv.Update()
Case 2
TrTC1.Visible = True
TrTC2.Visible = True
End Select
End Sub
Protected Sub BtnAplicarTC_Click(sender As Object, e As EventArgs)
AplicarTipoCambio()
CargaGVInv()
End Sub
Private Sub AplicarTipoCambio()
'TipoCambio = TxtTipoCambio.Text.ToDouble
If CveOCSurtir > 0 Then
TipoCambio = GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal
End If
For Each Dr As DataRow In DtInv.Rows
Dr("PU") = Dr("PUExtranjero").ToString.ToDecimal * TipoCambio
Dr("Total") = Dr("PU").ToString.ToDecimal * Dr("CantidadC").ToString.ToDecimal
Dr("CostoIndirecto") = Dr("CostoIndirectoExtranjero").ToString.ToDecimal * TipoCambio
Next
DtInv.AcceptChanges()
End Sub
#End Region
#Region " BITACORA "
Protected Sub GVEventoBitacora_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvBitacora.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
If e.Row.DBCampo("Archivo").ToString.Trim <> "" AndAlso -1 > 0 Then
e.Row.FCLinkButton("LinkArchivo").Visible = True
e.Row.FCLinkButton("LinkArchivo").CommandArgument = String.Format("OI\{0}", e.Row.DBCampo("Archivo").ToString)
ScriptManager.GetCurrent(Me).RegisterPostBackControl(e.Row.FCLinkButton("LinkArchivo")) 'Registro un evento Postbacktrigger, que recargue toda la pagina para que funcione
End If
If e.Row.DBCampo("Archivo").ToString.Trim <> "" Then
e.Row.Cells(5).Text = "SI"
Else
e.Row.Cells(5).Text = "NO"
End If
End If
End Sub
Private Sub InicializaBitacoraTemporal()
DtBitacora = New DataTable
DtBitacora.Columns.Add("FechaIng", GetType(String))
DtBitacora.Columns.Add("FechaInicio", GetType(String))
DtBitacora.Columns.Add("Usuario", GetType(String))
DtBitacora.Columns.Add("CveUsuario", GetType(String))
DtBitacora.Columns.Add("Descripcion", GetType(String))
DtBitacora.Columns.Add("Prioridad", GetType(String))
DtBitacora.Columns.Add("FileExtension", GetType(String))
DtBitacora.Columns.Add("Archivo", GetType(String))
DtBitacora.Columns.Add("CveOrdenCompra", GetType(String))
DtBitacora.Columns.Add("CveEmpresa", GetType(String))
End Sub
Protected Sub BtnGuardarEventoBitacora_Click(sender As Object, e As EventArgs) Handles BtnGuardarEventoBitacora.Click
AgregaBitacoraTemporal()
End Sub
Private Sub AgregaBitacoraTemporal()
Dim ObjEventoBitacora As New ClsOIEventos
'Archivo
Dim FileExtension As String = ""
Dim Filename As String = ""
Dim Filesgral As List(Of Archivo) = Anexo.getfiles().Archivos
For Each fileItem As Archivo In Filesgral
FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "")
Filename = fileItem.filename
Next
Dim Archivo As New System.IO.FileInfo(String.Format("{0}OI\Temp\OI{1}{2}.{3}", UsuarioActual.Empresa.Ruta, UsuarioActual.CveUsuario, Now.ToString("HH-mm"), FileExtension))
If Archivo.Exists() Then
Archivo.Delete()
'File.Delete(String.Format("\Empresas\{0}\OI\Temp\OI{1}{2}.{3}", CveEmpresaActual, UsuarioActual.CveUsuario, DtDetalle.Rows.Count, FileExtension))
End If
If Filename <> "" Then
Filename.FilesMove(String.Format("OI{0}{1}", UsuarioActual.CveUsuario, Now.ToString("HH-mm")), String.Format("{0}OI\Temp", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False)
End If
'AGREGA
Dim Dr = DtBitacora.NewRow
Dr("FechaIng") = Now
Dr("FechaInicio") = ""
Dr("Usuario") = UsuarioActual.Usuario
Dr("CveUsuario") = UsuarioActual.CveUsuario
Dr("Descripcion") = TxtEventoDescripcion.Text.Trim
Dr("Prioridad") = 1
Dr("Archivo") = If(FileExtension = "", "", $"{UsuarioActual.Empresa.Ruta}OI\Temp\OI{UsuarioActual.CveUsuario}{Now.ToString("HH-mm")}.{FileExtension}")
Dr("FileExtension") = String.Format(".{0}", FileExtension)
Dr("CveOrdenCompra") = -1
Dr("CveEmpresa") = UsuarioActual.CveEmpresa
DtBitacora.Rows.Add(Dr)
'LIMPIA
TxtEventoDescripcion.Text = ""
'ChkEventoPrioridad.Checked = False
RegistraScript("$('#ModalBitacora').modal('hide')", "hidemodal")
CargaEventoBitacoraTemp()
End Sub
Private Sub CargaEventoBitacoraTemp()
GvBitacora.DataSource = DtBitacora
GvBitacora.DataBind()
UPAddEventoBitacora.Update()
UPEventoBitacora.Update()
End Sub
Private Function GuardaBitacoraTemporal(ObjEventoBitacora As ClsOIEventos, CveMovimiento As Integer) As Boolean
Dim Retorno = False
Dim Archivo As System.IO.FileInfo = Nothing
For Each Dr As DataRow In DtBitacora.Rows
If ObjEventoBitacora.AddEventoBitacora(Dr("Descripcion").ToString, Dr("FileExtension").ToString, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveMovimientoAlmacen:=CveMovimiento) Then
Try
If Dr("Archivo").ToString <> "" Then
Archivo = New System.IO.FileInfo(Dr("Archivo").ToString)
If Archivo.Exists() Then
File.Move(Archivo.ToString, String.Format("{0}OI\OI{1}{2}", UsuarioActual.Empresa.Ruta, ObjEventoBitacora.CveEvento.ToString, Archivo.Extension))
End If
End If
Catch ex As Exception
Retorno = True
Alert("Ocurrió un error al guardar los datos adjuntos de la Bitácora.", TipoMensaje.MsgError)
Exit For
End Try
Else
Retorno = True
Exit For
End If
Next
Return Retorno
End Function
#End Region
#Region " FINANCIAMIENTO - AC "
Protected Sub CargaAC()
Dim Cont As New ClsContPAQi(UsuarioActual.Empresa)
Dim DtAC As DataTable = Nothing
If Cont.GetACSaldos(UsuarioActual.Empresa.EjercicioActual, 2) Then
DtAC = Cont.DtResultados.Copy.FiltraParametros("PorDevengar > 0")
Else
Alert("Ocurrió un error al cargar los Presupuestos. Por favor vuelva a cargar la página", TipoMensaje.MsgError)
End If
Cont.Dispose()
GvAC.DataSource = DtAC
GvAC.DataBind()
Dim Total As Double = GvAC.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("PorDevengar").ToDouble)
Lbtotalsaldo.Text = Total.ToString.FormatoNumero
UPPM.Update()
End Sub
Protected Sub GvAC_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvAC.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", String.Format("ValidaImporte(this, {0});", e.Row.DBCampo("PorDevengar")))
e.Row.FCRangeValidator("RVA").MaximumValue = e.Row.DBCampo("PorDevengar").FormatoNumero
End If
End Sub
#End Region
#Region " ENVIA CORREO NOTICIACION - VENDEDOR "
Private Sub MandaCorreoOCVendedores(CveCompra As Integer, CveMovimiento As Integer)
'SI NO TIENE FUNCIONALIDAD DATOS DE VENTA EN OC
If Not UsuarioActual.Empresa.Funcionalidad(108) = "1" Then
Exit Sub
End If
Dim DTCorreos As New DataTable
Dim DTMovimientos As New DataTable
Dim strBody As New StringBuilder
Dim Asunto, Para, ArrayCC, Body As String
Dim ObjOC As New ClsOC
ObjOC.GetOrdenesCompraCorreo(CveCompra, CveMovimiento:=CveMovimiento)
DTCorreos = ObjOC.DtResultados
ObjOC.GetOrdenesCompraMovimiento(CveCompra, CveMovimiento:=CveMovimiento)
DTMovimientos = ObjOC.DtResultados
ObjOC.Dispose()
For Each row As DataRow In DTCorreos.Rows
strBody.Clear()
'SI DE UNA OC DE LA COMPRA NO SE RECIBIÓ NADA NO MANDA CORREO
If DTMovimientos.FiltraParametros($"CveOrdenCompra = {row("CveOrdenCompra")}").Rows.Count = 0 Then
Continue For
End If
strBody.Append("<html xmlns=""http: //www.w3.org/1999/xhtml""> ")
strBody.Append("<head> ")
strBody.Append(" <style type=""text/css""> ")
strBody.Append(" * {")
strBody.Append(" font-family: Verdana; ")
strBody.Append(" }")
strBody.Append(" body { ")
strBody.Append(" padding: 0px;")
strBody.Append(" margin: 0px; ")
strBody.Append(" } ")
strBody.Append(" p {")
strBody.Append(" font-size: 14px;")
strBody.Append(" }")
strBody.Append(" /*ESTILOS ESTANDAR DE TABLA*/")
strBody.Append(" table {")
strBody.Append(" font-size: 12px;")
strBody.Append(" }")
strBody.Append(" table tr{")
strBody.Append(" height:20px;")
strBody.Append(" }")
strBody.Append(" table .thead{")
strBody.Append(" background-color:#dddddd;")
strBody.Append(" text-align:center;")
strBody.Append(" vertical-align:middle;")
strBody.Append(" }")
strBody.Append(" table .tbody{")
strBody.Append(" background-color:#F7F6F3; ")
strBody.Append(" }")
strBody.Append(" </style> ")
strBody.Append("</head> ")
strBody.Append("<body>")
strBody.Append(" <h3> Notificación de recepción de material </h3>")
strBody.Append(" <p class=""mensaje"">")
strBody.AppendFormat(" Se confirma recepción de material en almacén <b>{0}</b> vinculado la OC # <b>{1}</b> {2}.", DdlAlmacen.SelectedItem.Text, row("Folio").ToString, If(row("FolioREQ").ToString.Length > 0, $", relacionada a la(s) requisicion(es) # <b>{row("FolioREQ")}</b>", ""))
strBody.Append(" <br>")
strBody.Append(" Con los siguientes productos:")
strBody.Append(" </p>")
'DETALLES
strBody.Append(" <!-- DETALLES -->")
strBody.Append(" <table width=""700px"">")
strBody.Append(" <tr class=""thead"">")
strBody.Append(" <th style='width: 50px'>Cantidad</th>")
strBody.Append(" <th style='width: 100px'>UM</th>")
strBody.Append(" <th style='width: 100px'>Código</th>")
strBody.Append(" <th style='width: 450px'>Producto</th>")
strBody.Append(" </tr>")
For Each RowM As DataRow In DTMovimientos.FiltraParametros($"CveOrdenCompra = {row("CveOrdenCompra")}").Rows
strBody.AppendFormat(" <tr class=""tbody"">")
strBody.AppendFormat(" <td style='width:50px; text-align: right;'>{0}</td>", RowM("Cantidad").ToString.FormatoNumero)
strBody.AppendFormat(" <td style='width:100px;'>{0}</td>", RowM("UnidadMedida"))
strBody.AppendFormat(" <td style='width:100px;'>{0}</td>", RowM("Codigo"))
strBody.AppendFormat(" <td align='left' style='width:450px;'>{0}</td>", RowM("PS"))
strBody.AppendFormat(" </tr>")
Next
strBody.Append(" </table>")
strBody.Append("</body>")
strBody.Append("</html>")
'' ENVIO DEL CORREO
Asunto = "Recepción de Material de OC "
Para = row("Correo").ToString
ArrayCC = row("CorreoAsistente").ToString
Body = strBody.ToString
Dim Mail As New ClsSisMail()
Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, ArrayCC)
Next
End Sub
#End Region
#Region "Imprimir PDF/Excel"
Private Sub LnkExportar_Click(sender As Object, e As EventArgs) Handles LnkExportar.Click
ImprimiReporte("EXCEL")
End Sub
Private Sub LnkImprimir_Click(sender As Object, e As EventArgs) Handles LnkImprimir.Click
ImprimiReporte()
End Sub
Protected Sub ImprimiReporte(Optional Formato As String = "PDF")
Dim Proveedor As String = ddlProveedor.SelectedText
Dim Compra As String = DdlFolio.SelectedItem.Text
Dim RutaPDF As String
Dim Ruta As String = UsuarioActual.Empresa.Ruta
RutaPDF = $"{Ruta}\Formatos\EntradaAlmacen.rdlc"
If Not File.Exists(RutaPDF) Then
RutaPDF = "Empresas/Grales/Formatos/EntradaAlmacen.rdlc"
End If
Dim params As New List(Of ReportParameter)
params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa))
Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png")
params.Add(New ReportParameter("pImg", If(Imagen.Exists, $"file://{Imagen.FullName}", "")))
params.Add(New ReportParameter("Proveedor", Proveedor))
params.Add(New ReportParameter("Compra", Compra))
params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre))
params.Add(New ReportParameter("FechaImpresion", Now.ToDateTime.ToShortDateString))
ImprimirPDF(RutaPDF, dt, params, "Reporte de Entrada Almacén", Formato:=Formato)
End Sub
#End Region
#Region " VIEJO - POR ELIMINAR 22 NOVIEMBRE 2017 "
Protected Sub ImgAlmacen_Click(sender As Object, e As ImageClickEventArgs)
For i As Integer = 0 To GvInv.Rows.Count - 1
If Not DtInv.Rows(i)("CantidadF").ToString.ToEntero = 0 Then
DtInv.Rows(i)("CveAlmacen") = GvInv.HeaderRow.FCDropDownList("ddlPAlmacen").SelectedValue
End If
Next
CargaGVInv()
End Sub
Private Sub AddDTEnvio(Cantidad As Double, UM As String, CveUM As Integer, CvePS As Integer, PS As String, PU As Double, CveAlmacen As Integer)
Dim dr As DataRow = DtInv.NewRow
dr("CantidadF") = Cantidad
dr("UM") = UM
dr("CveUM") = CveUM
dr("CvePS") = CvePS
dr("PS") = PS
dr("PU") = PU
dr("CveAlmacen") = CveAlmacen
DtInv.Rows.InsertAt(dr, hdnIndexInv.Value.ToEntero + 1)
CargaGVInv()
End Sub
Protected Sub Enviar_Click(sender As Object, e As ImageClickEventArgs) Handles ImgAdd.Click
If TbCantidadAlm.Text.ToDouble < DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CantidadF").ToString.ToDouble And TbCantidadAlm.Text.ToDouble > 0 Then
DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CantidadF") = DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CantidadF").ToString.ToDouble - TbCantidadAlm.Text.ToDouble
AddDTEnvio(TbCantidadAlm.Text.ToDouble,
DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("UM").ToString,
DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CveUM").ToString.ToEntero,
DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("CvePS").ToString().ToEntero,
DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("PS").ToString,
DtInv.Rows.Item(hdnIndexInv.Value.ToEntero)("PU").ToString.ToDouble,
ddlAlmacenAdd.SelectedValue.ToEntero)
Else
Alert("El campo cantidad es necesario que sea mayor que 0 y menor a la cantidad faltante.", TipoMensaje.MsgAdvertencia)
End If
CargaGVInv()
TbCantidadAlm.Text = ""
ddlAlmacenAdd.SelectedIndex = 0
End Sub
#End Region
#Region "DIVIDIR"
Protected Sub Dividir(sender As Object, e As EventArgs)
Dim index2 As Integer = 0
For Each Row As DataRow In DtInv.Rows
Row("Seleccionado") = GvInv.Rows(index2).FCCheckBox("cbInv").Checked
If GvInv.Rows(index2).FCTextBox("TbCantidadF").Text <> "" Then
Row("CantidadSeleccionada") = GvInv.Rows(index2).FCTextBox("TbCantidadF").Text
End If
If GvInv.Rows(index2).FCTextBox("TxtLote").Text <> "" Then
Row("Lote") = GvInv.Rows(index2).FCTextBox("TxtLote").Text
End If
If GvInv.Rows(index2).FCDropDownList("DdlSeccionAlmacen").SelectedValue <> "-1" Then
Row("CveSeccion") = GvInv.Rows(index2).FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero
End If
If GvInv.Rows(index2).FCTextBox("TxtCaducidad").Text <> "" Then
Row("Caducidad") = GvInv.Rows(index2).FCTextBox("TxtCaducidad").Text.ToDate
End If
index2 += 1
Next
DtInv.AcceptChanges()
Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, Button)).NamingContainer, GridViewRow)
Dim Index As Integer = gvRow.RowIndex
Dim Cantidad As String = HdnCantidadMovimiento.Value
Dim dr1 As DataRow = DtInv.Rows(Index)
Dim dr As DataRow = DtInv.NewRow
dr.ItemArray = dr1.ItemArray
dr1("CantidadC") = (dr1("CantidadC").ToString.ToDecimal - Cantidad.ToDecimal)
Dim CantidadFOriginal As Decimal = dr1("CantidadF").ToString.ToDecimal
dr1("CantidadF") = (dr1("CantidadF").ToString.ToDecimal - Cantidad.ToDecimal)
Dim CantidadSOriginal As Decimal = dr1("CantidadS").ToString.ToDecimal
dr1("CantidadS") = (CantidadSOriginal * dr1("CantidadF").ToString.ToDecimal) / CantidadFOriginal
Dim CantidadSeleccionadaOriginal As Decimal = dr1("CantidadSeleccionada").ToString.ToDecimal
dr1("CantidadSeleccionada") = If(CantidadSeleccionadaOriginal > dr1("CantidadF").ToString.ToDecimal, dr1("CantidadF").ToString.ToDecimal, CantidadSeleccionadaOriginal)
CantidadSeleccionadaOriginal = CantidadSeleccionadaOriginal - dr1("CantidadF").ToString.ToDecimal
Dim CostoIndirectoOriginal As Decimal = dr1("CostoIndirecto").ToString.ToDecimal
dr1("CostoIndirecto") = (CostoIndirectoOriginal * dr1("CantidadF").ToString.ToDecimal) / CantidadFOriginal
Dim CostoIndirectoExtranjeroOriginal As Decimal = dr1("CostoIndirectoExtranjero").ToString.ToDecimal
dr1("CostoIndirectoExtranjero") = (CostoIndirectoExtranjeroOriginal * dr1("CantidadF").ToString.ToDecimal) / CantidadFOriginal
DtInv.AcceptChanges()
dr("CantidadC") = Cantidad.ToDecimal
dr("CantidadF") = Cantidad.ToDecimal
dr("CantidadS") = (CantidadSOriginal * dr("CantidadF").ToString.ToDecimal) / CantidadFOriginal
dr("CantidadSeleccionada") = If(CantidadSeleccionadaOriginal > 0, CantidadSeleccionadaOriginal, 0)
dr("Seleccionado") = If(CantidadSeleccionadaOriginal > 0, True, False)
dr("CostoIndirecto") = (CostoIndirectoOriginal * dr("CantidadF").ToString.ToDecimal) / CantidadFOriginal
dr("CostoIndirectoExtranjero") = (CostoIndirectoExtranjeroOriginal * dr("CantidadF").ToString.ToDecimal) / CantidadFOriginal
DtInv.Rows.InsertAt(dr, Index)
DtInv.AcceptChanges()
index2 = 1
For Each Row As DataRow In DtInv.Rows
Row("Consec") = index2
index2 += 1
Next
DtInv.AcceptChanges()
CargaGVInv()
index2 = 0
For Each Row As DataRow In DtInv.Rows
GvInv.Rows(index2).FCCheckBox("cbInv").Checked = CBool(Row("Seleccionado"))
If Row("CantidadSeleccionada").ToString <> "" Then
GvInv.Rows(index2).FCTextBox("TbCantidadF").Text = Row("CantidadSeleccionada").ToString
End If
If Row("Lote").ToString <> "" Then
GvInv.Rows(index2).FCTextBox("TxtLote").Text = Row("Lote").ToString
End If
If Row("CveSeccion").ToString <> "" Then
GvInv.Rows(index2).FCDropDownList("DdlSeccionAlmacen").SelectedValue = Row("CveSeccion").ToString
End If
If Row("Caducidad").ToString <> "" Then
GvInv.Rows(index2).FCTextBox("TxtCaducidad").Text = Row("Caducidad").ToString.ToDate.ToShortDateString
End If
index2 += 1
Next
End Sub
#End Region
#Region "CargaExcel"
Private Sub BtnCargaExcel_Click(sender As Object, e As EventArgs) Handles BtnCargaExcel.Click
If TxtExcel.getfiles().Archivos.Count > 0 Then
Dim file As Archivo = TxtExcel.getfiles().Archivos(0)
Dim Directorio As String = AppDomain.CurrentDomain.BaseDirectory & file.path
Dim Tipo As String = If(file.Extension.Contiene("xlsx", "xlsx", "xlsm", "xlsb", "xls"), "EXCEL", "CSV")
If Tipo = "CSV" AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then 'empresa de acumuladores
CargaArchivoCSV(Directorio, file.filename, HLFolio.Text)
Else
CargarArchivoExcel(Directorio, file.filename)
End If
Else
Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError)
End If
End Sub
Protected Sub CargarArchivoExcel(Ruta As String, FileName As String)
SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet)
Dim dt As DataTable = Nothing
Dim ErrorArchivo = False
Try
dt = ReadExcelFile(Ruta + FileName, True)
Catch ex As Exception
ErrorArchivo = True
OnError("Ocurrio un error al leer el archivo <br/>" & ex.Message, ex)
End Try
If Not ErrorArchivo AndAlso dt IsNot Nothing Then
If Not dt.Columns(0).ColumnName = "Cantidad" Then
Alert("El nombre de la primera columna debe ser 'Cantidad'. Favor de corregirlo", TipoMensaje.MsgError)
Exit Sub
End If
If Not dt.Columns(1).ColumnName = "Código" Then
Alert("El nombre de la segunda columna debe ser 'Codigo'. Favor de corregirlo", TipoMensaje.MsgError)
Exit Sub
End If
If Not dt.Columns(2).ColumnName = "Producto" Then
Alert("El nombre de la tercera columna debe ser 'Producto'. Favor de corregirlo", TipoMensaje.MsgError)
Exit Sub
End If
If Not dt.Columns(3).ColumnName = "Serie" Then
Alert("El nombre de la cuarta columna debe ser 'Serie'. Favor de corregirlo", TipoMensaje.MsgError)
Exit Sub
End If
ProcesaExcel(dt)
End If
End Sub
Private Function ProcesaExcel(dt As DataTable) As Boolean
dt.TableName = "Datos"
Dim ProductosNoCargados As New StringBuilder()
Dim RowsCargados As Integer = 0
Dim RowsNoCargados As Integer = 0
Dim NoPSConSerie As Integer = 0
If CveCompraSurtir > 0 Then
Try
For Each RowExcel As DataRow In dt.Rows
If RowExcel("Código").ToString() <> "" Then
Dim RowPS = DtInv.FiltroPrimero(String.Format("Codigo='{0}'", RowExcel("Código").ToString()))
If RowPS IsNot Nothing AndAlso RowPS("CvePS").ToString().ToEntero() > 0 Then
Dim CveProducto As Integer = RowPS("CvePS").ToString().ToEntero()
Dim CveUnidadMedida As Integer = RowPS("CveUM").ToString().ToEntero()
CvePSSerie = CveProducto
CveConsecSerie = DtInv.FiltroPrimeroValor("Consec", "CvePS=" & CvePSSerie).ToEntero
Dim Cantidad As Double = RowExcel("Cantidad").ToString().ToDecimal()
Dim Serie As String = RowExcel("Serie").ToString()
Dim Lote As String = ""
Dim FechaCaducidad As Date = MinFecha
Dim Observaciones As String = ""
LbCantidad.Text = Cantidad.ToString
Dim Valido As Boolean = True
If RowPS("AplicaSerie").ToString() = "True" And (String.IsNullOrEmpty(Serie.Trim()) OrElse Serie = "-1") Then
Valido = False
Alert($"El producto '{RowPS("PS")}' requiere 'Serie'", TipoMensaje.MsgAdvertencia)
ProductosNoCargados.AppendFormat("{0},", RowPS("PS").ToString())
End If
If RowPS("AplicaSerie").ToString() = "True" AndAlso Not String.IsNullOrEmpty(Serie.Trim()) Then
NoPSConSerie = NoPSConSerie + 1
LbCantidad.Text = DtInv.FiltroPrimeroValor("Cantidad", "CvePS=" & CvePSSerie)
End If
If Valido Then
CveConsecSerie = RowPS("Consec").ToString.ToEntero
AgregaSerie(RowExcel("Serie").ToString, 1, False)
'AgregarPS(Cantidad, CveProducto, CveUnidadMedida, Observaciones, CveSeccionAlmacen:=DdlSeccionAlmacen.SelectedValue.ToEntero, SeccionAlmacen:=DdlSeccionAlmacen.SelectedItem.Text, Serie:=If(Not String.IsNullOrEmpty(Serie), Serie, ""), Lote:=Lote, FechaCaducidad:=FechaCaducidad, Limpia:=False)
RowsCargados = RowsCargados + 1
Else
RowsNoCargados = RowsNoCargados + 1
ProductosNoCargados.AppendFormat("{0},", RowPS("PS").ToString())
End If
Else
RowsNoCargados = RowsNoCargados + 1
ProductosNoCargados.AppendFormat("{0},", RowExcel("Producto").ToString())
End If
End If
Next
Catch ex As Exception
OnError("Ocurrió un error al cargar los productos." & ProductosNoCargados.ToString(), ex)
Finally
Dim MensajeFinal As New StringBuilder()
If RowsNoCargados = 0 AndAlso RowsCargados > 0 Then
MensajeFinal.Append("Los productos se cargaron correctamente. <br/><br/>")
End If
If RowsCargados > 0 Then
MensajeFinal.Append("Se cargaron <b>" & RowsCargados & "</b> productos correctamente.")
End If
If RowsNoCargados > 0 Then
MensajeFinal.Append("No se pudieron cargar <b>" & RowsNoCargados & "</b> productos. <br/>Los siguientes productos no se pudieron cargar: " & ProductosNoCargados.ToString())
End If
Alert(MensajeFinal.ToString())
End Try
Else
Alert("No hay seleccionada compra", TipoMensaje.MsgError)
End If
Return True
End Function
Protected Sub LbDescargarExcelConceptos_Click(sender As Object, e As EventArgs)
DescargarFormato()
End Sub
Public Sub DescargarFormato()
Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\Formatos\FormatoRecepcionAlmacen.xlsx"
Dim dtt As New DataTable
dtt = DtInv.Copy()
dtt.Columns.Remove("Cantidad")
dtt.Columns("CantidadF").ColumnName = "Cantidad"
dtt.Columns("PS").ColumnName = "Producto"
dtt.Columns("Codigo").ColumnName = "Código"
Dim existingcol As New List(Of String) '= {"Cantidad", "Producto", "Código"}
For Each col As DataColumn In dtt.Columns
If Not col.ColumnName.Contiene("Cantidad", "Producto", "Código") Then
existingcol.Add(col.ColumnName)
End If
Next
For Each colName As String In existingcol
dtt.Columns.Remove(colName)
Next
dtt.Columns("Cantidad").SetOrdinal(0)
dtt.Columns("Código").SetOrdinal(1)
dtt.Columns("Producto").SetOrdinal(2)
dtt.Columns.Add("Serie", GetType(String))
dtt.ExportToExcel("FormatoRecepcionAlmacen.xlsx")
End Sub
Private Sub CargaArchivoCSV(Ruta As String, FileName As String, Optional FolioFactura As String = "")
'Create a DataTable.
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(9) {New DataColumn("CodBarra", GetType(String)),
New DataColumn("OVenta", GetType(String)),
New DataColumn("Factura", GetType(String)),
New DataColumn("FechaFac", GetType(String)),
New DataColumn("Pallet", GetType(String)),
New DataColumn("CodigoJCI", GetType(String)),
New DataColumn("Producto", GetType(String)),
New DataColumn("Serie", GetType(String)),'CodigoUnico
New DataColumn("Cantidad", GetType(Integer)),
New DataColumn("Código", GetType(String))})
FolioFactura = FolioFactura.Replace("-", "")
'Read the contents of CSV file.
Dim csvData As String = File.ReadAllText(Ruta & FileName)
Dim CodigoUnico As String = "CU no escaneado" 'texto constante para determinar que no se leyó
Dim r As Integer = 1
'Execute a loop over the rows.
For Each row As String In csvData.Split(ControlChars.Lf)
If r > 2 Then ' si es la segundo renglon
If Not String.IsNullOrEmpty(row) Then
Dim i As Integer = 0
Dim rr As String() = row.Split(","c)
If CodigoUnico <> rr(7).Trim AndAlso (FolioFactura = "" OrElse FolioFactura = rr(2).Trim) Then
dt.Rows.Add()
dt.Rows(dt.Rows.Count - 1)("CodBarra") = rr(0).Trim
dt.Rows(dt.Rows.Count - 1)("OVenta") = rr(1).Trim
dt.Rows(dt.Rows.Count - 1)("Factura") = rr(2).Trim
dt.Rows(dt.Rows.Count - 1)("FechaFac") = rr(3).Trim
dt.Rows(dt.Rows.Count - 1)("Pallet") = rr(4).Trim
dt.Rows(dt.Rows.Count - 1)("CodigoJCI") = rr(5).Trim
dt.Rows(dt.Rows.Count - 1)("Producto") = rr(6).Trim
dt.Rows(dt.Rows.Count - 1)("Serie") = rr(7).Trim
dt.Rows(dt.Rows.Count - 1)("Cantidad") = 1
dt.Rows(dt.Rows.Count - 1)("Código") = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Codigo", String.Format("Codigo2 = '{0}'", rr(5).Trim))
End If
End If
End If
r += 1
Next
ProcesaExcel(dt)
End Sub
#End Region
Private Function GuardaDocumentoBitacora(ObjEventoBitacora As ClsOIEventos, CveMovimiento As Integer) As Boolean
Dim Retorno = True
Dim Archivo As System.IO.FileInfo = Nothing
Dim Filesgral As List(Of Archivo) = TxtDocumento.getfiles().Archivos
Dim archivoOriginal = Filesgral.FirstOrDefault()
Dim Bitacora As String = ""
If Not String.IsNullOrEmpty(TxtObservaciones.Text) Then
Bitacora = TxtObservaciones.Text
Else
Bitacora = "Documento Relacionado"
End If
If ObjEventoBitacora.AddEventoBitacora(Bitacora, String.Format(".{0}", archivoOriginal.Extension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveMovimientoAlmacen:=CveMovimiento) Then
Try
If archivoOriginal.filename <> "" Then
Archivo = New System.IO.FileInfo(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, archivoOriginal.filename))
If Archivo.Exists() Then
File.Move(Archivo.ToString, String.Format("{0}OI\OI{1}{2}", UsuarioActual.Empresa.Ruta, ObjEventoBitacora.CveEvento.ToString, Archivo.Extension))
Else
Retorno = False
End If
End If
Catch ex As Exception
Retorno = False
End Try
Else
Retorno = False
End If
Return Retorno
End Function
Public Class MMovimientoAlmacen
Public Property CveMovimiento As Integer
Public Property Folio As Integer
End Class
End Class