Files
SIG/Inventarios/EntregaAlmacen.aspx.vb
Jonathan Alexis Perez Morales 9ce9702618 --SMS - 2024.01.24
--En la opción de venta directa: no importa el cliente/hospital que se seleccione, la lista de precios predeterminada debe de ser la de venta directa
--Al cancelar una cirugía se debe de ver reflejado en almacén y en ordenes de servicio
2024-01-26 16:24:36 -07:00

4395 lines
232 KiB
VB.net

Option Strict On
Option Explicit On
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports Extensiones
Imports Microsoft.Reporting.WebForms
Partial Class Inventarios_EntregaAlmacen
Inherits ClsPaginas
#Region "PROPIEDADES"
Private Property CveVentaAD As Integer
Get
Return CType(ViewState("CveVentaAD"), Integer)
End Get
Set(value As Integer)
ViewState("CveVentaAD") = value
End Set
End Property
Private Property DtDatos As DataTable
Get
Return CType(ViewState("DtDatos"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtDatos") = value
End Set
End Property
Private Property DtDatosDetalle As DataTable
Get
Return CType(ViewState("DtDatosDetalle"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtDatosDetalle") = value
End Set
End Property
Private Property DtDatosSugerencias As DataTable
Get
Return CType(ViewState("DtDatosSugerencias"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtDatosSugerencias") = value
End Set
End Property
Private Property DtDatosDetalleLote As DataTable
Get
Return CType(ViewState("DtDatosDetalleLote"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtDatosDetalleLote") = value
End Set
End Property
Private Property PSSerie As String
Get
Return CType(ViewState("PSSerie"), String)
End Get
Set(value As String)
ViewState("PSSerie") = 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 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 EsInterno As Boolean
Get
Return CBool(If(ViewState("EsInterno") Is Nothing, 0, ViewState("EsInterno")))
End Get
Set(value As Boolean)
ViewState("EsInterno") = value
End Set
End Property
Private Property CveMetodoInventario As Integer
Get
Return CType(ViewState("CveMetodoInventario"), Integer)
End Get
Set(value As Integer)
ViewState("CveMetodoInventario") = value
End Set
End Property
Private Property CveVentaSurtir As Integer
Get
Return CType(ViewState("CveVentaSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveVentaSurtir") = value
End Set
End Property
Private Property CveOSSurtir As Integer
Get
Return CType(ViewState("CveOSSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveOSSurtir") = value
End Set
End Property
Private Property TipoEstatus As Integer
Get
Return CType(ViewState("TipoEstatus"), Integer)
End Get
Set(value As Integer)
ViewState("TipoEstatus") = value
End Set
End Property
Private Property CveContrato As Integer
Get
Return CType(ViewState("CveContrato"), Integer)
End Get
Set(value As Integer)
ViewState("CveContrato") = value
End Set
End Property
Private Property CveAlmacenTraspasoOrigen As Integer
Get
Return CType(ViewState("CveAlmacenTraspasoOrigen"), Integer)
End Get
Set(value As Integer)
ViewState("CveAlmacenTraspasoOrigen") = value
End Set
End Property
Private Property CveAlmacenTraspasoDestino As Integer
Get
Return CType(ViewState("CveAlmacenTraspasoDestino"), Integer)
End Get
Set(value As Integer)
ViewState("CveAlmacenTraspasoDestino") = value
End Set
End Property
Private Property TipoMovimiento As Integer
Get
Return CType(ViewState("TipoMovimiento"), Integer)
End Get
Set(value As Integer)
ViewState("TipoMovimiento") = value
End Set
End Property
Private Property TipoDocto As String
Get
Return CType(ViewState("TipoDocto"), String)
End Get
Set(value As String)
ViewState("TipoDocto") = value
End Set
End Property
Private Property DtExistencias As DataTable
Get
Return CType(ViewState("DtExistencias"), DataTable)
End Get
Set(value As DataTable)
ViewState("DtExistencias") = value
End Set
End Property
Private Property RowIndexCantidadEspecial As Integer
Get
Return CType(ViewState("RowIndexCantidadEspecial"), Integer)
End Get
Set(value As Integer)
ViewState("RowIndexCantidadEspecial") = value
End Set
End Property
Private Property CantidadEspecialTemp As Decimal
Get
Return CType(ViewState("CantidadEspecialTemp"), Decimal)
End Get
Set(value As Decimal)
ViewState("CantidadEspecialTemp") = value
End Set
End Property
Private Property EsDevolucionVenta As Integer
Get
Return CType(ViewState("EsDevolucionVenta"), Integer)
End Get
Set(value As Integer)
ViewState("EsDevolucionVenta") = value
End Set
End Property
Private Property CveVendedor As Integer
Get
Return CType(ViewState("CveVendedor"), Integer)
End Get
Set(value As Integer)
ViewState("CveVendedor") = value
End Set
End Property
Private Property CveSubProyecto As Integer
Get
Return CType(ViewState("CveSubProyecto"), Integer)
End Get
Set(value As Integer)
ViewState("CveSubProyecto") = value
End Set
End Property
Private Property CveOP As Integer
Get
Return CType(ViewState("CveOP"), Integer)
End Get
Set(value As Integer)
ViewState("CveOP") = 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 CveDireccionEnvio As Integer
Get
Return CType(ViewState("CveDireccionEnvio"), Integer)
End Get
Set(value As Integer)
ViewState("CveDireccionEnvio") = value
End Set
End Property
Private Property CveMovimiento As Integer
Get
Return CType(ViewState("CveMovimiento"), Integer)
End Get
Set(value As Integer)
ViewState("CveMovimiento") = value
End Set
End Property
Private Property CveTraspasoSurtir As Integer
Get
Return CType(ViewState("CveTraspasoSurtir"), Integer)
End Get
Set(value As Integer)
ViewState("CveTraspasoSurtir") = value
End Set
End Property
Private Property TipoEntrega As Integer
Get
Return CType(ViewState("TipoEntrega"), Integer)
End Get
Set(value As Integer)
ViewState("TipoEntrega") = value
End Set
End Property
Private Property EsDevolucionDirecta As Boolean
Get
Return CBool(If(ViewState("EsDevolucionDirecta") Is Nothing, 0, ViewState("EsDevolucionDirecta")))
End Get
Set(value As Boolean)
ViewState("EsDevolucionDirecta") = value
End Set
End Property
Private Property FormaPaqueteria As Integer
Get
Return CType(ViewState("FormaPaqueteria"), Integer)
End Get
Set(value As Integer)
ViewState("FormaPaqueteria") = value
End Set
End Property
'Private Property IndexSeccionAlmacen As Integer
' Get
' Return CType(ViewState("IndexSeccionAlmacen"), Integer)
' End Get
' Set(value As Integer)
' ViewState("IndexSeccionAlmacen") = value
' End Set
'End Property
Private Property 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 CargaBitacora As Boolean
Get
If ViewState("CargaBitacora") Is Nothing Then
ViewState("CargaBitacora") = False
End If
Return Boolean.Parse(ViewState("CargaBitacora").ToString)
End Get
Set(value As Boolean)
ViewState("CargaBitacora") = value
End Set
End Property
Private Property PedidoBloqueCantidad As Boolean
Get
If ViewState("PedidoBloqueCantidad") Is Nothing Then
ViewState("PedidoBloqueCantidad") = False
End If
Return Boolean.Parse(ViewState("PedidoBloqueCantidad").ToString)
End Get
Set(value As Boolean)
ViewState("PedidoBloqueCantidad") = value
End Set
End Property
#End Region
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
InicializaValores()
CargaParametrosAD()
If UsuarioActual.CveEmpresa.Contiene(1, 72, 80, 146, 119, 186) Then DdlAlmacen.AutoPostBack = True
If UsuarioActual.Empresa.Funcionalidad(281).ToEntero() = 1 Then
TxtFecha.Enabled = False
ImgFecha.Visible = False
End If
End If
End Sub
#Region " INICIALIZA VALORES "
Private Sub InicializaValores()
TipoEstatus = -1
CveVendedor = -1
CveCliente = -1
CveSubProyecto = -1
DtDatosSugerencias = New DataTable
Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2)"
If (UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1") Then
DdlClientes.setEsWebService(True)
DdlClientes.Attributes.Add("data-metodo", "getcliente")
DdlClientes.SelectedText = "Todos"
DdlClientes.SelectedValue = "-1"
Else
DdlClientes.setEsWebService(False)
DdlClientes.ddl.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa)
DdlClientes.ddl.DataBind()
DdlClientes.ddl.Items.Insert(0, New ListItem("Todos", "-1"))
End If
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
DdlAlmacenTransitorio.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 3)
DdlAlmacenTransitorio.DataBind()
DdlAlmacenTransitorio.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
TxtFechaPendientes.Text = NowADS().ToShortDateString
TxtFecha.Text = NowADS().ToShortDateString
RVFecha.MaximumValue = MaxFecha.ToShortDateString
If UsuarioActual.CveEmpresa.Contiene(119) Then
RVFecha.MinimumValue = NowADS().ToShortDateString
CEFecha.StartDate = NowADS()
trGuia.Visible = True
Else
RVFecha.MinimumValue = MinFecha.ToShortDateString
End If
If Not UsuarioActual.TienePermisoProceso(190) Then
'CARGA SOLO LAS SUCURSALES DE LOS ALMCENES QUE TIENE ASIGNADO EL USUARIO
Dim ObjInventarios As New ClsInventarios
If ObjInventarios.GetSucursalesAlmacenUsuario(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
DdlSubProyectos.DataSource = ObjInventarios.DtResultados
End If
ObjInventarios.Dispose()
Else
DdlSubProyectos.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa)
End If
DdlSubProyectos.DataBind()
DdlSubProyectos.SelectedValueExist(UsuarioActual.CveSubProyecto.ToString())
If UsuarioActual.TienePermisoProceso(152) Then DdlSubProyectos.Enabled = False
If UsuarioActual.Empresa.Funcionalidad(280) = "1" Then PnlEntrega.Visible = True
CreaDtDetalle()
CreaDtDetalleLote()
CargaPendientes()
LimpiaCampos()
End Sub
#End Region
#Region " CARGA PARAMETROS - EXCLUSIVO USO AD "
Private Sub CargaParametrosAD()
CveVentaAD = -1
'If UsuarioActual.CveUsuario <> 100 Then
' Exit Sub
'End If
If Not IsNothing(Request("CveVenta")) AndAlso IsNumeric(Request("CveVenta")) Then
CveVentaAD = Request("CveVenta").ToEntero()
CargaVentaPorSurtir(Request("CveVenta").ToEntero())
'LbSurtida.Visible = True
'LbSurtida.Text = "SOLO MODO VISUAL"
'BtnGuardar.Visible = False
End If
End Sub
#End Region
#Region " CARGA PENDIENTES POR SURTIR "
Protected Sub DdlCliente_SelectedIndexChanged(sender As Object, e As EventArgs)
CargaFolios()
End Sub
Private Sub CargaFolios()
Dim ObjInventarios As New ClsInventarios
DdlFolio.Items.Clear()
If DdlClientes.SelectedValue.ToEntero() > 0 Then
If ObjInventarios.VentasPendientesAlmacenGet(DdlClientes.SelectedValue.ToEntero(), MinFecha, DdlSubProyectos.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
DdlFolio.DataSource = ObjInventarios.DtResultados
Else
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
End If
ObjInventarios.Dispose()
DdlFolio.DataBind()
DdlFolio.Items.Insert(0, New ListItem("Seleccione", "-1"))
UpFiltros.Update()
End Sub
Protected Sub TimmerRefresh_Tick(sender As Object, e As EventArgs)
CargaPendientes()
End Sub
Protected Sub BtnConsultarPendientes_Click(sender As Object, e As EventArgs)
CargaPendientes()
End Sub
Private Sub CargaPendientes()
DivTipoCambioAdvertencia.Visible = False
Dim ObjInventarios As New ClsInventarios
Dim DtPendientes As New DataTable
If ObjInventarios.VentasPendientesAlmacenGet(-1, TxtFechaPendientes.Text.ToDate, DdlSubProyectos.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then
If UsuarioActual.TienePermisoProceso(266) AndAlso UsuarioActual.TienePermisoProceso(267) Then
DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ped','PDev','DPe','Ant')")
ElseIf UsuarioActual.TienePermisoProceso(266) AndAlso Not UsuarioActual.TienePermisoProceso(267) Then
DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ant')")
ElseIf UsuarioActual.TienePermisoProceso(267) AndAlso Not UsuarioActual.TienePermisoProceso(266) Then
DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ped','PDev','DPe')")
Else
DtPendientes = ObjInventarios.DtResultados
End If
Else
DtPendientes = Nothing
Alert("Ocurrió un error al obtener las Compras pendientes de recibir del proveedor. Por favor vuelva a intentar", TipoMensaje.MsgError)
End If
If UsuarioActual.Empresa.Funcionalidad(540) = "1" Then
BtnGuardar.Enabled = False
Dim FI As Date = NowADS().AddDays(-1)
Dim FF As Date = NowADS().AddDays(-7)
If ObjInventarios.RepNotasSinAlmacen(1, -1, FI, FF, "-1", -1, UsuarioActual.Empresa.CveEmpresa) Then
If ObjInventarios.DtResultados IsNot Nothing AndAlso ObjInventarios.DtResultados.Rows.Count > 1 Then
BtnGuardar.Enabled = False
Alert("No se podrá realizar entrega de mercancía si no se les da salida a los documentos pendientes. Para más información ver el Reporte de notas sin entrada en la sección Ventas.", TipoMensaje.MsgAdvertencia)
Else
BtnGuardar.Enabled = True
End If
End If
End If
ObjInventarios.Dispose()
If DtPendientes IsNot Nothing Then
GVPendientes.DataSource = DtPendientes
End If
LtActualizado.Text = String.Format("Actualizado: {0}", NowADS().ToString("H:mm"))
GVPendientes.DataBind()
UpPendientes.Update()
If DtPendientes IsNot Nothing Then DtPendientes.Dispose()
End Sub
Protected Sub GVPendientes_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GVPendientes.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.FCLinkButton("BtnSurtir").CommandArgument = If(e.Row.DBCampo("TipoEntrega") = "1", e.Row.DBCampo("CveVenta"), e.Row.DBCampo("CveTraspasoSolicitud"))
Select Case e.Row.DBCampo("TipoEntrega").ToString().ToEntero()
Case 1
If UsuarioActual.TienePermisoProceso(201) Then
Dim Css As String = "Texto"
Dim Liga As String = $"/Ventas/Ventas.aspx?&CveVenta={e.Row.DBCampo("CveVenta")}"
e.Row.FCLabel("LblFolio").Text = "<a class=" + "" + Css + "" + " href=" + "" + Liga + "" + ">" + e.Row.FCLabel("LblFolio").Text + "</a>"
End If
If UsuarioActual.CveEmpresa.Contiene(72, 80) Then
GVPendientes.Columns(4).Visible = True
e.Row.FCHyperLink("HplDownPDF").Visible = True
e.Row.FCHyperLink("HplDownPDF").NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}", e.Row.DBCampo("CveVenta"))))
End If
If e.Row.DBCampo("TipoDocto").ToString().Contiene({"Rem", "Ing", "Ped", "PeC", "Ant"}) And e.Row.DBCampo("EsDevolucionVenta").ToString().ToEntero() = 0 Then
e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary btn-sm"
e.Row.FCLinkButton("BtnSurtir").Text = " Surtir <i class='fa fa-arrow-right' ></i>"
Else
e.Row.FCLinkButton("BtnSurtir").CssClass = "btn yellow-gold btn-sm"
e.Row.FCLinkButton("BtnSurtir").Text = "<i class='fa fa-arrow-left' > Recibir</i>"
End If
Case 2
Dim Css As String = "Texto"
Dim Liga As String = $"/Inventarios/TrasladoSolicitud.aspx?&CveTraspasoSolicitud={e.Row.DBCampo("CveTraspasoSolicitud")}"
e.Row.FCLabel("LblFolio").Text = "<a class=" + "" + Css + "" + " href=" + "" + Liga + "" + ">" + e.Row.FCLabel("LblFolio").Text + "</a>"
e.Row.FCLinkButton("BtnSurtir").CssClass = "btn btn-primary btn-sm"
e.Row.FCLinkButton("BtnSurtir").Text = " Traspasar <i class='fa fa-arrow-right' ></i>"
End Select
UpPendientes.Update()
End If
End Sub
#End Region
#Region " CARGA VENTA POR SURTIR "
Protected Sub BtnSurtir_Click(sender As Object, e As EventArgs)
Dim Boton As LinkButton = CType(sender, LinkButton)
Dim GvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow)
Dim CveOS As Integer = GvRow.DataKey("CveOS").ToEntero
CveVentaAD = -1
If Boton.CommandArgument.ToEntero() > 0 Then
TimmerRefresh.Enabled = False
DivTransitorio1.Visible = False
ChkTransitorio.Checked = False
TxtResponsable.Text = ""
DivTransitorio2.Visible = False
DdlAlmacen.Enabled = True
Select Case CType(Boton.NamingContainer, GridViewRow).DataKey("TipoEntrega").ToEntero()
Case 1 ' VENTA
CargaVentaPorSurtir(CType(sender, LinkButton).CommandArgument.ToEntero(), CveOS:=CveOS)
Case 2 ' TRASPASO
DivTransitorio1.Visible = True
CargaTraspasoPorSurtir(CType(Boton.NamingContainer, GridViewRow).DataKey("CveTraspasoSolicitud").ToEntero())
End Select
End If
End Sub
Protected Sub BtnBuscar_Click(sender As Object, e As EventArgs)
CveVentaAD = -2
CargaVentaPorSurtir(DdlFolio.SelectedValue.ToEntero())
End Sub
Private Sub CargaVentaPorSurtir(CveVenta As Integer, Optional CveAlmacen As Integer = -1, Optional CveOS As Integer = -1)
LbSurtida.Visible = False
CveContrato = -1
CveSubProyecto = -1
CveOP = -1
DtDatos = Nothing
TipoEntrega = 1
BtnGuardar.Visible = True
Dim StrAlmacenes As String = "CveTipoAlmacen IN (1,2,26)"
If UsuarioActual.CveSubProyecto = 8804 Then
StrAlmacenes = "CveTipoAlmacen IN (1,2,12)"
End If
Dim ObjInventario As New ClsInventarios
If ObjInventario.EntregaAlmacenGet(CveVenta, CveAlmacen) Then
If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
ArchivoBitacora = String.Format("{0}Temp\EntregaDT_{1}_{2}.xml", UsuarioActual.Empresa.Ruta, UsuarioActual.CveUsuario, CveVenta)
ArchivoBitacoraDetalle = String.Format("{0}Temp\EntregaDTD_{1}_{2}.xml", UsuarioActual.Empresa.Ruta, UsuarioActual.CveUsuario, CveVenta)
If ArchivoBitacora <> "" Then
Dim Archivo As New System.IO.FileInfo(ArchivoBitacora)
If Archivo.Exists() Then
HplCargaBitacora.Visible = True
uppCargaBitacora.Update()
End If
End If
DtDatos = ObjInventario.DtResultados
If Not DtDatos.Columns.Contains("Consec") Then DtDatos.Columns.Add("Consec", GetType(Integer))
If Not DtDatos.Columns.Contains("CantidadGV") Then DtDatos.Columns.Add("CantidadGV", GetType(Double))
If Not DtDatos.Columns.Contains("CantidadTraspaso") Then DtDatos.Columns.Add("CantidadTraspaso", GetType(Double))
Dim Index As Integer = 1
For Each Dr As DataRow In DtDatos.Rows
Dr("Consec") = Index
Index += 1
Next
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosDetalleLote = Nothing
CreaDtDetalleLote()
If DtDatos.Rows(0) IsNot Nothing Then
Dim drE As DataRow = DtDatos.Rows(0)
EsDevolucionVenta = drE("EsDevolucionVenta").ToString().ToEntero()
TipoDocto = DtDatos.Rows(0)("TipoDocto").ToString()
TipoMovimiento = If(TipoDocto.Contiene({"Rem", "Ped", "Ing", "Ped", "PeC", "Ant"}) And (EsDevolucionVenta = 0 Or CveVentaAD > 0), 1, 2)
If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 AndAlso TipoDocto.Contiene("Ped", "Ing") Then
TxtObservaciones.Text = $"Dr. {drE("Medico").ToString}{vbCrLf}Cx. {drE("Procedimiento").ToString}{vbCrLf}F. Cirugía {drE("FechaEjecucion").ToString.ToDateTime.ToString("dd/MM/yyyy HH:mm")}{vbCrLf}H. {drE("Sucursal").ToString}{vbCrLf}"
End If
LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString()
HLFolio.Text = drE("SerieFolio").ToString()
If UsuarioActual.TienePermisoProceso(201) Then
HLFolio.NavigateUrl = $"/Ventas/Ventas.aspx?CveVenta={CveVenta}"
End If
'filtra los Almacenes de domicilio
If DtDatos.Rows(0)("ServicioDomicilio").ToString() = "True" Then
StrAlmacenes = "CveTipoAlmacen = 29"
End If
trObsGral.Visible = drE("Observaciones").ToString() <> ""
LbObservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString()
trObsAlmacen.Visible = drE("ObservacionesAlmacen").ToString() <> ""
LbObservacionesAlmacen.Text = drE("ObservacionesAlmacen").ToString()
CveVentaSurtir = CveVenta
CveOSSurtir = CveOS
CveAlmacenTraspasoDestino = drE(If(EsDevolucionVenta = 1 And TipoDocto <> "Rem" And TipoDocto <> "Ped", "CveAlmacenTraspasoOrigen", "CveAlmacenTraspasoDestino")).ToString().ToEntero()
CveAlmacenTraspasoOrigen = drE(If(EsDevolucionVenta = 1 And TipoDocto <> "Rem" And TipoDocto <> "Ped", "CveAlmacenTraspasoDestino", "CveAlmacenTraspasoOrigen")).ToString().ToEntero()
CveContrato = drE("CveContrato").ToString().ToEntero()
CveVendedor = drE("CveVendedor").ToString().ToEntero()
CveCliente = drE("CveCliente").ToString().ToEntero()
'ClienteEntregaPersonal(CveCliente)
CveSubProyecto = drE("CveSubProyecto").ToString().ToEntero()
EsInterno = CBool(DtDatos.Rows(0)("EsInterno").ToString())
CveDireccionEnvio = drE("CveDireccionEnvio").ToString.ToEntero
If CveDireccionEnvio > 0 Then
trDireccionEnvio.Visible = True
'carga la dirección de envío
Dim ObjClientes As New ClsClientes
If ObjClientes.DireccionEnvioGet(CveDireccionEnvio, CveCliente, -1) Then
Dim drenvio As DataRow = ObjClientes.DtResultados.FiltroPrimero("")
LblDirEnvio.Text = drenvio("SucursalClienteVentaDireccion").ToString
End If
ObjClientes.Dispose()
Else
trDireccionEnvio.Visible = False
End If
If DtDatos.SUM("CantidadS") <= 0 Then
GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna"
Else
GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario"
End If
If CveAlmacenTraspasoDestino > 0 And Not (TipoMovimiento = 2 And TipoDocto.Contiene("Rem", "Ped")) Then
DivTipoCambioAdvertencia.Visible = True
LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: <b>{GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}</b>"
Else
DivTipoCambioAdvertencia.Visible = False
End If
'DEVOLUCION REMISION
If TipoMovimiento = 2 And TipoDocto.Contiene("Rem", "Ped") And Not CveAlmacenTraspasoDestino > 0 Then
Alert("La remisión que se intenta devolver presenta inconsistencias. Comuniquese con servicio tecnico SIG.", TipoMensaje.MsgError)
BtnGuardar.Visible = False
End If
If CveAlmacen <= 0 Then
DdlAlmacen.Items.Clear()
If CveAlmacenTraspasoOrigen > 0 Then 'Not (EsDevolucionVenta = 1 And DtDatos.Rows(0)("TipoDocto").ToString() = "Rem" And UsuarioActual.Empresa.Funcionalidad(145) = "1") - ESTO ES PARA CUANDO SEA REMISION DE ENTREGA POR ADELANTADO FUNCIONA LA DEVOLUCION
DdlAlmacen.Items.Clear()
DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString()))
Else
'[IPP] PARCHE - Debe hacerse permiso proceso - 17Enero2018
Dim RestriccionAlmacenSubProyecto As String = If(UsuarioActual.CveEmpresa.Contiene(72, 80), $" AND CveSubProyecto = {CveSubProyecto}", "")
DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros($"{StrAlmacenes} {RestriccionAlmacenSubProyecto}")
End If
DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
DdlAlmacen.SelectedValue = "-1"
DdlAlmacen.DataBind()
DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
If CveAlmacenTraspasoOrigen > 0 Then
DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen)
End If
End If
If Not DtDatos.Columns.Contains("Serie") Then DtDatos.Columns.Add("Serie", GetType(String))
If Not DtDatos.Columns.Contains("Lote") Then DtDatos.Columns.Add("Lote", GetType(String))
If Not DtDatos.Columns.Contains("CveSeccion") Then DtDatos.Columns.Add("CveSeccion", GetType(Integer))
If Not DtDatos.Columns.Contains("FechaCaducidad") Then DtDatos.Columns.Add("FechaCaducidad", GetType(Date))
If Not DtDatos.Columns.Contains("Seleccionado") Then DtDatos.Columns.Add("Seleccionado", GetType(Boolean))
If Not DtDatos.Columns.Contains("CantidadSeleccionada") Then DtDatos.Columns.Add("CantidadSeleccionada", GetType(Double))
If UsuarioActual.Empresa.Funcionalidad(280) = "1" Then
FormaPaqueteria = DtDatos.Rows(0)("FormaPaqueteria").ToString().ToEntero()
Dim FormaPaq As Integer = FormaPaqueteria
RbSinEntrega.Checked = False
RbEntregaInterna.Checked = False
RbEntregaExterna.Checked = False
Select Case FormaPaq
Case 1
RbSinEntrega.Checked = True
LnkPaqueteriaDetalle.Visible = False
Case 2
RbEntregaInterna.Checked = True
'LnkPaqueteriaDetalle.Visible = True
DdlEstatus.SelectedValue = "5"
Case 3
RbEntregaExterna.Checked = True
LnkPaqueteriaDetalle.Visible = True
End Select
End If
'TxtFecha.Text = If(EsDevolucionVenta = 1, NowADS().ToShortDateString, DtDatos.Rows(0)("Fecha").ToString())
End If
If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
DivCodigoSeriePS.Visible = True
Else
DivCodigoSeriePS.Visible = False
End If
If TipoMovimiento = 2 Then ' cuando es cancelación
Dim Filtro As String '= If(ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString().Contiene({"Ing", "Dev", "Ped"}), "CveConcepto = 3", "CveConcepto = 9")
Dim FiltroPS As String = ""
Select Case ObjInventario.DtResultados.Rows(0)("TipoDocto").ToString()
Case "Ing"
Filtro = "CveConcepto IN (3,40)"
Case "Dev"
'cuand es devolucionventa=1, es cancelación de la devolución
If EsDevolucionVenta = 1 Then
Filtro = "CveConcepto = 18"
Else
Filtro = "CveConcepto IN (3,40)" 'cuando es devolución
For Each drr As DataRow In ObjInventario.DtResultados.Rows
FiltroPS = FiltroPS + "," + drr("CvePS").ToString
Next
FiltroPS = "AND CvePS IN (" & FiltroPS.Substring(1) & ")" 'elimino la primer comma
End If
Case "DPe"
Filtro = "CveConcepto = 9"
Case Else
Filtro = "CveConcepto = 9"
End Select
If ObjInventario.GetInv_Mov(ObjInventario.DtResultados.Rows(0)("CveVentaPadre").ToString().ToEntero(), UsuarioActual.CveEmpresa) Then
DtExistencias = ObjInventario.DtResultados.FiltraParametros($"CvePS Is Not NULL AND {Filtro} " & FiltroPS)
If Not DtExistencias.Rows.Count > 0 Then
Alert("La Venta original de la Devolución no tiene salida de Almacén.", TipoMensaje.MsgAdvertencia)
End If
If TipoDocto.Contiene("Ing") AndAlso TipoMovimiento = 2 Then
Dim DtMov As DataTable = DtExistencias.FiltraParametros("CveConcepto = 40", "", {"CveAlmacen"})
If DtMov.Rows.Count > 0 AndAlso CveAlmacen <= 0 Then
Dim CveAlmacenDev As Integer = DtMov.Rows(0)("CveAlmacen").ToString().ToEntero()
Dim AlmacenDev As String = ""
If CveAlmacenDev > 0 Then
AlmacenDev = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenDev).FiltroPrimeroValor("Almacen")
'DdlAlmacen.Items.Clear()
'DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros($"CveAlmacen = {CveAlmacenDev}")
'DdlAlmacen.DataBind()
DdlAlmacen.SelectedValueExistInsert(CveAlmacenDev, AlmacenDev) ' se va a poder regresar en algun almacen diferente
DdlAlmacen.Enabled = False
End If
EsDevolucionDirecta = True
End If
End If
Else
Alert("Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar.", TipoMensaje.MsgError)
End If
End If
If UsuarioActual.Empresa.FacturaProduccion Then
CargaDocumentos(CveVenta)
End If
Else
Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
End If
Else
DtDatos = Nothing
End If
ObjInventario.Dispose()
UpGenerales.Update()
If CveAlmacen <= 0 Then CargaGvDatos()
If EsDevolucionVenta = 1 AndAlso CveOSSurtir > 0 AndAlso TipoMovimiento = 2 AndAlso TipoDocto = "Ped" Then
PedidoBloqueCantidad = True
End If
End Sub
Private Sub CargaTraspasoPorSurtir(CveTraspaso As Integer)
LbSurtida.Visible = False
CveContrato = -1
CveSubProyecto = -1
DtDatos = Nothing
TipoEntrega = 2
Dim ObjInventario As New ClsInventarios
If ObjInventario.EntregaAlmacenTraspasosGet(CveTraspaso) Then
If ObjInventario.DtResultados IsNot Nothing AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
CveTraspasoSurtir = CveTraspaso
TipoMovimiento = 1
DtDatos = ObjInventario.DtResultados
DtDatos.Columns.Add("Consec", GetType(Integer))
DtDatos.Columns.Add("CantidadGV", GetType(Double))
DtDatos.Columns.Add("CantidadTraspaso", GetType(Double))
LbCliente.Text = DtDatos.Rows(0)("Nombre").ToString()
HLFolio.Text = DtDatos.Rows(0)("SerieFolio").ToString()
If UsuarioActual.TienePermisoProceso(201) Then
HLFolio.NavigateUrl = $"/Inventarios/TrasladoSolicitud.aspx?CveTraspasoSolicitud={CveTraspasoSurtir}"
End If
LbObservaciones.Text = DtDatos.Rows(0)("Observaciones").ToString()
Dim Index As Integer = 1
For Each Dr As DataRow In DtDatos.Rows
Dr("Consec") = Index
Index += 1
Next
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosDetalleLote = Nothing
CreaDtDetalleLote()
CveAlmacenTraspasoDestino = DtDatos.Rows(0)("CveAlmacenDestino").ToString().ToEntero()
CveAlmacenTraspasoOrigen = DtDatos.Rows(0)("CveAlmacenOrigen").ToString().ToEntero()
CveSubProyecto = DtDatos.Rows(0)("CveSubProyecto").ToString().ToEntero()
EsInterno = CBool(DtDatos.Rows(0)("EsInterno").ToString())
CveOP = DtDatos.Rows(0)("CveOP").ToString().ToEntero()
CveVentaSurtir = -1
CveOSSurtir = -1
If DtDatos.SUM("CantidadS") <= 0 Then
GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario gvEscondeColumna"
Else
GvDatos.CssClass = "table table-striped table-hover Widthall ScrollAD gvInventario"
End If
If CveAlmacenTraspasoDestino > 0 Then
DivTipoCambioAdvertencia.Visible = True
LtTipoCambioAdvertencia.Text = $"Los productos seran Trasladados al Almacen: <b>{GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoDestino}")}</b>"
Else
DivTipoCambioAdvertencia.Visible = False
End If
'If DtDatos.Rows.Cast(Of DataRow).Any(Function(Row) Row("CveTamaño").ToString().ToEntero() > 0) Then
'End If
DdlAlmacen.Items.Clear()
If CveAlmacenTraspasoOrigen > 0 Then
DdlAlmacen.Items.Insert(0, New ListItem(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Almacen", $"CveAlmacen = {CveAlmacenTraspasoOrigen}"), CveAlmacenTraspasoOrigen.ToString()))
End If
DdlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1"))
DdlAlmacen.SelectedValue = "-1"
DdlAlmacen.DataBind()
DdlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen)
If CveAlmacenTraspasoOrigen > 0 Then
DdlAlmacen.SelectedValueExist(CveAlmacenTraspasoOrigen)
End If
If Not DtDatos.Columns.Contains("CveSeccion") Then
DtDatos.Columns.Add("CveSeccion", GetType(Integer))
End If
If Not DtDatos.Columns.Contains("Lote") Then
DtDatos.Columns.Add("Lote", GetType(String))
End If
If Not DtDatos.Columns.Contains("FechaCaducidad") Then
DtDatos.Columns.Add("FechaCaducidad", GetType(Date))
End If
If Not DtDatos.Columns.Contains("Seleccionado") Then
DtDatos.Columns.Add("Seleccionado", GetType(Boolean))
End If
If Not DtDatos.Columns.Contains("CantidadSeleccionada") Then
DtDatos.Columns.Add("CantidadSeleccionada", GetType(Double))
End If
If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
DivCodigoSeriePS.Visible = True
Else
DivCodigoSeriePS.Visible = False
End If
Else
Alert("No se encontraron productos pendientes por surtir. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
End If
Else
DtDatos = Nothing
End If
ObjInventario.Dispose()
UpGenerales.Update()
CargaGvDatos()
End Sub
Private Sub CargaGvDatos(Optional CveAlmacen As Integer = -1)
If DtDatos IsNot Nothing Then
Dim AplicaSeccion, AplicaLote, AplicaCaducidad, AplicaSerie As Boolean
If DtDatos IsNot Nothing AndAlso DtDatos.Rows.Count > 0 Then
AplicaSerie = CBool(DtDatos.MAX("AplicaSerie"))
AplicaSeccion = CBool(DtDatos.MAX("AplicaSeccion"))
AplicaLote = CBool(DtDatos.MAX("AplicaLote"))
AplicaCaducidad = CBool(DtDatos.MAX("AplicaCaducidad"))
End If
If AplicaSeccion Then GvDatos.Columns(7).Visible = True
If AplicaLote Then GvDatos.Columns(8).Visible = True
If AplicaCaducidad Then GvDatos.Columns(9).Visible = True
If Not String.IsNullOrWhiteSpace(UsuarioActual.Empresa.Funcionalidad(147)) Then GvDatos.Columns(9).HeaderText = UsuarioActual.Empresa.Funcionalidad(147)
'GvDatos.Columns(9).HeaderText = If(UsuarioActual.Empresa.Funcionalidad(147) <> "", UsuarioActual.Empresa.Funcionalidad(147), "")
'SugerirFecha()
If DdlAlmacen.SelectedValue.ToEntero > 0 And CveVentaSurtir > 0 Then
CargaVentaPorSurtir(CveVentaSurtir, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero, CveOS:=CveOSSurtir)
If CargaBitacora Then
CargaBitacoraSerie()
End If
End If
End If
GvDatos.DataSource = DtDatos
GvDatos.DataBind()
UpDatos.Update()
UpVenta.Update()
'CARGA LO PRECARGADO CON SERIE
Dim Contador As Integer = 0
For Each Gvr As GridViewRow In GvDatos.Rows
If Gvr.DataKey("CvePS").ToEntero() = CvePSSerie AndAlso DtDatosDetalle IsNot Nothing Then
Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
Gvr.FCCheckBox("cbInv").Enabled = False
Gvr.FCCheckBox("cbInv").Checked = True
Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString()
End If
Next
End Sub
Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatos.RowDataBound
If e.Row.RowType = DataControlRowType.Header Then
If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then
If DtDatos IsNot Nothing Then
If DtDatos.MAX("EsPaquete") = "True" Then
e.Row.FCLiteral("LtlHeaderPS").Text = "Paquete"
Else
e.Row.FCLiteral("LtlHeaderPS").Text = "Producto"
End If
End If
End If
End If
If e.Row.RowType = DataControlRowType.DataRow Then
If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then
If e.Row.DBCampo("EsPaquete") = "True" Then
e.Row.FCHyperLink("HplPS").NavigateUrl = $"/Inventarios/PaquetesArmadoDesarmado.aspx?CvePS={e.Row.DBCampo("CvePS")}&Cantidad={e.Row.DBCampo("CantidadF")}"
Else
e.Row.FCHyperLink("HplPS").NavigateUrl = $"/Ventas/ProductosServicios.aspx?CvePS={e.Row.DBCampo("CvePS")}"
End If
Else
e.Row.FCHyperLink("HplPS").NavigateUrl = $"/Ventas/ProductosServicios.aspx?CvePS={e.Row.DBCampo("CvePS")}"
End If
'código temporal
Dim AplicaSerie As Boolean = CBool(e.Row.DBCampo("AplicaSerie"))
If AplicaSerie Then
e.Row.FCButton("BtnSerie").Visible = True
e.Row.FCButton("BtnSerie").Text = "Serie"
e.Row.FCButton("BtnSerie").CommandArgument = String.Format("{0}°{1}°{2}°{3}°{4}°{5}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveUM"), e.Row.DBCampo("PS"), e.Row.DBCampo("CantidadF"), e.Row.DBCampo("Consec"), e.Row.DBCampo("Inv_CveMetodoInventario"))
e.Row.FCTextBox("TbCantidadF").Enabled = False
e.Row.FCCheckBox("cbInv").Enabled = False
If e.Row.DBCampo("Consec") <> "" AndAlso DtDatosDetalle IsNot Nothing Then
Dim Contador As Integer = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", e.Row.DBCampo("Consec"))).Rows.Count
e.Row.FCTextBox("TbCantidadF").Text = Contador.ToString()
Else
e.Row.FCTextBox("TbCantidadF").Text = "0"
End If
If TipoDocto = "DPe" Then
CveConsecSerie = e.Row.DBCampo("Consec").ToString().ToEntero()
PSSerie = e.Row.DBCampo("PS").ToString()
CvePSSerie = e.Row.DBCampo("CvePS").ToEntero()
CveUMSerie = e.Row.DBCampo("CveUM").ToEntero()
LbCantidad.Text = e.Row.DBCampo("CantidadF")
LbCantidad2.Text = e.Row.DBCampo("CantidadF")
AgregaSerie(e.Row.DBCampo("ObservacionesDetalle"), 3)
End If
If TipoDocto = "Ing" AndAlso e.Row.DBCampo("ObservacionesDetalle").Length > 8 AndAlso DdlAlmacen.SelectedValue.ToEntero > 0 AndAlso UsuarioActual.CveRol = 1 Then
Dim Str As Array = e.Row.DBCampo("ObservacionesDetalle").Replace(",", " ").Replace(".", " ").Replace(vbTab, " ").Replace(vbLf, " ").Split(" "c)
CveConsecSerie = e.Row.DBCampo("Consec").ToString().ToEntero()
PSSerie = e.Row.DBCampo("PS").ToString()
CvePSSerie = e.Row.DBCampo("CvePS").ToEntero()
CveUMSerie = e.Row.DBCampo("CveUM").ToEntero()
LbCantidad.Text = e.Row.DBCampo("CantidadF")
LbCantidad2.Text = e.Row.DBCampo("CantidadF")
For Each st As String In Str
If Not st.Contiene("", "/") Then
AgregaSerie(st, 3)
End If
Next
End If
Else
e.Row.FCButton("BtnSerie").Visible = False
e.Row.FCTextBox("TbCantidadF").Enabled = True
e.Row.FCTextBox("TbCantidadF").Attributes.Add("onblur", String.Format("ValidarCantidad(this, {0})", e.Row.DBCampo("CantidadF")))
End If
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)
End If
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").ReadOnly = True
CType(e.Row.FindControl("RFVCaducidad"), RequiredFieldValidator).Enabled = False
'si aplica caducidad y viene vacía (posible por venta anterior), que se active su registro
If (e.Row.FCTextBox("TxtCaducidad").Text = "" OrElse e.Row.FCTextBox("TxtCaducidad").Text.ToDate <= MinFecha) OrElse UsuarioActual.TienePermisoProceso(364) Then
e.Row.FCTextBox("TxtCaducidad").ReadOnly = False
CType(e.Row.FindControl("RFVCaducidad"), RequiredFieldValidator).Enabled = True
e.Row.FCTextBox("TxtCaducidad").Enabled = True
End If
Else
e.Row.FCTextBox("TxtCaducidad").Visible = False
e.Row.FCLinkButton("LnkCaducidad").Visible = False
e.Row.FCTextBox("TxtCaducidad").Enabled = True
End If
If CBool(e.Row.DBCampo("AplicaLote")) Then
e.Row.FCTextBox("TxtLote").Visible = True
'si aplica caducidad y viene vacía (posible por venta anterior), que se active su registro
If e.Row.FCTextBox("TxtLote").Text = "" OrElse UsuarioActual.TienePermisoProceso(364) Then
e.Row.FCTextBox("TxtLote").ReadOnly = False
e.Row.FCTextBox("TxtLote").Enabled = True
Else
e.Row.FCTextBox("TxtLote").ReadOnly = True
End If
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 e.Row.DBCampo("CodigoBarras").Trim <> "" AndAlso UsuarioActual.Empresa.Funcionalidad(132) = "1" Then
'NO BLOQUEA PARA ROL AD
If UsuarioActual.CveRol = 1 Then
If AplicaSerie Then
e.Row.FCTextBox("TbCantidadF").Enabled = False
e.Row.FCTextBox("TbCantidadF").Text = "0"
Else
e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").ToDecimal.ToString("#,##0.######")
End If
End If
If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then 'acumuladoras
If e.Row.DBCampo("CveCategoria") <> "249" Then
e.Row.FCTextBox("TbCantidadF").Enabled = True
End If
Else
If Not UsuarioActual.CveRol = 1 Then
e.Row.FCTextBox("TbCantidadF").Enabled = False
e.Row.FCTextBox("TbCantidadF").Text = "0"
End If
End If
End If
'SI ES TRASPASO OBLIGATORIO SURTIR TODO
If TipoEntrega = 2 Then
e.Row.FCCheckBox("cbInv").Enabled = False
End If
If PedidoBloqueCantidad Then
e.Row.FCTextBox("TbCantidadF").Enabled = False
End If
End If
End Sub
Private Sub CargaDocumentos(tCveVenta As Integer)
If tCveVenta > 0 Then
Dim objInv As New ClsEdocumentacion
If objInv.DocumentacionElectronicaGet(-1, -1, -1, UsuarioActual.CveEmpresa, -1, tCveVenta) Then
GvDocs.DataSource = objInv.DtResultados.FiltraParametros("Adjunto <> ''")
End If
objInv.Dispose()
GvDocs.DataBind()
End If
End Sub
#End Region
#Region " AGREGAR "
Protected Sub BtnSerie_Click(sender As Object, e As EventArgs)
Dim Argumentos As String() = CType(sender, Button).CommandArgument.Split("°"c)
LbProducto.Text = Argumentos(2)
LbCantidad.Text = Argumentos(3)
LbProducto2.Text = Argumentos(2)
LbCantidad2.Text = Argumentos(3)
CvePSSerie = Argumentos(0).ToEntero()
CveUMSerie = Argumentos(1).ToEntero()
PSSerie = Argumentos(2).ToString()
CveConsecSerie = Argumentos(4).ToEntero()
CveMetodoInventario = Argumentos(5).ToEntero()
If CveMetodoInventario = 6 Then
RegistraScript("$('#DivLote').modal({backdrop: 'static', keyboard: false});")
CargaLote()
UpLoteBatch.Update()
Else
RegistraScript("$('#DivSerie').modal({backdrop: 'static', keyboard: false});")
CargaSerie()
UpSerie.Update()
End If
End Sub
#Region " AGREGA POR SERIE/LOTE "
Private Sub CreaDtDetalle()
If DtDatosDetalle Is Nothing Then
DtDatosDetalle = New DataTable
DtDatosDetalle.Columns.Add("CveVentaDetalle", GetType(Integer))
DtDatosDetalle.Columns.Add("Consec", GetType(Integer))
DtDatosDetalle.Columns.Add("ConsecId", GetType(Integer))
DtDatosDetalle.Columns.Add("CvePS", GetType(Integer))
DtDatosDetalle.Columns.Add("PS", GetType(String))
DtDatosDetalle.Columns.Add("CveUM", GetType(Integer))
DtDatosDetalle.Columns.Add("Serie", GetType(String))
DtDatosDetalle.Columns.Add("Lote", GetType(String))
DtDatosDetalle.Columns.Add("FechaCaducidad", GetType(Date))
DtDatosDetalle.Columns.Add("FueTraspaso", GetType(Integer))
End If
End Sub
Private Sub CargaSerie(Optional CerrarCompletado As Boolean = False, Optional CargaMasivo As Boolean = False)
If Not CargaMasivo Then RegistraScript("$('#DivSerie').modal({backdrop: 'static', keyboard: false})", "show")
Dim AplicaCaducidad As Boolean = False
Dim dttt As DataTable = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSSerie)
If dttt IsNot Nothing AndAlso dttt.Rows.Count > 0 Then
AplicaCaducidad = If(dttt.FiltraParametros("").Rows(0)("AplicaCaducidad").ToString() = "True", True, False)
End If
GvSerie.Columns(1).HeaderText = UsuarioActual.Empresa.Funcionalidad(147)
If AplicaCaducidad Then
GvSerie.Columns(1).Visible = True
TdCaducidad1.Visible = True
TdCaducidad2.Visible = True
Else
GvSerie.Columns(1).Visible = False
TdCaducidad1.Visible = False
TdCaducidad2.Visible = False
End If
GvSerie.DataSource = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC")
GvSerie.DataBind()
'SERIE LOTE RECOMENDADO
Dim DtSerie As New DataTable
If TipoMovimiento = 1 AndAlso Not CargaMasivo Then
Dim ObjInventarios As New ClsInventarios
If ObjInventarios.SerieRecomendadoGet(CvePSSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero(), CveSubProyecto:=CveSubProyecto, CveCliente:=CveCliente, CveVendedor:=CveVendedor) Then
DtSerie = ObjInventarios.DtResultados
End If
ObjInventarios.Dispose()
Else
DtSerie = DtExistencias.FiltraParametros("Serie <> ''")
End If
'SERIE LOTE RECOMENDADO - QUITA YA COMPLETADOS EN EL CLIENTE
If DtSerie IsNot Nothing AndAlso DtSerie.Rows.Count > 0 Then
'CALCULA YA COMPLETADOS
Dim DrsRemove As New List(Of DataRow)
DtSerie.Columns.Add("CantidadSeleccionada", GetType(Integer))
For Each dr As DataRow In DtSerie.Rows
dr("CantidadSeleccionada") = DtDatosDetalle.FiltraParametros(String.Format("Consec = {0} AND Serie = '{1}'", CveConsecSerie, dr("Serie").ToString().Replace("'", "''"))).Rows.Count
If dr("CantidadSeleccionada").ToString().ToDecimal = dr("Existencia").ToString().ToDecimal Then
DrsRemove.Add(dr)
End If
Next
'ELIMINA YA COMPLETADOS EN PAGINA
For Each dr As DataRow In DrsRemove
DtSerie.Rows.Remove(dr)
Next
If DtSerie.Rows.Count > 0 Then
Dim Mensaje As New StringBuilder
Mensaje.AppendFormat("Serie Recomendado: <b>{0}</b>", DtSerie.Rows(0)("Serie"))
If AplicaCaducidad Then Mensaje.AppendFormat(", Caducidad: <b>{0}</b>", DtSerie.Rows(0)("FechaCaducidad").ToString().ToDate.ToShortDateString)
LbSerieRecomendado.Text = Mensaje.ToString() 'String.Format("Serie / Lote Recomendado: <b>{0}</b>, Caducicdad: <b>{1}</b>", ObjInventarios.DtResultados.Rows(0)("SerieLote"), ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString().ToDate.ToShortDateString)
Else
LbSerieRecomendado.Text = "No se encontro ningun Serie/Lote."
End If
Else
LbSerieRecomendado.Text = "No se encontro ningun Serie/Lote."
End If
'SI TIENE SALIDA POR SERIE LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
Dim Contador As Integer = 0
For Each Gvr As GridViewRow In GvDatos.Rows
If Gvr.DataKey("AplicaSerie") = "True" Then
Contador = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("Consec"))).Rows.Count
Gvr.FCCheckBox("cbInv").Enabled = False
Gvr.FCCheckBox("cbInv").Checked = True
Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString()
End If
Next
UpDatos.Update()
'VALIDA QUE SIGA AGREGANDO
If DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count = LbCantidad.Text.ToEntero() Then
BtnAgregarPS.Enabled = False
If CerrarCompletado Then
RegistraScript("$('#DivSerie').modal('hide')", "hide")
End If
UpSerie.Update()
Exit Sub
Else
BtnAgregarPS.Enabled = True
UpSerie.Update()
End If
End Sub
Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs)
If TxtSerie.Text.Trim.Length >= 2 AndAlso TxtSerie.Text.Trim.StartsWith("*") AndAlso TxtSerie.Text.Trim.EndsWith("*") Then
Dim ArraySeries() As String = Nothing
Dim Series As String = Nothing
Series = TxtSerie.Text.Trim
Series = Series.Replace("*", "")
ArraySeries = Series.Trim.Split(","c)
For i As Integer = 0 To ArraySeries.Length - 1
If ArraySeries(i).Trim.Length > 1 Then AgregaSerie(ArraySeries(i).Trim, 1, True)
Next
Else
AgregaSerie(TxtSerie.Text.Trim, 1)
End If
End Sub
Private Sub AgregaSerie(Serie As String, Tipo As Integer, Optional CargaMasivo 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
If Serie.Trim.Length < 6 Then
Alert("El campo 'Serie' debe tener minimo 6 caracteres. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If DtDatosDetalle.FiltraParametros($"CvePS = {CvePSSerie} AND Serie = '{Serie}'").Rows.Count > 0 Then
Alert("La Serie indicada ya esta registrada. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error1")
TxtSerie.Text = ""
Exit Sub
End If
Dim AplicaCaducidad As Boolean = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSSerie).FiltroPrimeroValor("AplicaCaducidad", "") = "True"
'If GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSSerie).FiltraParametros("").Rows(0) IsNot Nothing Then
' AplicaCaducidad = If(GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSSerie).FiltraParametros("").Rows(0)("AplicaCaducidad").ToString() = "True", True, False)
'End If
'Valida Existencia
If TipoMovimiento = 1 Then
Dim ObjInventarios As New ClsInventarios
Dim Existencia As Decimal = ObjInventarios.GetExistenciasPS(CvePSSerie, CveUMSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero(), FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Serie, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
If Existencia < 1 Then
Alert($"No hay existencia suficiente del producto <b>""{PSSerie}""</b> con la Serie definida <b>""{Serie}""</b>. Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", ""))
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error2")
ObjInventarios.Dispose()
Exit Sub
End If
ObjInventarios.Dispose()
Else
If DtExistencias IsNot Nothing Then
Dim Existencia As Decimal = DtExistencias.SUMD("Cantidad", $"CvePS = {CvePSSerie} AND CveUM = {CveUMSerie} AND Serie = '{Serie}'")
If Existencia < 1 Then
Alert($"No hay existencia suficiente del producto <b>""{PSSerie}""</b> con la Serie definida <b>""{Serie}""</b>. Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia, If(Tipo = 2, "window.setTimeout(Focus,200);", ""))
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error3")
Exit Sub
End If
End If
End If
Dim Row As DataRow = DtDatosDetalle.NewRow
Row("ConsecId") = CveConsecSerie
Row("Consec") = DtDatosDetalle.Rows.Count + 1
Row("PS") = PSSerie
Row("CvePS") = CvePSSerie
Row("CveUM") = CveUMSerie
Row("Serie") = Serie
Row("FechaCaducidad") = If(AplicaCaducidad, TxtFechaCaducidad.Text, MinFecha.ToShortDateString)
DtDatosDetalle.Rows.Add(Row)
ActualizaBitacora()
RegistraScript("playsonidito('beep-07.wav')", "Sonidito")
If Tipo = 1 Then
TxtSerie.Text = ""
TxtFechaCaducidad.Text = ""
End If
If Tipo < 3 Then
CargaSerie(True, CargaMasivo)
End If
End Sub
Protected Sub GvSerie_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSerie.RowDeleting
Dim keySerie As String = e.Keys("Serie").ToString()
Try
For Each dr As DataRow In DtDatosDetalle.Rows
If dr("Serie").ToString() = keySerie Then
dr.Delete()
End If
Next
Catch ex As Exception
End Try
DtDatosDetalle.AcceptChanges()
ActualizaBitacora()
CargaSerie()
End Sub
#End Region
#Region "Bitacora"
Private Sub ActualizaBitacora(Optional Eliminar As Boolean = False)
If Not Eliminar Then
DtDatos.TableName = "DtDatos"
DtDatosDetalle.TableName = "DtDatosDetalle"
DtDatos.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)
CargaBitacora = False
If IO.File.Exists(ArchivoBitacora) Then
CargaBitacoraSerie()
CargaGvDatos()
CargaBitacora = True
Else
Alert("No hay bitácora para recuperar.", TipoMensaje.ToastInformacion)
End If
End Sub
Private Sub CargaBitacoraSerie()
If IO.File.Exists(ArchivoBitacora) Then
DtDatos.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
Else
Alert("No hay bitácora para recuperar.", TipoMensaje.ToastInformacion)
End If
End Sub
#End Region
#Region " AGREGA CON LOTE BATCH "
Private Sub CreaDtDetalleLote()
If DtDatosDetalleLote Is Nothing Then
DtDatosDetalleLote = New DataTable
DtDatosDetalleLote.Columns.Add("CveVentaDetalle", GetType(Integer))
DtDatosDetalleLote.Columns.Add("Consec", GetType(Integer))
DtDatosDetalleLote.Columns.Add("ConsecId", GetType(Integer))
DtDatosDetalleLote.Columns.Add("Cantidad", GetType(Double))
DtDatosDetalleLote.Columns.Add("CvePS", GetType(Integer))
DtDatosDetalleLote.Columns.Add("PS", GetType(String))
DtDatosDetalleLote.Columns.Add("CveUM", GetType(Integer))
DtDatosDetalleLote.Columns.Add("Lote", GetType(String))
DtDatosDetalleLote.Columns.Add("FechaCaducidad", GetType(String))
DtDatosDetalleLote.Columns.Add("FueTraspaso", GetType(Integer))
End If
End Sub
Private Sub CargaLote(Optional CerrarCompletado As Boolean = False)
RegistraScript("$('#DivLote').modal({backdrop: 'static', keyboard: false})")
GvLote.Columns(2).HeaderText = UsuarioActual.Empresa.Funcionalidad(147)
GvLote.DataSource = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC")
GvLote.DataBind()
'VALIDA QUE SIGA AGREGANDO
If DtDatosDetalleLote.SUM("Cantidad", String.Format("ConsecId = {0}", CveConsecSerie)) = LbCantidad2.Text.ToDecimal Then
BtnLote.Enabled = False
If CerrarCompletado Then
RegistraScript("$('#DivLote').modal('hide')", "hide")
End If
Else
BtnLote.Enabled = True
End If
'LOTE RECOMENDADO
Dim DtLotes As New DataTable
If TipoMovimiento = 1 Then
Dim ObjInventarios As New ClsInventarios
If ObjInventarios.LoteRecomendadoGet(CvePSSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero()) Then
DtLotes = ObjInventarios.DtResultados
End If
ObjInventarios.Dispose()
Else
DtLotes = DtExistencias.FiltraParametros("Lote <> ''")
End If
Dim DrsRemove As New List(Of DataRow)
If DtLotes.Rows.Count > 0 Then
'CALCULA YA COMPLETADOS
DtLotes.Columns.Add("CantidadSeleccionada", GetType(Integer))
For Each dr As DataRow In DtLotes.Rows
dr("CantidadSeleccionada") = DtDatosDetalleLote.SUM("Cantidad", String.Format("Consec = {0} AND Lote = '{1}'", CveConsecSerie, dr("Lote")))
If dr("CantidadSeleccionada").ToString().ToDecimal = dr("Existencia").ToString().ToDecimal Then
DrsRemove.Add(dr)
End If
Next
'ELIMINA YA COMPLETADOS EN PAGINA
For Each dr As DataRow In DrsRemove
DtLotes.Rows.Remove(dr)
Next
If DtLotes.Rows.Count > 0 Then
Dim Mensaje As New StringBuilder
Mensaje.AppendFormat("Recomendado: Existencia: <b>{0}</b> Lote: <b>{1}</b> Fecha Caducidad: <b>{2}</b> ", DtLotes.Rows(0)("Existencia").ToString().FormatoNumero, DtLotes.Rows(0)("Lote"), DtLotes.Rows(0)("FechaCaducidad").ToString().ToDate.ToShortDateString)
LbLoteRecomendado.Text = Mensaje.ToString()
Else
LbLoteRecomendado.Text = "No se encontro ningún Lote recomendado."
End If
Else
LbLoteRecomendado.Text = "No se encontro ningún Lote recomendado."
End If
'SI TIENE SALIDA POR LOTE, BLOQUEAMOS CHECK Y TXTCANTIDAD
Dim Contador As Decimal = 0
For Each Gvr As GridViewRow In GvDatos.Rows
If Gvr.DataKey("CvePS").ToEntero() = CvePSSerie Then
Contador = DtDatosDetalleLote.SUM("Cantidad", String.Format("ConsecId = {0}", Gvr.DataKey("Consec")))
Gvr.FCCheckBox("cbInv").Enabled = False
Gvr.FCCheckBox("cbInv").Checked = True
Gvr.FCTextBox("TbCantidadF").Text = Contador.ToString().FormatoNumero
End If
Next
RVCantidadLote.MaximumValue = (If((LbCantidad2.Text.ToDecimal - Contador) = 0, 0.02, LbCantidad2.Text.ToDecimal - Contador)).ToString().FormatoNumero
TxtCantidadLote.Text = "1"
TxtLote.Text = ""
TxtBatch.Text = ""
TxtLote.Focus()
UpLoteBatch.Update()
UpDatos.Update()
End Sub
Protected Sub BtnAgregarPS2_Click(sender As Object, e As EventArgs)
AgregaLote(TxtLote.Text.Trim, TxtBatch.Text.Trim, 1)
End Sub
Private Sub AgregaLote(Lote As String, Batch As String, Tipo As Integer)
If Lote = "" Then
Alert("El campo Lote es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'VALIDACION DE SERIES DUPLICADAS
Dim MensajeAlert As New StringBuilder
Dim DtDuplicado As New DataTable
Dim DtSeriesNuevas As New DataTable
DtSeriesNuevas.Columns.Add("Serie", GetType(String))
DtDuplicado = DtDatosDetalleLote.FiltraParametros($"ConsecId = {CveConsecSerie} AND Lote = '{Lote}' AND Batch = '{Batch}'")
If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then
Alert($"<br/> El numero de Lote <b>""{Lote}""</b> y Batch = '{Batch}' proporcionado ya se encuentra ingresado.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
Dim Row As DataRow = DtDatosDetalleLote.NewRow
Dim CantidadLote As Decimal = TxtCantidadLote.Text.ToDecimal
Dim MensajeSinExistencias As New StringBuilder
Dim ObjInventarios As New ClsInventarios
'VERIFICA EXISTENCIAS
If TipoMovimiento = 1 Then
Dim Existencia As Decimal = ObjInventarios.GetExistenciasPS(CvePSSerie, CveUMSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero(), FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), Lote:=Lote, ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
If Existencia < CantidadLote Then
Alert($"No hay existencia suficiente del producto <b>""{PSSerie}""</b> con el lote definido <b>""{Lote}""</b> y el batch <b>""{Batch}""</b>. Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
ObjInventarios.Dispose()
Exit Sub
End If
Else
If DtExistencias IsNot Nothing Then
Dim Existencia As Decimal = DtExistencias.SUMD("Cantidad", $"CvePS = {CvePSSerie} AND CveUM = {CveUMSerie} AND Lote = '{Lote}' AND Batch = '{Batch}'")
If Existencia < CantidadLote Then
Alert($"No hay existencia suficiente del producto <b>""{PSSerie}""</b> con el lote definido <b>""{Lote}""</b> y el batch <b>""{Batch}""</b>. Por favor rectifique y vuelva a intentar", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
ObjInventarios.Dispose()
Exit Sub
End If
End If
End If
Dim FechaCaducidad As String = ""
If ObjInventarios.LoteRecomendadoGet(CvePSSerie, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero()) AndAlso ObjInventarios.DtResultados.Rows.Count > 0 Then
FechaCaducidad = ObjInventarios.DtResultados.Rows(0)("FechaCaducidad").ToString().ToDate.ToShortDateString
End If
Row("ConsecId") = CveConsecSerie
Row("Consec") = DtDatosDetalle.Rows.Count + 1
Row("Cantidad") = CantidadLote
Row("CvePS") = CvePSSerie
Row("PS") = PSSerie
Row("CveUM") = CveUMSerie
Row("Lote") = Lote
Row("Batch") = Batch
Row("FechaCaducidad") = FechaCaducidad
DtDatosDetalleLote.Rows.Add(Row)
ObjInventarios.Dispose()
If Tipo = 1 Then
TxtCantidadLote.Text = "1"
TxtLote.Text = ""
TxtBatch.Text = ""
End If
CargaLote(True)
End Sub
Protected Sub GvLote_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvLote.RowDeleting
Dim keyLote As String = e.Keys("Lote").ToString()
Try
For Each dr As DataRow In DtDatosDetalleLote.Rows
If dr("Lote").ToString() = keyLote Then
dr.Delete()
End If
Next
Catch ex As Exception
End Try
DtDatosDetalleLote.AcceptChanges()
CargaLote()
End Sub
#End Region
#Region " AGREGA CON TXT | CODIGO - SERIE "
Protected Sub BtnCodigoPS_Click(sender As Object, e As EventArgs)
If TxtCodigoPS.Text = "" Then
Exit Sub
End If
TdSeriePS.Visible = False
Dim Existe As Boolean = False
Dim PSTemp As String = ""
For Each Gvr As GridViewRow In GvDatos.Rows
If Gvr.DataKey("CodigoBarras") = TxtCodigoPS.Text.Trim Then
Dim TxtCantidad As TextBox = GvDatos.Rows(Gvr.RowIndex).FCTextBox("TbCantidadF")
If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then
''VALIDA EXISTENCIA
If Not TipoDocto.Contiene("Dev") Then
If TipoMovimiento = 1 Then
Dim ObjInventario As New ClsInventarios
Dim Existencia As Decimal = ObjInventario.GetExistenciasPS(Gvr.DataKey("CvePS").ToString().ToEntero(), Gvr.DataKey("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero(), FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=If(TipoEntrega = 2, 1, -1))
ObjInventario.Dispose()
If Not Existencia >= TxtCantidad.Text.ToDecimal + 1 Then
TxtCodigoPS.Text = ""
Alert($"No hay existencias suficientes del producto: <br/><b>""{Gvr.DataKey("Codigo")}-{Gvr.DataKey("PS")}""</b>. <br/>Solo hay disponibles <b>{Existencia.FormatoNumero}</b> en Almacen. Por favor Verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
Else
If DtExistencias IsNot Nothing Then
Dim Existencia As Decimal = DtExistencias.SUMD("Cantidad", $"CvePS = {Gvr.DataKey("CvePS")} AND CveUM = {Gvr.DataKey("CveUM").ToString().ToEntero()}")
If Not Existencia >= TxtCantidad.Text.ToDecimal + 1 Then
TxtCodigoPS.Text = ""
Alert($"No hay existencias suficientes del producto: <br/><b>""{Gvr.DataKey("Codigo")}-{Gvr.DataKey("PS")}""</b>. <br/>Solo hay disponibles <b>{Existencia.FormatoNumero}</b> en Almacen. Por favor Verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
End If
End If
End If
If Gvr.DataKey("AplicaSerie") = "True" Then
TdSeriePS.Visible = True
TxtSeriePS.Focus()
CveConsecSerie = Gvr.DataKey("Consec").ToString().ToEntero()
PSSerie = Gvr.DataKey("PS").ToString()
CvePSSerie = Gvr.DataKey("CvePS").ToEntero()
CveUMSerie = Gvr.DataKey("CveUM").ToEntero()
Exit Sub
End If
Dim CantidadEspecial As Boolean = Gvr.DataKey("CveClasificacion").ToString().ToEntero().Contiene(17601, 17881) OrElse Gvr.DataKey("CvePS").ToString().ToEntero().Contiene(343032, 343033)
If CantidadEspecial Then
RegistraScript("CantidadEspecial();window.setTimeout(FocusCantidadEspecial,200);")
LtlProductoCantidad.Text = $"{Gvr.DataKey("Codigo")}"
RowIndexCantidadEspecial = Gvr.RowIndex
CantidadEspecialTemp = Gvr.DataKey("CantidadF").ToDecimal
TxtCodigoPS.Text = ""
Exit Sub
Else
TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + 1).ToString().FormatoNumero
TxtCodigoPS.Text = ""
UpDatos.Update()
Exit Sub
End If
VerificaVentaSurtida()
Exit Sub
End If
Existe = True
PSTemp = Gvr.DataKey("PS").ToString()
'Alert($"Ya se ha cargado la totalidad del Producto ""<b>{Gvr.DataKey("PS").ToString()}</b>"" con el Codigo ""<b>{TxtCodigoPS.Text}</b>"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
'VerificaVentaSurtida()
'Exit Sub
End If
Next
VerificaVentaSurtida()
If Existe Then
Alert($"Ya se ha cargado la totalidad del Producto ""<b>{PSTemp}</b>"" con el Codigo ""<b>{TxtCodigoPS.Text}</b>"".", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
Else
Alert($"No se ha encontrado un producto para surtir con el Codigo ""<b>{TxtCodigoPS.Text}</b>"". ", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
End If
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
TxtCodigoPS.Text = ""
End Sub
Private Sub VerificaVentaSurtida()
Dim Surtida As Boolean = True
For Each Gvr As GridViewRow In GvDatos.Rows
If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then
Surtida = False
Exit Sub
End If
Next
If Surtida Then
LbSurtida.Visible = True
End If
End Sub
Protected Sub BtnSeriePS_Click(sender As Object, e As EventArgs)
AgregaSerie(TxtSeriePS.Text.Trim, 2, True)
TdSeriePS.Visible = False
TxtSeriePS.Text = ""
TxtCodigoPS.Text = ""
TxtCodigoPS.Focus()
VerificaVentaSurtida()
End Sub
Protected Sub BtnGuardarCantidadEspecial_Click(sender As Object, e As EventArgs)
AgregaCantidadEspecial()
End Sub
Private Sub AgregaCantidadEspecial()
Dim TxtCantidad As TextBox = GvDatos.Rows(RowIndexCantidadEspecial).FCTextBox("TbCantidadF")
If CantidadEspecialTemp - TxtCantidadEspecialDiv.Text.ToDecimal - TxtCantidad.Text.ToDecimal >= 0 Then
TxtCantidad.Text = (TxtCantidad.Text.ToDecimal + TxtCantidadEspecialDiv.Text.ToDecimal).ToString().FormatoNumero
'RegistraScript("$('#ModalCantidad').modal('hide');")
RegistraScript("$('#DivCantidadEspecial').hide(200);")
UpDatos.Update()
TxtCodigoPS.Focus()
Else
Alert("La cantidad excede la pendiente por surtir. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia, "window.setTimeout(Focus,200);")
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
TxtCantidadEspecialDiv.Text = "1"
End Sub
#End Region
#End Region
#Region " GUARDAR "
Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs)
Select Case TipoEntrega
Case 1
GuardaVenta()
Case 2
GuardaTraspaso()
End Select
End Sub
Private Sub GuardaVenta()
'' INICIA: VALIDACIONES
'Valida el estatus de la Venta, si es = 5 O DevolucionVenta = 2, NO SE SURTE!
Dim ObjVentaInv As New ClsInventarios
If ObjVentaInv.GetEstatusVentaPorSurtir(CveVentaSurtir) Then
TipoEstatus = ObjVentaInv.TipoEstatus
EsDevolucionVenta = ObjVentaInv.EsDevolucionVenta
End If
ObjVentaInv.Dispose()
Dim VerificaCancelada As Boolean = True
If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso TipoDocto = "Ped" Then
VerificaCancelada = False
End If
If VerificaCancelada Then
If TipoEstatus = 5 Then
Alert("No se puede surtir esta venta, verifique que no esté cancelada", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
End If
If EsDevolucionVenta.Contiene(2, 3) Then
Alert("No se puede surtir esta venta, verifique que no esté registrado su movimiento en almacen", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim ValidaSeccion As Boolean = False : Dim ValidaCaducidad As Boolean = False : Dim ValidaLote As Boolean = False
'VALIDA CANTIDAD DE SALIDA
Dim Cantidad As Decimal = 0.0D
For Each Gvr As GridViewRow In GvDatos.Rows
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
If Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
Cantidad = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal
Exit For
End If
Next
ValidaSeccion = False
ValidaCaducidad = False
ValidaLote = False
If ValidaSeccion Then
Alert("La sección de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If ValidaCaducidad Then
Alert("La caducidad no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If ValidaLote Then
Alert("El lote de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If Not Cantidad > 0 Then
Alert("No se detecto ningun movimiento por hacer. Por favor verifique e intente nuevamente.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'PROCESO , si tiene proceso "176" no lo valida
If Not UsuarioActual.TienePermisoProceso(176) Then
For Each Gvr As GridViewRow In GvDatos.Rows
If Gvr.DataKey("CantidadF").ToDecimal <> Gvr.FCTextBox("TbCantidadF").Text.ToDecimal Then
Alert("En la factura no se han especificado todos los productos a entregar, favor de especificarlos para poder dar salida.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Next
End If
If EsDevolucionVenta = 1 Or TipoDocto.Contiene({"Ped"}) Then
If Not (EsDevolucionVenta = 1 And TipoDocto.Contiene("Rem", "Ped")) Then ' condicion si hay una devolucion de remision, no verifique la totalidad surtido
For Each Gvr As GridViewRow In GvDatos.Rows
If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString().ToDecimal) Then
Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
Next
End If
End If
Dim EsInterno As Integer = -1
'If TipoDocto = "Ped" Then
' EsInterno = If(Me.EsInterno, 1, 0)
'End If
Dim ObjInventario As New ClsInventarios
Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
Dim ObjVentas As New ClsVentas(ObjInventario.IniciaTransacSQL())
Dim ObjEventos As New ClsOIEventos(ObjInventario.IniciaTransacSQL())
Dim ObjAcumuladores As New ClsAcumuladores(ObjInventario.IniciaTransacSQL())
Dim ObjGeneral As New ClsGenerales(ObjInventario.IniciaTransacSQL())
Dim CveMovimiento As Integer
Dim Folio As Integer
Dim ErrorMovInv As Boolean
Dim DtDetalle As New DataTable
Dim DtDetalleLote As New DataTable
Dim TextoError As New StringBuilder
Dim CveMovimientoGarantia As Integer = -1
Dim FolioGarantia As Integer = -1
Dim CveMovimientoVirtual As Integer = -1
Dim FolioVirtual As Integer = -1
'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
Dim Index As Integer = 0
For Each gvr As GridViewRow In GvDatos.Rows
If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
DtDatos.Rows(Index)("CveSeccion") = gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero()
DtDatos.Rows(Index)("FechaCaducidad") = gvr.FCTextBox("TxtCaducidad").Text.ToDate
DtDatos.Rows(Index)("Lote") = gvr.FCTextBox("TxtLote").Text
End If
Index += 1
Next
'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA
Dim DtDatosVenta As New DataTable
If ObjInventario.EntregaAlmacenGet(CveVentaSurtir) Then
DtDatosVenta = ObjInventario.DtResultados
End If
Dim CantidadGV As Decimal = GvDatos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
If CantidadGV > DtDatosVenta.SUMD("CantidadF") Then
ObjInventario.RollBack()
ObjInventario.Dispose()
ObjConta.Dispose()
ObjVentas.Dispose()
ObjEventos.Dispose()
'' identificar que productos no están completos.
CargaVentaPorSurtir(CveVentaSurtir)
CargaPendientes()
Alert("Ha sido cambiada la informacion de existencias de la venta actual, se han recargado la información.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If Not ObjVentas.UpdateVentasDevolucionAlmacen(3, CveVentaSurtir) Then
ObjInventario.RollBack()
ObjInventario.Dispose()
ObjConta.Dispose()
ObjVentas.Dispose()
ObjEventos.Dispose()
Exit Sub
End If
Dim DtTraspasos As New DataTable
DtTraspasos.Columns.Add("CveAlmacen", GetType(Integer))
DtTraspasos.Columns.Add("Almacen", GetType(String))
DtTraspasos.Columns.Add("CveMovimientoSalida", GetType(Integer))
DtTraspasos.Columns.Add("FolioSalida", GetType(Integer))
DtTraspasos.Columns.Add("CveMovimientoEntrada", GetType(Integer))
DtTraspasos.Columns.Add("FolioEntrada", GetType(Integer))
DtTraspasos.Columns.Add("CveTipoAlmacen", GetType(Integer))
DtTraspasos.Columns.Add("CveConceptoMovimientoSalida", GetType(Integer))
Dim CveMovimientoSalida As Integer = -1, FolioSalida As Integer = -1, CveMovimientoEntrada As Integer = -1, CveMovimientoEntradaApartado As Integer = -1, FolioEntrada As Integer = -1, CveMovimientoSalidaDevRem As Integer = -1, FolioMovimientoSalidaDevRem As Integer = -1, CveMovimientoEntradaDevRem As Integer = -1, FolioMovimientoEntradaDevRem As Integer = -1
Dim DtDevSinCosto As New DataTable
DtDevSinCosto.Columns.Add("CveAlmacen", GetType(Integer))
DtDevSinCosto.Columns.Add("Almacen", GetType(String))
DtDevSinCosto.Columns.Add("CveMovimientoEntrada", GetType(Integer))
DtDevSinCosto.Columns.Add("FolioEntrada", GetType(Integer))
DtDevSinCosto.Columns.Add("CveTipoAlmacen", GetType(Integer))
DtDevSinCosto.Columns.Add("CveConceptoMovimientoSalida", GetType(Integer))
Try
'VALIDA EXISTENCIA 2
If TipoMovimiento = 1 Then
Dim StrXML As New StringBuilder
StrXML.Append("<conceptos>")
Dim FechaCaducidad As Date
Dim Lote As String = ""
For Each Dr As DataRow In DtDatos.Rows
FechaCaducidad = If(CBool(Dr("AplicaCaducidad")) AndAlso Dr("FechaCaducidad").ToString() <> "", Dr("FechaCaducidad").ToString().ToDate, MinFecha)
Lote = If(CBool(Dr("AplicaLote")), Dr("Lote").ToString().Trim, "-1")
If Dr("CantidadGV").ToString().ToDecimal > 0 Then
If CBool(Dr("AplicaSerie")) Then
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
For Each Dr1 As DataRow In DtDetalle.Rows
StrXML.AppendFormat("<concepto CvePS=""{0}"" CveUM=""{1}"" Cantidad= ""{2}"" CveSeccionAlmacen=""{3}"" Serie=""{4}"" Lote=""{5}"" FechaCaducidad=""{6}""></concepto>", Dr1("CvePS"), Dr1("CveUM"), 1, IfNull(Dr("CveSeccion"), -1), Dr1("Serie"), Lote, FechaCaducidad.ToString("yyyy/MM/dd"))
Next
Else
StrXML.AppendFormat("<concepto CvePS=""{0}"" CveUM=""{1}"" Cantidad= ""{2}"" CveSeccionAlmacen=""{3}"" Serie=""{4}"" Lote=""{5}"" FechaCaducidad=""{6}""></concepto>", Dr("CvePS"), Dr("CveUM"), Dr("CantidadGV"), IfNull(Dr("CveSeccion"), -1), "-1", Lote, FechaCaducidad.ToString("yyyy/MM/dd"))
End If
End If
Next
StrXML.Append("</conceptos>")
Dim TieneErrorExistencia As Boolean = False
If ObjInventario.GetExistenciasPSXML(StrXML.ToString(), DdlAlmacen.SelectedValue.ToEntero(), TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveSubProyecto, CveVendedor, If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), If(TipoEntrega = 2, 1, -1), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
If ObjInventario.DtResultados.Rows.Count > 0 Then
TieneErrorExistencia = True
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
TextoError.AppendFormat("<b> - {0}</b> Existencia: {1:#,##0.##} <br/>", Dr("CodigoPS"), Dr("Existencia"))
Next
End If
Else
TieneErrorExistencia = True
End If
If TieneErrorExistencia Then
ObjInventario.RollBack()
ObjInventario.Dispose()
ObjConta.Dispose()
ObjVentas.Dispose()
ObjEventos.Dispose()
If TextoError.Length > 0 Then
Alert($" Lo(s) siguiente(s) Productos <b>no tienen</b> existencia suficiente:<br/><br/>{TextoError}", TipoMensaje.MsgAdvertencia)
End If
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
End If
'' TERMINA: VALIDACIONES
Dim CantidadPendienteSinCosto As Decimal = 0
Dim CantidadSaldoSinCosto As Decimal = 0
Dim CantidadSalidaSinCosto As Decimal = 0
'' COMIENZA: SIN COSTO
If TipoDocto.Contiene("Ing", "Rem", "Ped") AndAlso UsuarioActual.Empresa.Funcionalidad(587) = "1" AndAlso TipoMovimiento = 1 Then
Dim CveConceptoSalidaSinCosto As Integer = If(TipoDocto.Contiene("Rem", "Ped"), 8, 40)
For Each Dr As DataRow In DtDatos.Rows
If Dr("CantidadGV").ToString().ToDecimal > 0 Then
If CBool(Dr("AplicaSerie")) Then
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
For Each Dr1 As DataRow In DtDetalle.Rows
If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Dr1("Serie").ToString(), CveTipoAlmacen:=26, CveSubProyecto:=CveSubProyecto, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then
For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero()
If Not CveMovimientoSalida > 0 Then
CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString().ToEntero(), CveConceptoSalidaSinCosto, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, Modulo:="RE/GSC1")
FolioSalida = ObjInventario.Folio
If Not CveMovimientoSalida > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dim DrMovto As DataRow = DtTraspasos.NewRow
DrMovto("Almacen") = Dr2("Almacen").ToString().ToEntero()
DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString().ToEntero()
DrMovto("CveMovimientoSalida") = CveMovimientoSalida
DrMovto("FolioSalida") = FolioSalida
DrMovto("CveTipoAlmacen") = 26
DrMovto("CveConceptoMovimientoSalida") = CveConceptoSalidaSinCosto
DtTraspasos.Rows.Add(DrMovto)
End If
CantidadPendienteSinCosto = 1
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendienteSinCosto, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, Serie:=Dr1("Serie").ToString(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un Error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString().ToDecimal + CantidadPendienteSinCosto
Exit For
Next
End If
If ErrorMovInv Then Exit For
Next
Else
If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString().ToEntero(), Dr("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=26, CveSubProyecto:=CveSubProyecto, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then
CantidadSaldoSinCosto = Dr("CantidadGV").ToString().ToDecimal
For Each Dr1 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr1("CveAlmacen")}").ToEntero()
If Not CveMovimientoSalida > 0 Then
CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString().ToEntero(), CveConceptoSalidaSinCosto, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, Modulo:="RE/GSC3")
FolioSalida = ObjInventario.Folio
If Not CveMovimientoSalida > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dim DrMovto As DataRow = DtTraspasos.NewRow
DrMovto("Almacen") = Dr1("Almacen").ToString().ToEntero()
DrMovto("CveAlmacen") = Dr1("CveAlmacen").ToString().ToEntero()
DrMovto("CveMovimientoSalida") = CveMovimientoSalida
DrMovto("FolioSalida") = FolioSalida
DrMovto("CveTipoAlmacen") = 26
DrMovto("CveConceptoMovimientoSalida") = CveConceptoSalidaSinCosto
DtTraspasos.Rows.Add(DrMovto)
End If
CantidadPendienteSinCosto = If(Dr1("ExistenciaFinal").ToString().ToDecimal > CantidadSaldoSinCosto, CantidadSaldoSinCosto, Dr1("ExistenciaFinal").ToString().ToDecimal)
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendienteSinCosto.ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0,
Serie:=Dr("Serie").ToString(),
CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(),
FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha),
Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"),
CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
CantidadSaldoSinCosto -= CantidadPendienteSinCosto
Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString().ToDecimal + CantidadPendienteSinCosto
If CantidadSaldoSinCosto <= 0 Then Exit For
Next
If ErrorMovInv Then Exit For
Else
ErrorMovInv = True
End If
End If
CantidadSalidaSinCosto += Dr("CantidadTraspaso").ToString().ToDecimal()
If ErrorMovInv Then Exit For
End If
Next
'ENTRADA POR TRASPASO A ENTREGA POR ADELANTADO
If TipoDocto.Contiene("Rem", "Ped") AndAlso Not ErrorMovInv Then
For Each Dr1 As DataRow In DtTraspasos.Select("CveTipoAlmacen = 26")
CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString().ToEntero()
Dim CveAlmacenExA As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=10).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero()
CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(CveAlmacenExA, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), CveMovimientoRelacionado:=CveMovimientoSalida,
Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4")
FolioEntrada = ObjInventario.Folio
If Not CveMovimientoEntradaApartado > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
Dr1("FolioEntrada") = FolioEntrada
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
Dim CveSeccionAlmacen As Integer = -1
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-3) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Next
End If
If ErrorMovInv Then Exit For
Next
End If
If Not ErrorMovInv AndAlso CveMovimientoSalida > 0 AndAlso TipoDocto.Contiene("Rem", "Ped") Then
Dim CvePrePolizaSinCosto As Integer = ObjConta.AddPrePolizas("EA/SinCost", 53, 0, 0, 1, TxtFecha.Text.ToDate, "Entrega", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePolizaSinCosto > 0 Then
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaSinCosto, True, 0, 0, 68, TxtObservaciones.Text, TxtObservaciones.Text, -1, -1, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=False) Then
ErrorMovInv = True
End If
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaSinCosto, False, 0, 0, 68, TxtObservaciones.Text, TxtObservaciones.Text, -1, -1, CveMovimientoAlmacen:=CveMovimientoEntradaApartado, Contabilizable:=False) Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
End If
If Not ErrorMovInv Then
For Each DrMovto As DataRow In DtTraspasos.FiltraParametros("CveConceptoMovimientoSalida = 40").Rows
ErrorMovInv = Not GenerarPrePoliza(ObjInventario, ObjVentas, ObjConta, DrMovto("CveMovimientoSalida").ToString().ToEntero(), TextoError)
If ErrorMovInv Then
Exit For
End If
Next
End If
''TERMINA: SIN COSTO
'' COMIENZA: APARTADOS
Dim CantidadPendiente As Decimal = 0
Dim CantidadSaldo As Decimal = 0
If Not ErrorMovInv AndAlso CveVendedor > 0 AndAlso (UsuarioActual.Empresa.Funcionalidad(146) = "1" Or CveCliente > 0) Then 'no debe considerar cuando es pedido de contrato
If TipoMovimiento = 1 Then ' SI ES DEVOLUCION NO APLICA APARTADO
' SALIDA POR TRASPASO DE LOS ALMACENES DE APARTADO
For Each Dr As DataRow In DtDatos.Rows
If Dr("CantidadGV").ToString().ToDecimal > 0 Then
If CBool(Dr("AplicaSerie")) Then
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
For Each Dr1 As DataRow In DtDetalle.Rows
If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Dr1("Serie").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-1) Then
Dim CveSeccionAlmacen As Integer = 0
For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero()
If Not CveMovimientoSalida > 0 Then
CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString().ToEntero(), 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente),
CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G1")
FolioSalida = ObjInventario.Folio
If Not CveMovimientoSalida > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dim DrMovto As DataRow = DtTraspasos.NewRow
DrMovto("Almacen") = Dr2("Almacen").ToString().ToEntero()
DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString().ToEntero()
DrMovto("CveMovimientoSalida") = CveMovimientoSalida
DrMovto("FolioSalida") = FolioSalida
DrMovto("CveTipoAlmacen") = 9
DrMovto("CveConceptoMovimientoSalida") = 8
DtTraspasos.Rows.Add(DrMovto)
End If
CantidadPendiente = 1
CveSeccionAlmacen = -3
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, Serie:=Dr1("Serie").ToString(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=CveSeccionAlmacen) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un Error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString().ToDecimal + CantidadPendiente
Exit For
Next
End If
If ErrorMovInv Then Exit For
Next
ElseIf CBool(Dr("AplicaLote")) Then
DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
For Each Dr1 As DataRow In DtDetalle.Rows
If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), CveSeccionAlmacen:=-1) Then
CantidadSaldo = Dr("CantidadGV").ToString().ToDecimal
For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr2("CveAlmacen")}").ToEntero()
If Not CveMovimientoSalida > 0 Then
CveMovimientoSalida = ObjInventario.AddMovimiento(Dr2("CveAlmacen").ToString().ToEntero(), 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim,
Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente),
CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G2")
FolioSalida = ObjInventario.Folio
If Not CveMovimientoSalida > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dim DrMovto As DataRow = DtTraspasos.NewRow
DrMovto("Almacen") = Dr2("Almacen").ToString().ToEntero()
DrMovto("CveAlmacen") = Dr2("CveAlmacen").ToString().ToEntero()
DrMovto("CveMovimientoSalida") = CveMovimientoSalida
DrMovto("FolioSalida") = FolioSalida
DrMovto("CveTipoAlmacen") = 9
DrMovto("CveConceptoMovimientoSalida") = 8
DtTraspasos.Rows.Add(DrMovto)
End If
CantidadPendiente = If(Dr1("Cantidad").ToString().ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("Cantidad").ToString().ToDecimal)
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, Lote:=Dr1("Lote").ToString(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("FueTraspaso") = 1
DtDatosDetalle.Select($"Consec = {Dr1("Consec")}")(0)("CveVentaDetalle") = Dr("CveVentaDetalle")
CantidadSaldo -= CantidadPendiente
Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString().ToDecimal + CantidadPendiente
If CantidadSaldo <= 0 Then Exit For
Next
End If
Next
Else
If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString().ToEntero(), Dr("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-1) Then
CantidadSaldo = Dr("CantidadGV").ToString().ToDecimal
For Each Dr1 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows
'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO
CveMovimientoSalida = DtTraspasos.FiltroPrimeroValor("CveMovimientoSalida", $"CveAlmacen = {Dr1("CveAlmacen")}").ToEntero()
If Not CveMovimientoSalida > 0 Then
CveMovimientoSalida = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString().ToEntero(), 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor,
CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G3")
FolioSalida = ObjInventario.Folio
If Not CveMovimientoSalida > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dim DrMovto As DataRow = DtTraspasos.NewRow
DrMovto("Almacen") = Dr1("Almacen").ToString().ToEntero()
DrMovto("CveAlmacen") = Dr1("CveAlmacen").ToString().ToEntero()
DrMovto("CveMovimientoSalida") = CveMovimientoSalida
DrMovto("FolioSalida") = FolioSalida
DrMovto("CveTipoAlmacen") = 9
DrMovto("CveConceptoMovimientoSalida") = 8
DtTraspasos.Rows.Add(DrMovto)
End If
CantidadPendiente = If(Dr1("ExistenciaFinal").ToString().ToDecimal > CantidadSaldo, CantidadSaldo, Dr1("ExistenciaFinal").ToString().ToDecimal)
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0,
Serie:=Dr("Serie").ToString(),
CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(),
FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha),
Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"),
CveSeccionAlmacen:=-3) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
CantidadSaldo -= CantidadPendiente
Dr("CantidadTraspaso") = Dr("CantidadTraspaso").ToString().ToDecimal + CantidadPendiente
If CantidadSaldo <= 0 Then Exit For
Next
If ErrorMovInv Then Exit For
Else
ErrorMovInv = True
End If
End If
If ErrorMovInv Then Exit For
End If
Next
'ENTRADA POR TRASPASO AL ALMACEN GENERAL
If Not ErrorMovInv Then
For Each Dr1 As DataRow In DtTraspasos.Select("CveTipoAlmacen = 9")
CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString().ToEntero()
CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), CveMovimientoRelacionado:=CveMovimientoSalida,
Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4")
FolioEntrada = ObjInventario.Folio
If Not CveMovimientoEntradaApartado > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
Dr1("FolioEntrada") = FolioEntrada
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-3) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Next
End If
If ErrorMovInv Then Exit For
Next
End If
End If
End If
'' TERMINA: APARTADOS
Dim TotalGarantia As Decimal = 0
' COMIENZA: GARANTIAS
If Not ErrorMovInv AndAlso TipoDocto.Contiene("Ing", "Rem", "Ped") AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso TipoMovimiento = 1 Then
Dim CveAlmacenGarantia As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=6).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero()
Dim DtGarantias As DataTable = Nothing
If ObjAcumuladores.GetGarantiasDetalle(CveVentaSurtir) Then
DtGarantias = ObjAcumuladores.DtResultados.Copy()
End If
If DtGarantias IsNot Nothing AndAlso DtGarantias.Rows.Count > 0 AndAlso CveAlmacenGarantia > 0 Then
CveMovimientoGarantia = ObjInventario.AddMovimiento(CveAlmacenGarantia, 14, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, Modulo:="EA/G5")
FolioGarantia = ObjInventario.Folio
For Each RowGarantia As DataRow In DtGarantias.Rows
Dim CvePS As Integer = RowGarantia("CvePS").ToString().ToEntero()
Dim CveTamaño As Integer = RowGarantia("CveTamaño").ToString().ToEntero()
Dim CveUM As Integer = RowGarantia("CveUnidadMedida").ToString().ToEntero()
Dim PU As Decimal = 0 'valor cero, por tema contable 'RowGarantia("Importe").ToString().ToDecimal() ' / RowGarantia("Cantidad").ToString().ToDouble()
Dim Serie As String = RowGarantia("Comprobante").ToString
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoGarantia, RowGarantia("Cantidad").ToString().ToDecimal, CveUM, CvePS, PU, Serie:=Serie, CveVentaDetalle:=IIf(RowGarantia("MismoCvePS").ToString = "1", RowGarantia("CveVentaDetalle"), -1).ToString.ToEntero) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
TotalGarantia += (RowGarantia("Cantidad").ToString().ToDecimal() * PU)
Next
''se registra
'If ContabilizaMovimientoAlmacen(ObjConta, TxtFecha.Text.ToDate, HLFolio.Text, "EntregaAlmacen", -1, CveMovimientoGarantia, TotalGarantia, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, True) <= 0 Then
' ErrorMovInv = True
'End If
Dim CvePrePolizaTraspaso As Integer = ObjConta.AddPrePolizas("EA/Gar", 53, 0, 0, 1, TxtFecha.Text.ToDate, "Entrada Garantía", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePolizaTraspaso > 0 Then
Dim TotalGarantiaValor As Decimal = 0 ' el valor en almacen es cero, por tema contable
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, False, TotalGarantiaValor, TotalGarantia, 68, TxtObservaciones.Text, TxtObservaciones.Text, CveMovimientoAlmacen:=CveMovimientoGarantia, Contabilizable:=False) Then
ErrorMovInv = True
End If
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, True, TotalGarantiaValor, TotalGarantia, 331, TxtObservaciones.Text, TxtObservaciones.Text, CveMovimientoAlmacen:=CveMovimientoGarantia, Contabilizable:=False) Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
End If
End If
' TERMINA: GARANTIAS
'DEVOLUCION DE SIN COSTO
Dim CantidadEntradaSinCosto As Decimal = 0
If Not ErrorMovInv AndAlso TipoMovimiento = 2 AndAlso UsuarioActual.Empresa.Funcionalidad(587) = "1" Then
For Each Dr1 As DataRow In DtExistencias.FiltraParametros("CveTipoAlmacenDevolucion = 26").Rows
Dim CveMovimientoSalidaSinCosto As Integer = Dr1("CveMovimiento").ToString().ToEntero()
'Dim CveAlmacenSinCosto As Integer = Dr1("CveAlmacenDevolucion").ToString().ToEntero()
'Dim AlmacenSinCosto As String = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=26).FiltroPrimeroValor("Almacen", $"CveAlmacen={CveAlmacenSinCosto}").ToString()
Dim CveMovimientoDevolucionSinCosto As Integer = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero(), 41, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), CveMovimientoRelacionado:=CveMovimientoSalida,
Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente, Modulo:="RE/G4")
Dim FolioDevSinCosto As Integer = ObjInventario.Folio
If Not CveMovimientoDevolucionSinCosto > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaSinCosto, UsuarioActual.CveEmpresa) Then
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
CantidadEntradaSinCosto += Dr("Cantidad").ToString().ToDecimal()
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucionSinCosto, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Next
End If
If ErrorMovInv Then Exit For
Dim DrMovto As DataRow = DtDevSinCosto.NewRow
DrMovto("Almacen") = DdlAlmacen.SelectedItem.Text
DrMovto("CveAlmacen") = DdlAlmacen.SelectedValue.ToEntero()
DrMovto("CveMovimientoEntrada") = CveMovimientoDevolucionSinCosto
DrMovto("FolioEntrada") = FolioDevSinCosto
DrMovto("CveTipoAlmacen") = 10
DrMovto("CveConceptoMovimientoSalida") = 41
DtDevSinCosto.Rows.Add(DrMovto)
If Not ErrorMovInv Then
ErrorMovInv = Not GenerarPrePoliza(ObjInventario, ObjVentas, ObjConta, CveMovimientoDevolucionSinCosto, TextoError)
End If
Next
End If
Dim CantidadPendientePorSalir As Decimal = DtDatos.SUM("CantidadGV")
If TipoMovimiento = 1 Then
CantidadPendientePorSalir = CantidadPendientePorSalir - CantidadSalidaSinCosto
ElseIf TipoMovimiento = 2 Then
CantidadPendientePorSalir = CantidadPendientePorSalir - CantidadEntradaSinCosto
End If
'si el alamcen del que salio, es el mismo que entra, no hay traspasos.
If CveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero() And TipoDocto <> "Rem" And TipoDocto <> "Ped" Then CveAlmacenTraspasoDestino = 0
If Not ErrorMovInv AndAlso CantidadPendientePorSalir > 0 Then
Dim ConceptoMovimiento As Integer = 3
ConceptoMovimiento = If(TipoMovimiento = 1, ConceptoMovimiento, 18)
ConceptoMovimiento = If(CveAlmacenTraspasoDestino > 0, 8, ConceptoMovimiento)
Dim Almacen1 As Integer = DdlAlmacen.SelectedValue.ToEntero()
Dim tCveAlmacenTraspasoDestino As Integer = CveAlmacenTraspasoDestino
If TipoDocto.Contiene("Rem", "Ped") AndAlso tCveAlmacenTraspasoDestino = 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error. no se tiene definido el almacen destino")
End If
'DEVOLUCION REMISION
If TipoMovimiento = 2 And TipoDocto.Contiene("Rem", "Ped") Then
ConceptoMovimiento = 8
Almacen1 = CveAlmacenTraspasoDestino
tCveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero()
End If
'CANCELACION DE DEVOLUCION
If TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1 Then
ConceptoMovimiento = 3
Almacen1 = DdlAlmacen.SelectedValue.ToEntero()
tCveAlmacenTraspasoDestino = DdlAlmacen.SelectedValue.ToEntero()
End If
'DEVOLUCION DIRECTA A ENTREGA POR ADELANTADO
If TipoMovimiento = 2 And ConceptoMovimiento = 18 AndAlso EsDevolucionDirecta Then
ConceptoMovimiento = 41
End If
CveMovimiento = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text,
CveContrato:=CveContrato, CveAlmacenDestino:=tCveAlmacenTraspasoDestino, Modulo:="RE/G7")
Folio = ObjInventario.Folio
'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN)
'If Not (CveContrato > 0 And CveAlmacenTraspasoDestino > 0) Then
If CveMovimiento > 0 Then
'SACA LO DE TRASPASOS - APARTADO
For Each Dr1 As DataRow In DtTraspasos.Select("CveTipoAlmacen = 9")
CveMovimientoSalida = Dr1("CveMovimientoEntrada").ToString().ToEntero()
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
If ObjInventario.DtResultados.Rows.Count = 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error, no se tienen registros que ingresar")
Exit Sub
End If
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-3, EsInterno:=EsInterno) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Next
Else
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al obtener los registros")
End If
If ErrorMovInv Then Exit For
Next
'ES EL MOVIMIENTO PRINCIPAL
CantidadPendiente = 0
Dim Cont As Integer = 0
For Each Dr As DataRow In DtDatos.Rows
CantidadPendiente = Dr("CantidadGV").ToString().ToDecimal - Dr("CantidadTraspaso").ToString().ToDecimal - CantidadEntradaSinCosto
If CantidadPendiente > 0 Then
Dim PU As Decimal = 0
Dim CveSeccionAlmacen As Integer = If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)
'SI FUE POR SERIE
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
DtDetalleLote = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
If DtDetalle.Rows.Count > 0 Then
For Each Dr1 As DataRow In DtDetalle.Rows
If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
'CveSeccionAlmacen = DtExistencias.FiltroPrimeroValor("CveSeccionAlmacen", $"ISNULL(CveTipoAlmacenDevolucion,0) <> 26 AND CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString().ToEntero()} AND Serie = '{Dr1("Serie").ToString()}'").ToString().ToEntero
PU = DtExistencias.FiltroPrimeroValor("PU", $"ISNULL(CveTipoAlmacenDevolucion,-1) <> 26 AND CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString().ToEntero()} AND Serie = '{Dr1("Serie").ToString()}'").ToString().ToDecimal
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, 1, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), PU, Serie:=Dr1("Serie").ToString(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), CveVentaDetalleRemision:=Dr("CveVentaDetalleRemision").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-3) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar.")
Exit For
End If
Next
ElseIf DtDetalleLote.Rows.Count > 0 Then
For Each Dr1 As DataRow In DtDetalleLote.Rows
If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
'CveSeccionAlmacen = DtExistencias.FiltroPrimeroValor("CveSeccionAlmacen", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString().ToEntero()} AND Serie = '{Dr1("Serie").ToString()}'").ToString().ToEntero
PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString().ToEntero()} AND Serie = '{Dr1("Serie").ToString()}'").ToString().ToDecimal
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr1("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), PU, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), CveVentaDetalleRemision:=Dr("CveVentaDetalleRemision").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-3) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar.")
Exit For
End If
Next
Else
If TipoMovimiento = 2 AndAlso DtExistencias IsNot Nothing Then
PU = DtExistencias.FiltroPrimeroValor("PU", $"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString().ToEntero()}").ToString().ToDecimal
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, CantidadPendiente, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), PU, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), CveVentaDetalleRemision:=Dr("CveVentaDetalleRemision").ToString().ToEntero(), FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-3) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar.")
Exit For
End If
End If
'If ObjInventario.CveMovimientoDetalle > 0 AndAlso DtSeccionAlmacen.Rows.Count > 0 Then
' For Each Dr2 As DataRow In DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {Cont}").Rows
' If Not ObjInventario.AddMovimientosDetalleSeccionesAlmacen(ObjInventario.CveMovimientoDetalle, Dr2("CveSeccionAlmacen").ToString().ToEntero(), -Dr2("CantidadSeccionAlmacen").ToString().ToDecimal) Then
' ErrorMovInv = True
' TextoError = "Ocurrió un error al procesar las secciones de almacen. Por favor vuelva a intentar."
' Exit For
' End If
' Next
'End If
Cont += 1
End If
Next
Else
ErrorMovInv = True
End If
'ENTRADA POR TRASPASO CUANDO ES REMISION
If Not ErrorMovInv Then
If tCveAlmacenTraspasoDestino > 0 AndAlso Not (TipoMovimiento = 2 And TipoDocto = "Dev" And EsDevolucionVenta = 1) Then ' TRASPASO CUANDO ES REMISION
CveMovimientoEntrada = ObjInventario.AddMovimiento(tCveAlmacenTraspasoDestino, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato,
CveMovimientoRelacionado:=CveMovimiento, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(), Modulo:="RE/G8")
FolioEntrada = ObjInventario.Folio
Dim ImporteAlmacen As Decimal = 0
If CveMovimientoEntrada <= 0 Then
TextoError.AppendFormat("No se pudo generar el movimiento de entrada correctamente")
ErrorMovInv = True
Else
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then
ImporteAlmacen = ObjInventario.DtResultados.SUMD("Total").RoundSQL
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), CveSeccionAlmacen:=-3, Serie:=Dr("Serie").ToString(), Lote:=Dr("Lote").ToString(), FechaCaducidad:=Dr("FechaCaducidad").ToString().ToDate, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), EsInterno:=EsInterno, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero()) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de entrada")
Exit For
End If
Next
Else
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de entrada")
End If
End If
'se registra
If Not ErrorMovInv Then
If ContabilizaMovimientoAlmacen(ObjConta, TxtFecha.Text.ToDate, HLFolio.Text, "EntregaAlmacen", CveMovimiento, CveMovimientoEntrada, ImporteAlmacen, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False) <= 0 Then
ErrorMovInv = True
End If
End If
Else 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN - SALIDA ALMACEN
ErrorMovInv = Not GenerarPrePoliza(ObjInventario, ObjVentas, ObjConta, CveMovimiento, TextoError)
End If
End If
End If
'DEVOLUCION APARTADOS
If Not ErrorMovInv Then
If TipoMovimiento = 2 Then
If ObjInventario.VentasAlmacenApartadosGet(CveVentaSurtir) Then
Dim DtTempApartados As DataTable = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 9", "CveAlmacen")
Dim CveMovimientoSalidaApartado As Integer = -1
Dim CveAlmacenApartado As Integer = -1
Dim CveAlmacenOrigen As Integer = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero())
Dim CveSeccionAlmacen As Integer = 0
Dim ValorTraspaso As Decimal = 0
If DtTempApartados IsNot Nothing AndAlso DtTempApartados.Rows.Count > 0 Then
For Each Dr As DataRow In DtTempApartados.Rows
If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString().ToEntero() Then
CveMovimientoSalidaApartado = ObjInventario.AddMovimiento(CveAlmacenOrigen, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor, CveCliente:=CveCliente,
CveAlmacenDestino:=Dr("CveAlmacen").ToString().ToEntero(), Modulo:="RE/G9")
FolioSalida = ObjInventario.Folio
CveAlmacenApartado = Dr("CveAlmacen").ToString().ToEntero()
Dim DrMovto As DataRow = DtTraspasos.NewRow
DrMovto("Almacen") = Dr("Almacen").ToString().ToEntero()
DrMovto("CveAlmacen") = Dr("CveAlmacen").ToString().ToEntero()
DrMovto("CveMovimientoSalida") = CveMovimientoSalidaApartado
DrMovto("FolioSalida") = FolioSalida
DtTraspasos.Rows.Add(DrMovto)
End If
If Not CveMovimientoSalidaApartado > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados")
Exit For
End If
'If CBool(Dr("AplicaSeccion")) Then
' CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, CveAlmacenOrigen, Dr("CvePS").ToString().ToEntero()).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero()
' Dim a As String = String.Format("CveAlmacen={0}-CvePS:{1}-CveseccionAlmacen={2}", CveAlmacenOrigen, Dr("CvePS"), CveSeccionAlmacen)
'Else
' CveSeccionAlmacen = -1
'End If
CveSeccionAlmacen = -3
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), Lote:=Dr("Lote").ToString(), CveSeccionAlmacen:=CveSeccionAlmacen) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados")
Exit For
End If
Next
If Not ErrorMovInv Then
Dim CvePrePolizaTraspaso As Integer = ObjConta.AddPrePolizas("EA/Apart", 53, 0, 0, 1, TxtFecha.Text.ToDate, "Traspaso Apartado", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePolizaTraspaso > 0 Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, True, ValorTraspaso, ValorTraspaso, 68, TxtObservaciones.Text, TxtObservaciones.Text, CveMovimientoAlmacen:=CveMovimientoSalidaApartado, Contabilizable:=False) Then
ErrorMovInv = True
End If
For Each Dr1 As DataRow In DtTraspasos.Rows
CveMovimientoSalida = Dr1("CveMovimientoSalida").ToString().ToEntero()
CveMovimientoEntradaApartado = ObjInventario.AddMovimiento(Dr1("CveAlmacen").ToString().ToEntero(), 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa,
-1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir, Observaciones:=TxtObservaciones.Text.Trim, CveAlmacenDestino:=DdlAlmacen.SelectedValue.ToEntero(),
CveMovimientoRelacionado:=CveMovimientoSalida, Guia:=TxtGuia.Text, CveContrato:=CveContrato, CveVendedor:=CveVendedor,
CveCliente:=CveCliente, Modulo:="RE/G10")
FolioEntrada = ObjInventario.Folio
If Not CveMovimientoEntradaApartado > 0 Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los movimientos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Dr1("CveMovimientoEntrada") = CveMovimientoEntradaApartado
Dr1("FolioEntrada") = FolioEntrada
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
ValorTraspaso = ObjInventario.DtResultados.SUMD("Total").RoundSQL
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
CveSeccionAlmacen = -3
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), Lote:=Dr("Lote").ToString(), CveSeccionAlmacen:=CveSeccionAlmacen) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
Next
End If
If ErrorMovInv Then Exit For
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, False, ValorTraspaso, ValorTraspaso, 68, TxtObservaciones.Text, TxtObservaciones.Text, CveMovimientoAlmacen:=CveMovimientoEntradaApartado, Contabilizable:=False) Then
ErrorMovInv = True
End If
Next
Else
ErrorMovInv = True
End If
End If
End If
End If
End If
End If
'QUEMAR REMISIONES
If Not ErrorMovInv And EsDevolucionVenta = 1 And TipoDocto = "Ing" Then
Dim DtDevRem As New DataTable
'CARGA REMISIONES DE LA VENTA DEVUELTA
If ObjInventario.GetDevolucionRemisionesFacturadas(CveVentaSurtir) Then
DtDevRem = ObjInventario.DtResultados.FiltraParametros("CantidadAlmacen = 0")
Else
ErrorMovInv = True
End If
If Not ErrorMovInv Then
If DtDevRem.Rows.Count > 0 Then
For Each DrMovtos As DataRow In DtDevRem.FiltraParametros("", "CveRem", {"CveRem"}).Rows
If Not ObjInventario.ActualizarEsDevolucionVenta(DrMovtos("CveRem").ToString().ToEntero(), 2) Then
TextoError.AppendFormat("Ocurrió un error al hacer la devolución hacia la remision. Por favor vuelva a intentar.")
ErrorMovInv = True
Exit For
End If
Next
End If
Else
TextoError.AppendFormat("Ocurrió un error al hacer la devolucion a remisión. Por favor vuelva a intentar.")
ErrorMovInv = True
End If
End If
'QUEMA DEVOLUCION | QUEMA = LA QUITA DE PENDIENTE POR RECIBIR (DEVOLVER)
If Not ErrorMovInv And EsDevolucionVenta = 1 Then
If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then
TextoError.AppendFormat("Ocurrió un error al hacer la devolución. Por favor vuelva a intentar.")
ErrorMovInv = True
End If
End If
If Not ErrorMovInv And EsDevolucionVenta = 0 Then
If Not ObjVentas.UpdateVentasDevolucionAlmacen(0, CveVentaSurtir) Then
TextoError.AppendFormat("Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar.")
ErrorMovInv = True
End If
End If
Dim TotalVirtual As Decimal = 0
' COMIENZA: VIRTUAL
If Not ErrorMovInv AndAlso TipoDocto.Contiene("Ing", "Dev") AndAlso UsuarioActual.Empresa.Funcionalidad(573) = "1" AndAlso CveMovimiento > 0 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
If ObjInventario.GetMovimientosDetalleVirtual(CveMovimiento, UsuarioActual.CveEmpresa) Then
DtPSVirtual = ObjInventario.DtResultados
End If
'
'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 DtTamanios As DataTable = Nothing
'If ObjAcumuladores.TamañoGet(-1, UsuarioActual.CveEmpresa) Then
' DtTamanios = ObjAcumuladores.DtResultados.Copy()
'End If
Dim CveConceptoMovimientoVirtual As Integer = -1
Dim CveAlmacenVirtual As Integer = -1
Dim CveMovimientoRelacionadoVirtual As Integer = CveMovimiento
Dim ValidaVirtual As Boolean = False
CveAlmacenVirtual = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=tCveAlmacen).FiltroPrimeroValor("CveAlmacenVirtual").ToEntero()
If TipoMovimiento = 1 Then
CveConceptoMovimientoVirtual = 37
ElseIf TipoMovimiento = 2 Then
ValidaVirtual = True
CveConceptoMovimientoVirtual = 36
End If
'SI NO TIENE ALMACEN VIRTUAL ASIGNADO NO GENERA EL MOVIMIENTO VIRTUAL
If CveAlmacenVirtual <= 0 Then
ValidaVirtual = False
End If
'SI NO APLICA VIRTUAL EN LOS PRODUCTOS NO VALIDA
If CveAlmacenVirtual > 0 AndAlso DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count = 0 Then
ValidaVirtual = False
End If
If DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 AndAlso CveAlmacenVirtual > 0 AndAlso CveConceptoMovimientoVirtual > 0 Then
CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, CveConceptoMovimientoVirtual, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVentaSurtir, -1, -1, CveOS:=CveOSSurtir,
Observaciones:=TxtObservaciones.Text.Trim, Guia:=TxtGuia.Text, CveMovimientoRelacionado:=CveMovimientoRelacionadoVirtual, Modulo:="RE/G6")
FolioVirtual = ObjInventario.Folio
If CveMovimientoVirtual > 0 Then
Dim TmpDTDetalleFactura As DataTable = Nothing
If ObjVentas.GetVentaDetalle(CveVentaSurtir) Then
TmpDTDetalleFactura = ObjVentas.DtResultados.Copy()
End If
For Each RowUsado As DataRow In DtPSVirtual.Rows
Dim CvePS As Integer = 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()
Dim CveVentaDetalle As Integer = -1
If TmpDTDetalleFactura IsNot Nothing Then
CveVentaDetalle = TmpDTDetalleFactura.FiltroPrimeroValor("CveVentaDetalle", $"Cantidad = {RowUsado("Cantidad")} AND CvePS = {RowUsado("CvePS")}").ToEntero()
If CveVentaDetalle <= 0 Then
CveVentaDetalle = -1
End If
End If
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, CveVentaDetalle:=CveVentaDetalle) Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.")
Exit For
End If
TotalVirtual += (CantidadUsado * PU)
Next
'insertar en prepóliza de la salida virtual
If Not ErrorMovInv Then
ErrorMovInv = Not GenerarPrePoliza(ObjInventario, ObjVentas, ObjConta, CveMovimientoVirtual, TextoError)
End If
Else
ErrorMovInv = True
End If
Else
If ValidaVirtual Then
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un error al procesar el movimiento en almacen virtual. Por favor vuelva a intentar.")
End If
End If
If DtPSVirtual.Rows.Count = 0 AndAlso ValidaVirtual = True Then
ErrorMovInv = True
TextoError.AppendFormat("No se tienen productos para el almacen virtual.")
End If
End If
' TERMINA: VIRTUAL
'AGREGA BITACORA A VENTA
If Not ErrorMovInv Then
Dim MensajeBitacora As String = If(TipoMovimiento = 1, "Surtida", "Devuelta")
Dim LigaVenta As String = String.Format("Venta {2} en Folio: <a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a>", CveMovimiento, Folio, MensajeBitacora)
If Not ObjEventos.AddEventoBitacora(LigaVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaSurtir, CveOS:=CveOSSurtir) Then
ErrorMovInv = True
End If
End If
'Paqueterias guias
If RbEntregaInterna.Checked AndAlso Not ErrorMovInv Then
Dim CveEstatus As Integer = 1 ' DdlEstatus.SelectedValue.ToEntero()
Dim Fecha As String = NowADS().ToString() 'TxtFechaPaqInterna.Text
Dim FechaEstimada As String = "-1" 'If(TxtFechaEstimada.Text = "", "-1", TxtFechaEstimada.Text)
Dim NoCajas As Integer = 0 'TxtNoCajas.Text.ToEntero()
Dim Observaciones As String = "" 'TxtObservacionesPaqInterna.Text
Dim CvePaqueteria As Integer = GlobalDTPaqueterias(UsuarioActual.CveEmpresa, 0).FiltroPrimeroValor("CvePaqueteria", "").ToEntero()
If CveSubProyecto > 0 Then
Dim CvePaqueteriaGuia As Integer = ObjGeneral.AddPaqueteriasGuias(CvePaqueteria, 9, CveEstatus, CveSubProyecto, Fecha, "", "", NoCajas, 0.00, "-1", FechaEstimada, Observaciones, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, EsEntregaInterna:=True)
If CvePaqueteriaGuia > 0 Then
If CveVentaSurtir > 0 OrElse CveSubProyecto > 0 Then
If Not ObjGeneral.AddPaqueteriasGuiasDetalles(CvePaqueteriaGuia, CveVentaSurtir, -1, CveMovimientoSalida, -1) Then
''manda correo
ErrorMovInv = True
End If
End If
If ErrorMovInv Then
Alert("Error en el paqueteria guia detalle", TipoMensaje.MsgError)
End If
Else
ErrorMovInv = True
Alert("Error en el paqueteria guia", TipoMensaje.MsgError)
End If
Else
Alert("Hace falta indicar un Sub Proyecto", TipoMensaje.MsgAdvertencia)
ErrorMovInv = True
End If
ElseIf RbSinEntrega.Checked AndAlso Not ErrorMovInv Then
MandaCorreoEntrega(CveVentaSurtir)
End If
Catch ex As Exception
ErrorMovInv = True
OnError("Ocurrió un error al guardar", ex)
End Try
If EsDevolucionVenta = 1 AndAlso CveOSSurtir > 0 AndAlso TipoMovimiento = 2 AndAlso TipoDocto = "Ped" Then
If Not CierreOS(CveOSSurtir, CveMovimiento, ObjInventario.IniciaTransacSQL) Then
ErrorMovInv = True
Alert("Error al finalizar orden de servicio", TipoMensaje.MsgError)
End If
End If
If Not ErrorMovInv Then
ObjInventario.Commit()
ObjGeneral.Dispose()
RegistraScript("playsonidito('beep-07.wav')")
Dim Msg As New StringBuilder
Msg.AppendFormat("Movimiento {2}: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a></b>", CveMovimiento, Folio, If(TipoMovimiento = 1, "Salida", "Entrada"))
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 CveMovimientoEntrada > 0 Then
Msg.AppendFormat("<br/><br/> Movimiento Entrada (Traspaso): <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a></b>", CveMovimientoEntrada, FolioEntrada)
Msg.AppendFormat("<br/> <a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada)))
End If
If DtTraspasos.FiltraParametros("CveTipoAlmacen=9").Rows.Count > 0 Then
Msg.AppendFormat("<br/><br/> Movimientos de Control (Apartados):")
For Each Dr As DataRow In DtTraspasos.Rows
Msg.AppendFormat("<br/>Almacén {0} | Salida por Traspaso: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={1}"" target=""_blank"">{2}</a></b> | Entrada por Traspaso: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={3}"" target=""_blank"">{4}</a></b> ", Dr("Almacen"), Dr("CveMovimientoSalida"), Dr("FolioSalida"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada"))
Next
End If
If DtTraspasos.FiltraParametros("CveTipoAlmacen=26").Rows.Count > 0 Then
Msg.AppendFormat("<br/><br/> Movimientos de Control (Sin Costo):")
For Each Dr As DataRow In DtTraspasos.FiltraParametros("CveConceptoMovimientoSalida=40").Rows
Msg.AppendFormat("<br/>Almacén {0} | Salida directa de almacen: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={1}"" target=""_blank"">{2}</a></b> ", Dr("Almacen"), Dr("CveMovimientoSalida"), Dr("FolioSalida"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada"))
Next
For Each Dr As DataRow In DtTraspasos.FiltraParametros("CveConceptoMovimientoSalida=8").Rows
Msg.AppendFormat("<br/>Almacén {0} | Salida por Traspaso: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={1}"" target=""_blank"">{2}</a></b> ", Dr("Almacen"), Dr("CveMovimientoSalida"), Dr("FolioSalida"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada"))
Next
End If
If DtDevSinCosto.Rows.Count > 0 Then
Msg.AppendFormat("<br/><br/> Movimientos de Control (Sin Costo):")
For Each Dr As DataRow In DtDevSinCosto.Rows
Msg.AppendFormat("<br/>Almacén {0} | Devolución directa de almacen: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={1}"" target=""_blank"">{2}</a></b> ", Dr("Almacen"), Dr("CveMovimientoEntrada"), Dr("FolioEntrada"))
Next
End If
If CveMovimientoGarantia > 0 Then
Msg.AppendFormat("<br/>Movimiento de Entrada (garantías): <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a></b>", CveMovimientoGarantia, FolioGarantia)
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoGarantia)))
End If
If CveMovimientoVirtual > 0 Then
Msg.AppendFormat("<br/><br/> {0} Almacen Virtual: ", If(TipoMovimiento = 1, "Salida", "Entrada"))
Msg.AppendFormat("<b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a></b>", CveMovimientoVirtual, FolioVirtual)
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
If RbEntregaInterna.Checked Then
Msg.AppendFormat("<br/><br/>Se agregó una guía de paquetería interna")
End If
'SI NO ES GARANTIA MANDA A RECIBIR AL USADO
If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso TipoDocto.Contiene("Rem", "Ped") AndAlso CveMovimientoGarantia <= 0 Then
Msg.AppendFormat("<br/><br/>Recibir Usado: <b><a href=""/Inventarios/RecepcionUsados.aspx?CveRemision={0}"" target=""_blank"" class=""Texto"">Ir a Recepción de Usados</a></b>", CveVentaSurtir)
End If
Alert(Msg.ToString(), TipoMensaje.MsgInformacion)
Limpia()
CargaPendientes()
LimpiaCampos()
CargaBitacora = False
Else
ObjInventario.RollBack()
Alert(TextoError.ToString(), TipoMensaje.MsgError)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
End If
ObjAcumuladores.Dispose()
ObjInventario.Dispose()
ObjConta.Dispose()
ObjVentas.Dispose()
ObjEventos.Dispose()
End Sub
Private Function GenerarPrePoliza(ByRef ObjInventario As ClsInventarios, ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, CveMovimiento As Integer, ByRef TextoError As StringBuilder) As Boolean
Dim ErrorMovInv As Boolean = False
Dim DtCostos As DataTable = Nothing
Dim ValorInventario As Decimal = 0
If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then
DtCostos = ObjInventario.DtResultados
Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
If tmpCostos.Rows.Count > 0 Then
If ObjVentas.GetVenta(CveVentaSurtir, UsuarioActual.CveEmpresa, False) Then
Dim Fecha As Date = TxtFecha.Text.ToDate ' If(TipoMovimiento <> 1, TxtFecha.Text.ToDate, ObjVentas.DtResultados(0)("Fecha").ToString().ToDate)
Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString().ToEntero()
Dim ClienteNombre As String = ObjVentas.DtResultados(0)("ClienteNombre").ToString()
Dim Serie As String = ObjVentas.DtResultados(0)("SerieFolio").ToString()
Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL()
Dim TotalCostoAcumulado As Decimal = 0
Dim cont As Integer = 1
Dim ValorMultiplicador As Decimal = 1
If TipoMovimiento = 1 Then
ValorMultiplicador = 1
ElseIf TipoMovimiento = 2 AndAlso TipoDocto.Contiene({"Dev"}) AndAlso (EsDevolucionVenta = 1) Then
ValorMultiplicador = 1
ElseIf TipoMovimiento = 2 Then
ValorMultiplicador = -1
End If
Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("Inventario/EntregaAlmacen", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
'Se agrega movimiento separado por la cuenta de ventas (ER)
If CvePrePoliza > 0 Then
For Each RowInv As DataRow In tmpCostos.Rows
ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL()
TotalCostoAcumulado += ValorInventario
'cuando es el último movimiento y hay diferencias en los importes
If cont = DtCostos.FiltraParametros("", "", {"CveClasificacion"}).Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
End If
If Not ErrorMovInv Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ValorMultiplicador * ValorInventario, ValorMultiplicador * ValorInventario, 69, Serie, Serie, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, CveSubProyecto:=CveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero()) Then
ErrorMovInv = True
End If
End If
cont += 1
Next
Dim tCveSubProyectoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero).FiltroPrimeroValor("CveSubProyecto").ToEntero()
If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ValorMultiplicador * TotalCosto, ValorMultiplicador * TotalCosto, 68, Serie, Serie, CveVenta:=CveVentaSurtir, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimiento, CveSubProyecto:=tCveSubProyectoAlmacen) Then
ErrorMovInv = True
End If
If Not ErrorMovInv AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual) Then
If ObjConta.ValorPolizaDescuadre > 0 Then
GuardaLogAD($"Inventario/EntregaAlmacen | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
ErrorMovInv = True
End If
End If
Else
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un Error al ingresar la prepoliza.1")
End If
Else
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un Error al ingresar las prepolizas.2")
End If
Else
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un Error al ingresar las prepolizas.3")
End If
Else
ErrorMovInv = True
TextoError.AppendFormat("Ocurrió un Error al ingresar las prepolizas.4")
End If
Return Not ErrorMovInv
End Function
Private Sub GuardaTraspaso()
'OBLIGA A SURTIR TODO
For Each Gvr As GridViewRow In GvDatos.Rows
If Not Gvr.FCCheckBox("cbInv").Checked Or (Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal <> Gvr.DataKey("CantidadC").ToString().ToDecimal) Then
Alert("Es necesario surtir todos los productos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
Next
Dim ValidaSeccion As Boolean = False : Dim ValidaCaducidad As Boolean = False : Dim ValidaLote As Boolean = False
'VALIDA CANTIDAD DE SALIDA
Dim Cantidad As Decimal = 0.0D
For Each Gvr As GridViewRow In GvDatos.Rows
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
If Gvr.FCCheckBox("cbInv").Checked AndAlso Gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
Cantidad = Gvr.FCTextBox("TbCantidadF").Text.ToDecimal
Exit For
End If
Next
If ValidaSeccion Then
Alert("La sección de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If ValidaCaducidad Then
Alert("La caducidad no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If ValidaLote Then
Alert("El lote de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'VALIDA TRANSITORIO
If ChkTransitorio.Checked Then
If TxtResponsable.Text.Trim = "" Then
Alert("Debe seleccionar un responsable para el traspaso transitorio.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')")
If ChkTransitorio.Checked Then RegistraScript("$('#DivTransitorio').show(200);")
Exit Sub
End If
If DdlAlmacenTransitorio.SelectedValue.ToEntero() <= 0 Then
Alert("Debe seleccionar un almacen transitorio.", TipoMensaje.MsgAdvertencia)
RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')")
If ChkTransitorio.Checked Then RegistraScript("$('#DivTransitorio').show(200);")
Exit Sub
End If
End If
Dim ObjInventario As New ClsInventarios : ObjInventario.IniciaTransacSQL()
Dim ObjGeneral As New ClsGenerales(ObjInventario.IniciaTransacSQL())
Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL())
Dim CveMovimientoSalida As Integer
Dim ConceptoMovimiento As Integer = 0
Dim FolioSalida As Integer
Dim CveMovimientoEntrada As Integer
Dim FolioEntrada As Integer
Dim ErrorMovInv As Boolean
Dim DtDetalle As New DataTable
Dim TextoError As String = ""
'PASA DATOS DEL GV A DATATABLE PARA MANEJOR CON FOR EACH
Dim Index As Integer = 0
For Each gvr As GridViewRow In GvDatos.Rows
If gvr.FCCheckBox("cbInv").Checked AndAlso gvr.FCTextBox("TbCantidadF").Text.ToDecimal > 0 Then
DtDatos.Rows(Index)("CantidadGV") = gvr.FCTextBox("TbCantidadF").Text.ToDecimal
DtDatos.Rows(Index)("CveSeccion") = gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero()
DtDatos.Rows(Index)("FechaCaducidad") = gvr.FCTextBox("TxtCaducidad").Text.ToDate
DtDatos.Rows(Index)("Lote") = gvr.FCTextBox("TxtLote").Text
End If
Index += 1
Next
'VALIDA SI HUBO CAMBIOS EN LA EXISTENCIA
Dim DtDatosTraspaso As New DataTable
If ObjInventario.EntregaAlmacenTraspasosGet(CveTraspasoSurtir) Then
DtDatosTraspaso = ObjInventario.DtResultados
End If
Dim CantidadGV As Decimal = GvDatos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.DataKey("CantidadF").ToDecimal)
If DtDatos.SUM("CantidadF") <> DtDatosTraspaso.SUM("CantidadF") Then
ObjInventario.RollBack()
ObjInventario.Dispose()
CargaTraspasoPorSurtir(CveTraspasoSurtir)
CargaPendientes()
Alert("Ha sido cambiada la informacion de existencias del traspaso actual. Por favor verifique.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'VALIDA QUE EL TRASPASO SIGA VIGENTE
If ObjInventario.AddTrasladoSolicitudGet(CveTraspasoSurtir, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 AndAlso ObjInventario.DtResultados.Rows(0)("CveTrasladoEstatus").ToString() = "2" Then
ObjInventario.RollBack()
ObjInventario.Dispose()
CargaTraspasoPorSurtir(CveTraspasoSurtir)
CargaPendientes()
Alert("Ha sido cambiada la informacion del traspaso actual. Por favor verifique.", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'VALIDA ALMACENES
Dim Almacen1 As Integer = DdlAlmacen.SelectedValue.ToEntero()
Dim Almacen2 As Integer = CveAlmacenTraspasoDestino
If Almacen1 <= 0 Or Almacen2 <= 0 Then
Alert("Ocurrió un error al obtener los almacenes del movimiento. Por favor recargue y vuelva a intentar.", TipoMensaje.MsgAdvertencia)
ObjInventario.RollBack()
ObjInventario.Dispose()
Exit Sub
End If
'VERIFICAR EXISTENCIA
Dim StrXML As New StringBuilder
Dim Lote As String = ""
Dim FechaCaducidad As Date
StrXML.Append("<conceptos>")
For Each Dr As DataRow In DtDatos.Rows
FechaCaducidad = If(CBool(Dr("AplicaCaducidad")) AndAlso Dr("FechaCaducidad").ToString() <> "", Dr("FechaCaducidad").ToString().ToDate, MinFecha)
Lote = If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1")
If Dr("CantidadGV").ToString().ToDecimal > 0 Then
If CBool(Dr("AplicaSerie")) Then
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec")))
For Each Dr1 As DataRow In DtDetalle.Rows
StrXML.AppendFormat("<concepto CvePS=""{0}"" CveUM=""{1}"" Cantidad= ""{2}"" CveSeccionAlmacen=""{3}"" Serie=""{4}"" Lote=""{5}"" FechaCaducidad=""{6}"" ></concepto>", Dr1("CvePS"), Dr1("CveUM"), 1, IfNull(Dr("CveSeccion"), -1), Dr1("Serie"), Lote, FechaCaducidad.ToString("yyyy/MM/dd"))
Next
Else
StrXML.AppendFormat("<concepto CvePS=""{0}"" CveUM=""{1}"" Cantidad= ""{2}"" CveSeccionAlmacen=""{3}"" Serie=""{4}"" Lote=""{5}"" FechaCaducidad=""{6}"" ></concepto>", Dr("CvePS"), Dr("CveUM"), Dr("CantidadGV"), IfNull(Dr("CveSeccion"), -1), "-1", Lote, FechaCaducidad.ToString("yyyy/MM/dd"))
End If
End If
Next
StrXML.Append("</conceptos>")
Dim TieneErrorExistencia As Boolean = False
If ObjInventario.GetExistenciasPSXML(StrXML.ToString(), DdlAlmacen.SelectedValue.ToEntero(), TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveSubProyecto, CveVendedor, If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), If(TipoEntrega = 2, 1, -1), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
If ObjInventario.DtResultados.Rows.Count > 0 Then
TieneErrorExistencia = True
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
TextoError += $"<b> - {Dr("CodigoPS")}</b> Existencia: {Dr("Existencia").ToString().ToDecimal.ToString("#,##0.##")} <br/>"
Next
End If
Else
TieneErrorExistencia = True
End If
If TieneErrorExistencia Then
ObjInventario.RollBack()
ObjInventario.Dispose()
If TextoError.Length > 0 Then
Alert($" Lo(s) siguiente(s) Productos <b>no tienen</b> existencia suficiente:<br/><br/>{TextoError}", TipoMensaje.MsgAdvertencia)
End If
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
Exit Sub
End If
'SALIDA POR TRASPASO
If Not ErrorMovInv Then
ConceptoMovimiento = 26
CveMovimientoSalida = ObjInventario.AddMovimiento(Almacen1, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Guia:="",
CveContrato:=-1, CveAlmacenDestino:=CveAlmacenTraspasoDestino, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, ""), Modulo:="RE/GT", CveOP:=CveOP)
FolioSalida = ObjInventario.Folio
If CveMovimientoSalida > 0 Then
Dim CantidadPendiente As Decimal = 0
Dim CveSeccionAlmacen As Integer = -1
For Each Dr As DataRow In DtDatos.Rows
If ErrorMovInv Then
Exit For
End If
FechaCaducidad = If(CBool(Dr("AplicaCaducidad")) AndAlso Dr("FechaCaducidad").ToString() <> "", Dr("FechaCaducidad").ToString().ToDate, MinFecha)
Lote = If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1")
CveSeccionAlmacen = If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)
DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
'DtDetalleLote = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0} AND FueTraspaso IS NULL", Dr("Consec")))
If DtDetalle.Rows.Count > 0 Then 'SI FUE POR SERIE
For Each Dr1 As DataRow In DtDetalle.Rows
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, 1, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, Serie:=Dr1("Serie").ToString(), Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveSeccionAlmacen:=CveSeccionAlmacen, CveVentaDetalle:=-1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero()) Then
ErrorMovInv = True
TextoError = $"Ocurrió un error al procesar los conceptos con serie '{Dr1("Serie").ToString()}'. Por favor vuelva a intentar."
Exit For
End If
Next
'ElseIf DtDetalleLote.Rows.Count > 0 Then 'SI FUE POR LOTE BATCH
' For Each Dr1 As DataRow In DtDetalleLote.Rows
' If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr1("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, Serie:="", Lote:=Dr1("Lote").ToString(), FechaCaducidad:=FechaCaducidad, CveSeccionAlmacen:=CveSeccionAlmacen, CveVentaDetalle:=-1, CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero()) Then
' ErrorMovInv = True
' TextoError = "Ocurrió un error al procesar los conceptos con serie. Por favor vuelva a intentar."
' Exit For
' End If
' Next
Else 'NORMAL
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Dr("CantidadGV").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), 0, -1, Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveSeccionAlmacen:=CveSeccionAlmacen, CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero()) Then
ErrorMovInv = True
TextoError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar."
Exit For
End If
End If
Next
Else
TextoError = "Ocurrió un error al generar el movimiento de salida."
ErrorMovInv = True
End If
End If
Dim ValorTraspaso As Decimal = 0
'ENTRADA POR TRASPASO
If Not ErrorMovInv Then
'sino es transitorio, los transitorios, ya no se hace otro movimiento
ConceptoMovimiento = If(ChkTransitorio.Checked, 2, 27)
Almacen2 = If(ChkTransitorio.Checked, DdlAlmacenTransitorio.SelectedValue.ToEntero(), CveAlmacenTraspasoDestino)
CveMovimientoEntrada = ObjInventario.AddMovimiento(Almacen2, ConceptoMovimiento, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim,
Guia:="", CveContrato:=CveContrato, CveMovimientoRelacionado:=CveMovimientoSalida, CveAlmacenDestino:=CveAlmacenTraspasoDestino,
Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, ""), Modulo:="RE/GT1", CveOP:=CveOP)
FolioEntrada = ObjInventario.Folio
If CveMovimientoEntrada > 0 Then
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then
Dim CveSeccionAlmacen As Integer = -1
ValorTraspaso = ObjInventario.DtResultados.SUMD("Total").RoundSQL
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
CveSeccionAlmacen = -3
If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Dr("Serie").ToString(), Lote:=Dr("Lote").ToString(), FechaCaducidad:=Dr("FechaCaducidad").ToString().ToDate, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero()) Then
ErrorMovInv = True
TextoError = "Ocurrió un error al guardar los movimientos de entrada"
Exit For
End If
Next
End If
Else
TextoError = "Ocurrió un error al generar el movimiento de entrada"
ErrorMovInv = True
End If
End If
'MARCA SOLICITUD CON EL MOVIMIENTO GENERADO
If Not ErrorMovInv Then
If Not ObjInventario.UpdateTraspasoSolicitudMovimiento(CveTraspasoSurtir, CveMovimientoSalida) Then
TextoError = "Ocurrió un error al vincular los movimientos con la solicitud de traspaso. Por favor verifique y vuelva a intentar"
ErrorMovInv = True
End If
End If
Dim Fecha As Date = TxtFecha.Text.ToDate
'Paqueterias Guias
If RbEntregaInterna.Checked AndAlso Not ErrorMovInv Then
Dim CveEstatus As Integer = 0 ' DdlEstatus.SelectedValue.ToEntero()
Dim FechaEstimada As String = "-1" 'If(TxtFechaEstimada.Text = "", "-1", TxtFechaEstimada.Text)
Dim NoCajas As Integer = 0 'TxtNoCajas.Text.ToEntero()
Dim Observaciones As String = "" 'TxtObservacionesPaqInterna.Text
Dim CvePaqueteria As Integer = GlobalDTPaqueterias(UsuarioActual.CveEmpresa, 0).FiltroPrimeroValor("CvePaqueteria", "").ToEntero()
Dim CvePaqueteriaGuia As Integer = ObjGeneral.AddPaqueteriasGuias(CvePaqueteria, 9, CveEstatus, CveSubProyecto, Fecha.ToShortDateString, "-1", "-1", NoCajas, 0.00, "-1", FechaEstimada, Observaciones, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, EsEntregaInterna:=True)
If CvePaqueteriaGuia > 0 Then
If CveVentaSurtir > 0 OrElse CveSubProyecto > 0 Then
ErrorMovInv = Not ObjGeneral.AddPaqueteriasGuiasDetalles(CvePaqueteriaGuia, CveVentaSurtir, -1, CveMovimientoEntrada, -1)
End If
If ErrorMovInv Then
Alert("Error en el paqueteria guia detalle", TipoMensaje.MsgError)
End If
Else
ErrorMovInv = True
Alert("Error en el paqueteria guia", TipoMensaje.MsgError)
End If
End If
'AGREGAMOS PREPOLIZAS TRASPASO DIRECTO:
Dim CvePrePolizaTraspaso As Integer = ObjConta.AddPrePolizas("EA/GT", 53, 0, 0, 1, Fecha, "Traspaso", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CvePrePolizaTraspaso > 0 Then
If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, True, ValorTraspaso, ValorTraspaso, 68, TxtObservaciones.Text, TxtObservaciones.Text, CveMovimientoAlmacen:=CveMovimientoSalida, Contabilizable:=False) Then
ErrorMovInv = True
End If
If Not ErrorMovInv AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePolizaTraspaso, False, ValorTraspaso, ValorTraspaso, 68, TxtObservaciones.Text, TxtObservaciones.Text, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=False) Then
ErrorMovInv = True
End If
Else
ErrorMovInv = True
End If
If Not ErrorMovInv Then
ObjInventario.Commit()
ObjGeneral.Dispose()
RegistraScript("playsonidito('beep-07.wav')")
Dim Msg As New StringBuilder
Msg.AppendFormat("Movimiento Salida: <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a></b>", CveMovimientoSalida, FolioSalida)
Msg.AppendFormat("<br/><a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoSalida)))
Msg.AppendFormat("<br/><br/> Movimiento Entrada (Traspaso): <b><a href=""/Inventarios/EntradasSalidas.aspx?CveMovimiento={0}"" target=""_blank"">{1}</a></b>", CveMovimientoEntrada, FolioEntrada)
Msg.AppendFormat("<br/> <a class=""Texto"" target='_blank' href=""/Compras/PopUpVerFactura.aspx?P={0}"">Imprimir Movimiento</a> ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimientoEntrada)))
If RbEntregaInterna.Checked Then
Msg.AppendFormat("<br/><br/>Se agregó una guía de paquetería interna")
End If
Alert(Msg.ToString(), TipoMensaje.MsgInformacion)
Limpia()
LimpiaCampos()
CargaPendientes()
CargaBitacora = False
Else
Alert(TextoError, TipoMensaje.MsgError)
RegistraScript("playsonidito('142608__autistic-lucario__error.wav')")
ObjInventario.RollBack()
End If
ObjInventario.Dispose()
End Sub
Private Sub MandaCorreoEntrega(tCveVenta As Integer)
EnviarCorreoEntrega(tCveVenta, UsuarioActual)
End Sub
Private Sub EnviarCorreoEntrega(tCveVenta As Integer, UsuarioActual As Usuario)
'Dim Correo As New ClsSisMail
Dim SerieFolio As String = ""
Dim Asunto As String = String.Format("{0} Envio de pedido: {1}", UsuarioActual.Empresa.NombreCorto, SerieFolio)
Dim Cuerpo As New StringBuilder()
Dim Destinatario As String = ""
Dim MensajeEnviado As Boolean = False
Dim tCvecliente As Integer
Dim tCveVendedor As Integer
Dim bytes() As Byte = Nothing
Dim ObjVentas As New ClsVentas()
Dim strBody As New StringBuilder
If ObjVentas.GetVenta(tCveVenta, UsuarioActual.CveEmpresa) Then
Dim dr As DataRow = ObjVentas.DtResultados.FiltroPrimero("")
tCveVendedor = dr("CveVendedor").ToString().ToEntero()
Dim CorreoVendedor As String = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Correo", String.Format("CveVendedor = {0}", tCveVendedor))
Dim CorreoAsistente As String = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=3).FiltroPrimeroValor("Correo", String.Format("CveSuperior = {0}", CveVendedor))
Destinatario = String.Format("{0};{1};{2}", dr("CorreoNotificacion"), CorreoVendedor, CorreoAsistente)
tCvecliente = dr("CveCliente").ToString().ToEntero()
Dim drC As DataRow = GlobalDTCliente(UsuarioActual.CveEmpresa, CveCliente:=tCvecliente).FiltroPrimero("")
If drC IsNot Nothing Then
Destinatario += String.Format(";{0};{1}", drC("CorreoEntregaCompras"), drC("CorreoEntregaAlmacen"))
Dim ClienteNombre As String = dr("ClienteNombre").ToString()
Dim FolioVenta As String = dr("SerieFolio").ToString()
Dim Pedido As String = dr("PedidoContrato").ToString()
Dim OrdenCompra As String = dr("OrdenCompra").ToString()
Dim CveVenta As Integer = dr("CveVenta").ToString().ToEntero()
Dim TipoDocto As String = dr("TipoDocto").ToString()
Dim dtDetalle As New DataTable
If ObjVentas.GetVentaDetalle(CveVenta) Then
dtDetalle = ObjVentas.DtResultados
End If
Dim DetalleTable As String = ""
For Each dRow As DataRow In dtDetalle.Rows
Dim detalle As String = String.Format("<tr><td style='width:25%'>{0}</td><td style='width:25%'>{1}</td><td style='width:50%'>{2}</td></tr>", dRow("Codigo"), dRow("Cantidad"), dRow("PS"))
DetalleTable += detalle
Next
strBody.Append("<html>")
strBody.Append("<head>")
strBody.Append("<meta charset='UTF-8'>")
strBody.Append("</head>")
strBody.Append(" <body style='width:800px'>")
strBody.Append("<div>")
strBody.Append($"<img src='http://sig.adssistemas.mx/Empresas/{UsuarioActual.CveEmpresa}/Logo.png' style='width:200px'></img>")
strBody.Append("</div>")
strBody.Append(" <p style='font-family:Segoe UI Semibold;font-size:12pt;width:100%'>")
strBody.Append($" Apreciable {ClienteNombre}, le confirmamos los")
strBody.Append(" productos surtidos y entregados en mostrador conforme a la")
strBody.Append($" {TipoDocto}:")
strBody.Append(" </p>")
strBody.Append($" <p style='width:100%;text-align:center;font-family:Segoe UI Semibold;font-size:12pt'>{FolioVenta} - Pedido {Pedido} - Orden de Compra {OrdenCompra}</P>")
strBody.Append(" <div style='width:100%;text-align:center'>")
strBody.Append(" <table style='width:100%;font-family:Segoe UI Semibold;font-size:12pt'>")
strBody.Append(DetalleTable)
strBody.Append(" ")
strBody.Append(" </table>")
strBody.Append(" </div>")
strBody.Append(" <p style='font-family:Segoe UI Semibold;font-size:12pt;width:100%'>")
strBody.Append(" Se entregaron los productos conforme a las especificaciones de su pedido y verificamos que no se presentara alguno de los siguientes inconvenientes:")
strBody.Append(" </p>")
strBody.Append(" <p style='font-family:Segoe UI Semibold;font-size:12pt;width:100%'>")
strBody.Append(" • Empaque violado.<br/>")
strBody.Append("• Daño físico en la caja.<br/>")
strBody.Append("• Producto incompleto o distinto al solicitado.<br/>")
strBody.Append("• Alguna otra situación que se considere que compromete la integridad de la mercancía.<br/>")
strBody.Append("")
strBody.Append(" </p>")
strBody.Append(" <br/>")
strBody.Append(" <p style='font-family:Segoe UI Semibold;font-size:12pt;width:100%'>")
strBody.Append($" Aceptando a entera satisfacción a las {Today.Hour}:{Today.Minute} hrs del {Today.ToString()}")
strBody.Append(" </p>")
strBody.Append(" <br/>")
strBody.Append(" <p style='font-family:Segoe UI Semibold;font-size:12pt;width:100%'>")
strBody.Append(" Gracias por su compra <br/>")
'strBody.Append(" Compuproveedores")
strBody.Append(" </p>")
strBody.Append(" <p style='font-family:Segoe UI Semibold;font-size:12pt;width:100%;text-align:center'>")
strBody.Append(" Sigue disfrutando de nuestros productos y servicios<br/>")
'strBody.Append(" <a href='https://www.compuproveedoresti.com/'>www.compuproveedores.com</a>")
strBody.Append("")
strBody.Append(" </p>")
strBody.Append(" </body>")
strBody.Append("</html>")
End If
End If
ObjVentas.Dispose()
Dim MailCls As New ClsSisMail
Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail)
Dim itemMail As New ClsSisMail.ArchivoMail()
LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = bytes, .NombreArchivo = "Entrega en mostrador"})
MailCls.SendMail(ClsPaginas.EmpresaNotificaciones, Destinatario, "Enviado desde Entrega Almacen", strBody.ToString(), Destinatario)
MailCls = Nothing
End Sub
Private Sub Limpia()
'DATOS DE LA VENTA
LbCantidad.Text = ""
LbCliente.Text = ""
LbObservaciones.Text = ""
'LbFolio.Text = ""
HLFolio.Text = ""
'DATOS DEL MOVIMINETO
TxtObservaciones.Text = ""
TxtFecha.Text = NowADS().ToShortDateString
DdlAlmacen.SelectedValueExist(-1)
CargaFolios()
'VARIABLES GENERALES
CveVentaSurtir = -1
CveOSSurtir = -1
DtDatosDetalle = Nothing
DtDatosDetalleLote = Nothing
DtDatos = Nothing
DivTipoCambioAdvertencia.Visible = False
'TRASPASO
DivTransitorio1.Visible = False
ChkTransitorio.Checked = False
TxtResponsable.Text = ""
DivTransitorio2.Visible = False
LbSurtida.Visible = False
TimmerRefresh.Enabled = True
DdlAlmacen.Enabled = True
UpGenerales.Update()
CargaGvDatos()
UpDatos.Update()
End Sub
#End Region
#Region " TRASPASO - TRANSITORIO "
Protected Sub ChkTransitorio_CheckedChanged(sender As Object, e As EventArgs)
TxtResponsable.Text = ""
DivTransitorio2.Visible = ChkTransitorio.Checked
End Sub
#End Region
#Region "SECCION ALMACEN"
'Private Sub CreaDtSeccionAlmacen()
' DtSeccionAlmacen = New DataTable
' DtSeccionAlmacen.Columns.Add("CantidadSeccionAlmacen", GetType(Decimal))
' DtSeccionAlmacen.Columns.Add("IndexSeccionAlmacen", GetType(Integer))
' DtSeccionAlmacen.Columns.Add("CveSeccionAlmacen", GetType(Integer))
' DtSeccionAlmacen.Columns.Add("CvePS", GetType(Integer))
' DtSeccionAlmacen.Columns.Add("SeccionAlmacen", GetType(String))
' DtSeccionAlmacen.Columns.Add("Consec", GetType(Integer))
'End Sub
'Private Sub CargaDdlAlmacen()
' DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, -1)
' DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1"))
' DdlSeccionAlmacen.DataBind()
'End Sub
'Protected Sub LnkSeccionAlmacen_Click(sender As Object, e As EventArgs)
' Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow)
' If Not DdlAlmacen.SelectedValue.ToEntero() > 0 Then
' Alert("Tiene que tener seleccionado un almacen para registrar seccion almacen.", TipoMensaje.MsgAdvertencia)
' Exit Sub
' End If
' CantidadTotal = gvRow.FCTextBox("TbCantidadF").Text.ToDecimal
' IndexSeccionAlmacen = gvRow.RowIndex
' CvePS = gvRow.DataKey("CvePS").ToEntero()
' CargaSeccionAlmacen()
' RegistraScript("$('#DModalSeccionAlmacen').modal()")
'End Sub
'Private Sub CargaSeccionAlmacen()
' Dim CantidadTotalSeccion As Decimal = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}").SUMD("CantidadSeccionAlmacen")
' GvSeccion.DataSource = DtSeccionAlmacen.FiltraParametros($"IndexSeccionAlmacen = {IndexSeccionAlmacen}")
' GvSeccion.DataBind()
' TxtCantidadSeccion.Text = ""
' DdlSeccionAlmacen.SelectedIndex = 0
' Dim CantidadRestante As Decimal = CantidadTotal - CantidadTotalSeccion
' If CantidadRestante = 0 Then
' RVTxtCantidad.MaximumValue = "1"
' TxtCantidadSeccion.Enabled = False
' Else
' RVTxtCantidad.MaximumValue = CantidadRestante.ToString()
' TxtCantidadSeccion.Enabled = True
' End If
' If CantidadTotalSeccion > 0 Then
' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = False
' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = "Cuenta con sección almacen"
' Else
' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").Enabled = True
' GvDatos.Rows(IndexSeccionAlmacen).FCTextBox("TbCantidadF").ToolTip = ""
' End If
' If DtSeccionAlmacen.SUMD("CantidadSeccionAlmacen") > 0 Then
' DdlAlmacen.Enabled = False
' DdlAlmacen.ToolTip = "Cuenta con sección almacen"
' Else
' DdlAlmacen.Enabled = True
' DdlAlmacen.ToolTip = ""
' End If
' UpModalSeccionAlmacen.Update()
' UpDatos.Update()
' UpGenerales.Update()
'End Sub
'Protected Sub LnkAddSeccionAlmacen_Click(sender As Object, e As EventArgs)
' Dim ObjInv As New ClsInventarios
' Dim CantidadDisponible As Decimal = 0
' If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlSeccionAlmacen.SelectedValue.ToEntero(), DdlAlmacen.SelectedValue.ToEntero(),
' CvePS, UsuarioActual.CveEmpresa) Then
' If ObjInv.DtResultados.Rows.Count > 0 Then
' CantidadDisponible = ObjInv.DtResultados.Rows(0)("CantidadRestante").ToString().ToDecimal
' End If
' End If
' ObjInv.Dispose()
' CantidadDisponible -= DtSeccionAlmacen.FiltraParametros($"CvePS = {CvePS} AND CveSeccionAlmacen = {DdlSeccionAlmacen.SelectedValue}").SUMD("CantidadSeccionAlmacen")
' If TxtCantidadSeccion.Text.ToDecimal > CantidadDisponible Then
' Alert($"No tiene cantidad de producto suficiente en esta seccion de almacen, su cantidad restante es: <b>{CantidadDisponible}</b>", TipoMensaje.MsgAdvertencia)
' Exit Sub
' End If
' Dim Row As DataRow = Nothing
' DtSeccionAlmacen.AcceptChanges()
' Row = DtSeccionAlmacen.NewRow
' Row("CantidadSeccionAlmacen") = TxtCantidadSeccion.Text.ToDecimal
' Row("IndexSeccionAlmacen") = IndexSeccionAlmacen
' Row("CveSeccionAlmacen") = DdlSeccionAlmacen.SelectedValue.ToEntero()
' Row("SeccionAlmacen") = DdlSeccionAlmacen.SelectedItem.Text
' Row("CvePS") = CvePS
' Row("Consec") = DtSeccionAlmacen.Rows.Count + 1
' DtSeccionAlmacen.Rows.Add(Row)
' DtSeccionAlmacen.AcceptChanges()
' CargaSeccionAlmacen()
'End Sub
'Protected Sub LnkEliminarSeccion_Click(sender As Object, e As EventArgs)
' Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow)
' Dim Index As Integer = 0
' For Each Dr As DataRow In DtSeccionAlmacen.Rows
' If Dr("Consec").ToString().ToEntero() = gvRow.DataKey("Consec").ToEntero() Then
' Exit For
' End If
' Index += 1
' Next
' DtSeccionAlmacen.Rows.RemoveAt(Index)
' DtSeccionAlmacen.AcceptChanges()
' CargaSeccionAlmacen()
'End Sub
'Protected Sub LnkVerSecciones_Click(sender As Object, e As EventArgs)
' If Not CveVentaSurtir > 0 Then
' Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia)
' Exit Sub
' End If
' If Not DdlAlmacen.SelectedValue.ToEntero() > 0 Then
' Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia)
' Exit Sub
' End If
' Dim ObjInv As New ClsInventarios
' If ObjInv.GetExistenciaSeccionAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then
' GvVerSeccionesAlmacen.DataSource = ObjInv.DtResultados
' End If
' ObjInv.Dispose()
' GvVerSeccionesAlmacen.DataBind()
' UpVerSeccionesAlmacen.Update()
' RegistraScript("$('#ModalVerSeccionesAlmacen').modal()")
'End Sub
#End Region
#Region "DIVIDIR"
Protected Sub Dividir(sender As Object, e As EventArgs)
Dim index2 As Integer = 0
For Each Row As DataRow In DtDatos.Rows
Row("Seleccionado") = GvDatos.Rows(index2).FCCheckBox("cbInv").Checked
If GvDatos.Rows(index2).FCTextBox("TbCantidadF").Text <> "" Then
Row("CantidadSeleccionada") = GvDatos.Rows(index2).FCTextBox("TbCantidadF").Text
End If
If GvDatos.Rows(index2).FCTextBox("TxtLote").Text <> "" Then
Row("Lote") = GvDatos.Rows(index2).FCTextBox("TxtLote").Text
End If
If GvDatos.Rows(index2).FCDropDownList("DdlSeccionAlmacen").SelectedValue <> "-1" Then
Row("CveSeccion") = GvDatos.Rows(index2).FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero()
End If
If GvDatos.Rows(index2).FCTextBox("TxtCaducidad").Text <> "" Then
Row("FechaCaducidad") = GvDatos.Rows(index2).FCTextBox("TxtCaducidad").Text.ToDate
End If
index2 += 1
Next
DtDatos.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 = DtDatos.Rows(Index)
Dim dr As DataRow = DtDatos.NewRow
dr.ItemArray = dr1.ItemArray
dr1("CantidadC") = (dr1("CantidadC").ToString().ToDouble - Cantidad.ToDouble)
Dim CantidadFOriginal As Double = dr1("CantidadF").ToString().ToDouble
dr1("CantidadF") = (dr1("CantidadF").ToString().ToDouble - Cantidad.ToDouble)
Dim CantidadSOriginal As Double = dr1("CantidadS").ToString().ToDouble
dr1("CantidadS") = (CantidadSOriginal * dr1("CantidadF").ToString().ToDouble) / CantidadFOriginal
Dim CantidadSeleccionadaOriginal As Double = dr1("CantidadSeleccionada").ToString().ToDouble
dr1("CantidadSeleccionada") = If(CantidadSeleccionadaOriginal > dr1("CantidadF").ToString().ToDouble, dr1("CantidadF").ToString().ToDouble, CantidadSeleccionadaOriginal)
CantidadSeleccionadaOriginal = CantidadSeleccionadaOriginal - dr1("CantidadF").ToString().ToDouble
'Dim CostoIndirectoOriginal As Double = dr1("CostoIndirecto").ToString().ToDouble
'dr1("CostoIndirecto") = (CostoIndirectoOriginal * dr1("CantidadF").ToString().ToDouble) / CantidadFOriginal
'Dim CostoIndirectoExtranjeroOriginal As Double = dr1("CostoIndirectoExtranjero").ToString().ToDouble
'dr1("CostoIndirectoExtranjero") = (CostoIndirectoExtranjeroOriginal * dr1("CantidadF").ToString().ToDouble) / CantidadFOriginal
DtDatos.AcceptChanges()
dr("CantidadC") = Cantidad.ToDouble
dr("CantidadF") = Cantidad.ToDouble
dr("CantidadS") = (CantidadSOriginal * dr("CantidadF").ToString().ToDouble) / CantidadFOriginal
dr("CantidadSeleccionada") = If(CantidadSeleccionadaOriginal > 0, CantidadSeleccionadaOriginal, 0)
dr("Seleccionado") = If(CantidadSeleccionadaOriginal > 0, True, False)
'dr("CostoIndirecto") = (CostoIndirectoOriginal * dr("CantidadF").ToString().ToDouble) / CantidadFOriginal
'dr("CostoIndirectoExtranjero") = (CostoIndirectoExtranjeroOriginal * dr("CantidadF").ToString().ToDouble) / CantidadFOriginal
DtDatos.Rows.InsertAt(dr, Index)
DtDatos.AcceptChanges()
index2 = 1
For Each Row As DataRow In DtDatos.Rows
Row("Consec") = index2
index2 += 1
Next
DtDatos.AcceptChanges()
CargaGvDatos()
index2 = 0
For Each Row As DataRow In DtDatos.Rows
GvDatos.Rows(index2).FCCheckBox("cbInv").Checked = CBool(Row("Seleccionado"))
If Row("CantidadSeleccionada").ToString() <> "" Then
GvDatos.Rows(index2).FCTextBox("TbCantidadF").Text = Row("CantidadSeleccionada").ToString()
End If
If Row("Lote").ToString() <> "" Then
GvDatos.Rows(index2).FCTextBox("TxtLote").Text = Row("Lote").ToString()
End If
If Row("CveSeccion").ToString() <> "" Then
GvDatos.Rows(index2).FCDropDownList("DdlSeccionAlmacen").SelectedValue = Row("CveSeccion").ToString()
End If
If Row("FechaCaducidad").ToString() <> "" Then
GvDatos.Rows(index2).FCTextBox("TxtCaducidad").Text = Row("FechaCaducidad").ToString().ToDate.ToShortDateString
End If
index2 += 1
Next
End Sub
#End Region
#Region " GUIAS - SABE QUE ES PORQUE NO VEO QUE SE UTILIZE EN ALGUNA PARTE - EN MIRAS DE ELIMINAR - IPP 24 AGOSTO 2017 "
Private Sub BtnNumeroGuia_Click(sender As Object, e As EventArgs) Handles BtnNumeroGuia.Click
Dim Objeto As New ClsInventarios
If Objeto.UpdateMovimientoGuia(TxtGuia.Text, CveMovimiento, UsuarioActual.CveEmpresa) Then
Alert("Se ha guardado correctamente la póliza", TipoMensaje.MsgConfirmacion)
End If
Objeto.Dispose()
End Sub
Private Sub GvDocs_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDocs.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim ImgDownLoad As Literal = e.Row.FCLiteral("HplDown")
Dim Adjunto As String = e.Row.DBCampo("Adjunto").ToString()
Dim ArchivoRuta As String = ""
If Adjunto.Trim.Length > 0 Then
ArchivoRuta = UsuarioActual.Empresa.Ruta & "Documentacion\Ventas\" & Adjunto
Dim fi As New FileInfo(ArchivoRuta)
Dim linkDescarga As String = ""
If fi.Exists() Then
linkDescarga = $"/Empresas/{UsuarioActual.CveEmpresa}/Documentacion/ventas/{fi.Name}"
ImgDownLoad.Visible = True
ImgDownLoad.Text = String.Format(" <a class='btn btn-circle btn-sm blue' href='{0}' target='_black'><i class='fa fa-download' title='Descargar documento'></i></a>", linkDescarga)
End If
End If
End If
End Sub
#End Region
#Region "SUGERENCIAS"
Protected Sub BtnVerSugerencias_Click(sender As Object, e As EventArgs)
If Not CveVentaSurtir > 0 Then
Alert("Tiene que seleccionar la venta a surtir", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If Not DdlAlmacen.SelectedValue.ToEntero() > 0 Then
Alert("Tiene que seleccionar el almacen", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim ObjInv As New ClsInventarios
If ObjInv.GetSugerenciasSalidaAlmacen(CveVentaSurtir, DdlAlmacen.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then
GvSugerencias.DataSource = ObjInv.DtResultados
DtDatosSugerencias = ObjInv.DtResultados
DtDatosSugerencias.Columns.Add("Consec", GetType(Integer))
DtDatosSugerencias.Columns.Add("CantidadGV", GetType(Double))
DtDatosSugerencias.Columns.Add("CantidadTraspaso", GetType(Double))
If Not DtDatosSugerencias.Columns.Contains("Lote") Then
DtDatosSugerencias.Columns.Add("Lote", GetType(String))
End If
If Not DtDatosSugerencias.Columns.Contains("CveSeccion") Then
DtDatosSugerencias.Columns.Add("CveSeccion", GetType(Integer))
End If
If Not DtDatosSugerencias.Columns.Contains("Seleccionado") Then
DtDatosSugerencias.Columns.Add("Seleccionado", GetType(Boolean))
End If
If Not DtDatosSugerencias.Columns.Contains("CantidadSeleccionada") Then
DtDatosSugerencias.Columns.Add("CantidadSeleccionada", GetType(Double))
End If
Dim Index As Integer = 1
For Each Dr As DataRow In DtDatosSugerencias.Rows
Dr("Consec") = Index
Index += 1
Next
DtDatosSugerencias.AcceptChanges()
If DtDatosSugerencias IsNot Nothing AndAlso DtDatosSugerencias.Rows.Count > 0 Then
GvSugerencias.Columns(2).Visible = DtDatosSugerencias.MAX("Seccion") <> ""
GvSugerencias.Columns(3).Visible = DtDatosSugerencias.MAX("Serie") <> ""
GvSugerencias.Columns(4).Visible = DtDatosSugerencias.MAX("Lote") <> ""
GvSugerencias.Columns(5).Visible = DtDatosSugerencias.MAX("FechaCaducidad") <> ""
End If
End If
ObjInv.Dispose()
GvSugerencias.DataBind()
UpVerSugerencias.Update()
RegistraScript("$('#ModalVerSugerencias').modal({backdrop: 'static', keyboard: false});")
End Sub
Protected Sub BtnAplicarSugerencias_Click(sender As Object, e As EventArgs)
DtDatos = Nothing
DtDatos = New DataTable
DtDatos = DtDatosSugerencias
DtDatosDetalle = Nothing
CreaDtDetalle()
DtDatosDetalleLote = Nothing
CreaDtDetalleLote()
CargaGvDatos()
RegistraScript("$('#ModalVerSugerencias').modal('hide')")
End Sub
Protected Sub DdlAlmacen_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlAlmacen.SelectedIndexChanged
RecargaporAlmacenes()
End Sub
Private Sub RecargaporAlmacenes()
If DdlAlmacen.SelectedValue <> "-1" Then
CargaGvDatos(DdlAlmacen.SelectedValue.ToEntero)
End If
End Sub
Protected Sub BtnImprimirSugerencias_Click(sender As Object, e As EventArgs)
Dim LogoRutaFisica As String = String.Format("Empresas\{0}\Logo.png", UsuarioActual.CveEmpresa)
Dim logouri As String = String.Format("{0}://{1}:{2}/ashx/sigfiles.ashx?P={3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, Encripta(LogoRutaFisica))
Dim Imagen As New System.IO.FileInfo(String.Format("{0}Logo.png", UsuarioActual.Empresa.Ruta))
Dim params As New List(Of ReportParameter)
params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", "")))
params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa))
params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario))
ImprimirPDF("Empresas/Grales/Formatos/RepEntregaAlmacenSugerencia.rdlc", DtDatosSugerencias, params, "Equipo GPS")
End Sub
#End Region
#Region "TipoEntrega"
Protected Sub EntregaRadioGroup_Click(sender As Object, e As EventArgs)
If RbEntregaExterna.Checked Then
RegistraScript($"AbrirVentana('/General/PopUpPaqueteriasGuias.aspx?CveVenta={CveVentaSurtir}',800,547,'N')")
ElseIf RbEntregaInterna.Checked Then
'RegistraScript("$('#ModalPaqueteriaInterna').modal('show')")
'RegistraScript($"AbrirVentana('/General/PopUpPaqueteriasGuiasInternas.aspx?CveVenta={CveVentaSurtir}&CveSubProyecto={CveSubProyecto}',800,547,'N')")
'CveVentaSurtir
ElseIf RbSinEntrega.Checked Then
LimpiaCampos()
End If
End Sub
Protected Sub LimpiaCampos()
DdlEstatus.SelectedValue = "1"
TxtFechaPaqInterna.Text = ""
TxtFechaEstimada.Text = ""
TxtNoCajas.Text = ""
TxtObservacionesPaqInterna.Text = ""
UpPaqInterna.Update()
End Sub
Protected Sub PaqueteriaDetalle_Click(sender As Object, e As EventArgs)
If RbEntregaExterna.Checked Then
RegistraScript($"AbrirVentana('/General/PopUpPaqueteriasGuias.aspx?CveVenta={CveVentaSurtir}',800,547,'N')")
ElseIf RbEntregaInterna.Checked Then
'RegistraScript("$('#ModalPaqueteriaInterna').modal('show')")
End If
End Sub
#End Region
#Region "Cliente entrega personal"
Private Sub ClienteEntregaPersonal(CveCliente As Integer)
Dim ObjVentas As New ClsVentas()
If ObjVentas.GetClientesPersonalEntrega(-1, CveCliente, UsuarioActual.CveEmpresa, 1) Then
If ObjVentas.DtResultados.Rows.Count > 0 Then
GvClentesPersonalEntrega.DataSource = ObjVentas.DtResultados
GvClentesPersonalEntrega.DataBind()
DivPersonalEntrega.Visible = True
Else
DivPersonalEntrega.Visible = False
End If
End If
ObjVentas.Dispose()
UpClentesPersonalEntrega.Update()
End Sub
#End Region
#Region "sugerir caducidad"
Private Sub SugiereLoteCaducidad(CveAlmacen As Integer)
Dim TempDT As New DataTable
Dim DtLotesCaducidad As New DataTable
TempDT = DtDatos.Clone
Dim CvePSAnterior As Integer = 0
Dim ObjInventarios As New ClsInventarios()
For Each dr As DataRow In DtDatos.Rows
If CBool(dr("AplicaLote")) Then
If CvePSAnterior <> dr("CvePS").ToString.ToEntero Then
CvePSAnterior = dr("CvePS").ToString.ToEntero
If ObjInventarios.GetExistenciasCaducidad(dr("CvePS").ToString.ToEntero, CveAlmacen, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
DtLotesCaducidad.Merge(ObjInventarios.DtResultados)
End If
End If
End If
Next
ObjInventarios.Dispose()
For Each dr As DataRow In DtDatos.Rows
If CBool(dr("AplicaLote")) Then
Dim dtta As DataTable = DtLotesCaducidad.FiltraParametros(String.Format("CvePS = {0}", dr("CvePS")))
If dtta IsNot Nothing AndAlso dtta.Rows.Count > 0 Then
'recorre que cumplan con la cantidad total a llenar
Dim CantidadSurtir As Decimal = dr("CantidadF").ToString.ToDecimal
For Each drl As DataRow In dtta.Rows
If CantidadSurtir < drl("Cantidad").ToString.ToDecimal Then
dr("CantidadF") = CantidadSurtir
dr("CantidadC") = CantidadSurtir
dr("Lote") = drl("Lote")
dr("FechaCaducidad") = drl("FechaCaducidad")
TempDT.ImportRow(dr)
CantidadSurtir = 0
Else
CantidadSurtir -= drl("Cantidad").ToString.ToDecimal
dr("CantidadF") = drl("Cantidad").ToString.ToDecimal
dr("CantidadC") = drl("Cantidad").ToString.ToDecimal
dr("Lote") = drl("Lote")
dr("FechaCaducidad") = drl("FechaCaducidad")
TempDT.ImportRow(dr)
End If
If CantidadSurtir <= 0 Then Exit For
Next
Else
'error, no hay lote sugerido
End If
Else
TempDT.ImportRow(dr)
End If
Next
DtDatos = TempDT
End Sub
#End Region
'Protected void LnkEditarDir_Click(Object sender, EventArgs e)
'{
' int CveCliente = GvRow.DataKey("CveCliente").ToEntero();
' int CveDireccion = GvRow.DataKey("CveDireccionEnvio").ToEntero();
' HdnCveVenta.Value = GvRow.DataKey("CveVenta");
' CargaModalCombosDirecciones(CveCliente, CveDireccion);
' UpModalEditarentrega.Update();
' RegistraScript("$('#DivEditarEntrega').modal('show');");
'}
Protected Sub LnkEditarDir_Click(sender As Object, e As EventArgs)
HdnCveVenta.Value = CveVentaSurtir.ToString
CargaModalCombosDirecciones(CveCliente, CveDireccionEnvio)
RegistraScript("$('#DivEditarEntrega').modal({backdrop: 'static', keyboard: false});")
End Sub
Private Sub CargaModalCombosDirecciones(CveCliente As Integer, CveDireccionEnvio As Integer)
DdlModalDireccionEnvio.Items.Clear()
Dim dtt As New DataTable()
Dim ObjClientes As New ClsClientes()
If (ObjClientes.DireccionEnvioGet(-1, CveCliente, -1)) Then
dtt = ObjClientes.DtResultados
End If
ObjClientes.Dispose()
DdlModalDireccionEnvio.DataSource = dtt
DdlModalDireccionEnvio.DataBind()
DdlModalDireccionEnvio.SelectedValueExist(CveDireccionEnvio)
UpModalEditarentrega.Update()
dtt.Dispose()
End Sub
Protected Sub BtnModalEditarentrega_Click(sender As Object, e As EventArgs)
Dim ProcesoOK As Boolean = True
Dim ObjVentas As New ClsVentas()
If Not ObjVentas.UpdateDireccionEnvioVenta(HdnCveVenta.Value.ToEntero(), DdlModalDireccionEnvio.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then
ProcesoOK = False
End If
ObjVentas.Dispose()
If ProcesoOK Then
RegistraScript("$('#DivEditarEntrega').modal('hide');")
Alert("Dirección Actualizada correctamente.", ModExtensiones.TipoMensaje.ToastInformacion)
'CargaDatos()
End If
End Sub
Private Function CierreOS(CveOSCerrar As Integer, CveMovimientoGenerado As Integer, ByRef TransaccionSql As SqlTransaction) As Boolean
Dim Respuesta As Boolean = True
Dim CveOSEstatusFinalizada As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero
If CveOSEstatusFinalizada > 0 Then
Dim ObjOS As New ClsOS(TransaccionSql)
Respuesta = ObjOS.UpdateOrdenesServiciosEstatus(CveOSEstatusFinalizada, UsuarioActual.CveUsuario, CveOSCerrar)
Dim cancelarPeido As Boolean = CancelarPedido(TransaccionSql, CveMovimientoGenerado, Respuesta)
If Respuesta Then
Dim ObjInventario As New ClsInventarios(TransaccionSql)
If ObjInventario.GetMovimientosDetalle(CveMovimientoGenerado, UsuarioActual.CveEmpresa) Then
If Not cancelarPeido Then
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
Dim CveVentaDetalle As Integer = Dr("CveVentaDetalle").ToString().ToEntero()
Dim Cantidad As Decimal = Dr("Cantidad").ToString().ToDecimal
If CveVentaDetalle > 0 Then
If Not ObjInventario.UpdatePedidoDetalleCantidad(CveVentaDetalle, Cantidad) Then
Respuesta = False
Exit For
End If
Else
Respuesta = False
End If
Next
End If
End If
End If
If Respuesta AndAlso cancelarPeido Then
Dim objVentas As New ClsVentas(TransaccionSql)
If Not objVentas.UpdateEstatusVenta(CveVentaSurtir, 4, UsuarioActual.CveEmpresa) Then
Respuesta = False
End If
End If
Else
Alert("No se pudo obtener el estado para finalizar la orden de servicio.")
Respuesta = False
End If
Return Respuesta
End Function
Private Function CancelarPedido(ByRef TransaccionSql As SqlTransaction, CveMovimientoGenerado As Integer, ByRef RespuestaPadre As Boolean) As Boolean
Dim Cancelar As Boolean = True
Dim objVentas As New ClsVentas(TransaccionSql)
Dim ObjInventario As New ClsInventarios(TransaccionSql)
Dim DTMovimiento As New DataTable
Dim DTPedidoDetalle As New DataTable
If ObjInventario.GetMovimientosDetalle(CveMovimientoGenerado, UsuarioActual.CveEmpresa) Then
DTMovimiento = ObjInventario.DtResultados
Else
RespuestaPadre = False
End If
If objVentas.GetVentaDetalle(CveVentaSurtir) Then
DTPedidoDetalle = objVentas.DtResultados
Else
RespuestaPadre = False
End If
If RespuestaPadre Then
For Each rowPedido As DataRow In DTPedidoDetalle.Rows
Dim CantidadPedido As Decimal = rowPedido("Cantidad").ToString.ToDecimal
Dim CveVentaDetalle As Integer = rowPedido("CveVentaDetalle").ToString.ToEntero
Dim CantidadDevuelto As Decimal = DTMovimiento.FiltroPrimeroValor("Cantidad", $"CveVentaDetalle = {CveVentaDetalle}").ToDecimal
If CantidadPedido <> CantidadDevuelto Then
Cancelar = False
Exit For
End If
Next
End If
Return Cancelar
End Function
End Class