From 6ce3d4c87236d4a7c91aa714cf8056ce8ef8368e Mon Sep 17 00:00:00 2001 From: MLopez Date: Thu, 23 Feb 2023 01:32:38 -0700 Subject: [PATCH] =?UTF-8?q?Agregar=20selecci=C3=B3n=20de=20Folio=20Garant?= =?UTF-8?q?=C3=ADa=20para=20Funcionalidad=20531=20CAMBIOS=20EN=20BD=20VENT?= =?UTF-8?q?AS:=20+=20Nuevo=20PA:=20PA=5FAcum=5FGarantiasDetalleFolioDispon?= =?UTF-8?q?ibleGet=20(Thx=20Rene)=20PA=5FComp=5FCompra=20Add/Update:=20+?= =?UTF-8?q?=20@CveFolioGarantia=20INT=20=3D=20-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se valida la selección y manda Alert si no hay existencia de los productos en el Folio de Garantía, con el número de productos faltantes respectivamente --- App_Code/ClsAcumuladores.vb | 21 +++++++ App_Code/ClsCompras.vb | 12 ++-- Compras/Compras.aspx | 24 +++----- Compras/Compras.aspx.vb | 91 ++++++++++++++++++++++++++++- Inventarios/TraspasoAlmacen.aspx.vb | 6 +- 5 files changed, 127 insertions(+), 27 deletions(-) diff --git a/App_Code/ClsAcumuladores.vb b/App_Code/ClsAcumuladores.vb index 8c9eb613c..e9aa5a929 100644 --- a/App_Code/ClsAcumuladores.vb +++ b/App_Code/ClsAcumuladores.vb @@ -1246,6 +1246,27 @@ Public Class ClsAcumuladores Return Retorno End Function + Public Function GetFoliosGarantiasDetalleDisponibles(CveFolioGarantia As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + + SqlDataAdapter("PA_Acum_GarantiasDetalleFolioDisponibleGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveFolioGarantia", SqlDbType.Int).Value = CveFolioGarantia + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As SqlException + OnError("Ocurrió un error al consultar los movimientos. ", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function UpdateGarantiaCancelacion(CveVenta As Integer) As Boolean Dim Retorno As Boolean = False diff --git a/App_Code/ClsCompras.vb b/App_Code/ClsCompras.vb index bf49cb75f..4073459b0 100644 --- a/App_Code/ClsCompras.vb +++ b/App_Code/ClsCompras.vb @@ -197,7 +197,7 @@ Public Class ClsCompras Optional CveOC As Integer = -1, Optional CveCajaChica As Integer = -1, Optional CvePersonal As Integer = -1, Optional NumeroReembolso As String = "-1", Optional CveProveedorSucursal As Integer = -1, Optional AplicoPromocion As Boolean = False, Optional PorcentajeIVA As Double = 0, Optional CveMetodoPago As Integer = -1, Optional CveRetIVAConcepto As Integer = -1, Optional CveConceptoContableAlmacen As Integer = -1, Optional CveRetISRConcepto As Integer = -1, Optional NoDeducible As Boolean = False, Optional CveTipoCompra As Integer = -1, Optional TotalOriginal As Double = 0, Optional CveTipoConcepto As Integer = 1, Optional CveFactura As Integer = -1, - Optional CveContrato As Integer = -1, Optional EsImportacion As Boolean = False, Optional CveSubProyecto As Integer = -1, Optional DoctosRelacionados As String = "-1") As Boolean + Optional CveContrato As Integer = -1, Optional EsImportacion As Boolean = False, Optional CveSubProyecto As Integer = -1, Optional DoctosRelacionados As String = "-1", Optional CveFolioGarantia As Integer = -1) As Boolean Dim Retorno As Boolean = False @@ -252,9 +252,7 @@ Public Class ClsCompras .Add("@EsImportacion", SqlDbType.Bit).Value = EsImportacion .Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto .Add("@DoctosRelacionados", SqlDbType.VarChar).Value = DoctosRelacionados - - - + .Add("@CveFolioGarantia", SqlDbType.Int).Value = CveFolioGarantia End With Try @@ -278,7 +276,8 @@ Public Class ClsCompras Public Function UpdateCompra(Descripcion As String, FolioSecundario As String, FechaVencimiento As Date, AplicaNotaCredito As Boolean, Observaciones As String, CveEstatusCompra As Integer, Descuento As Double, SubTotal As Double, IVA As Double, Total As Double, CveUsuario As Integer, CveCompra As Integer, Optional CveCajaChica As Integer = -1, Optional CvePersonal As Integer = -1, Optional CveProveedorSucursal As Integer = -1, Optional PorcentajeIVA As Double = 0, Optional NumeroReembolso As String = "", Optional CveTipoCompra As Integer = -1, Optional NoDeducible As Boolean = False, - Optional CveFactura As Integer = -1, Optional CveContrato As Integer = -1, Optional CveRetIVAConcepto As Integer = -1, Optional CveRetISRConcepto As Integer = -1, Optional CveSubProyecto As Integer = -1) As Boolean + Optional CveFactura As Integer = -1, Optional CveContrato As Integer = -1, Optional CveRetIVAConcepto As Integer = -1, Optional CveRetISRConcepto As Integer = -1, Optional CveSubProyecto As Integer = -1, + Optional CveFolioGarantia As Integer = -1) As Boolean Dim Retorno As Boolean = False @@ -308,11 +307,10 @@ Public Class ClsCompras .Add("@NoDeducible", SqlDbType.Bit).Value = NoDeducible .Add("@CveFactura", SqlDbType.Int).Value = CveFactura .Add("@CveContrato", SqlDbType.Int).Value = CveContrato - .Add("@CveRetIVAConcepto", SqlDbType.Int).Value = CveRetIVAConcepto .Add("@CveRetISRConcepto", SqlDbType.Int).Value = CveRetISRConcepto - .Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto + .Add("@CveFolioGarantia", SqlDbType.Int).Value = CveFolioGarantia End With Try diff --git a/Compras/Compras.aspx b/Compras/Compras.aspx index 02dc29703..d3d5c0112 100644 --- a/Compras/Compras.aspx +++ b/Compras/Compras.aspx @@ -534,6 +534,14 @@ +
+ Folio Garantía +
+ + + +
+
@@ -655,20 +663,8 @@ Unidad Clasificación - - - - - -     - - - - - -
@@ -680,8 +676,6 @@   - -
@@ -1238,7 +1232,7 @@ - + diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 32c2f3541..642b778e6 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -12,6 +12,7 @@ Imports Extensiones Imports System.Activities.Expressions Imports iText.Barcodes.Dmcode Imports Microsoft.Reporting.WebForms +Imports MoreLinq Partial Class Compras_Compras Inherits ClsPaginas @@ -1246,6 +1247,16 @@ Partial Class Compras_Compras If UsuarioActual.Empresa.Funcionalidad(303) <> "" Then btnProrateo2.Visible = True End If + + If UsuarioActual.Empresa.Funcionalidad(531).ToEntero = 1 Then 'cuando es emp acumuladora AndAlso DdlTipoComprobante.SelectedValue.Contiene("NC", "DEV") + divFolioGarantia.Visible = True + Using objAcum As New ClsAcumuladores + If objAcum.FoliosGarantiaGet(-1, UsuarioActual.Empresa.CveEmpresa, Estatus:=-1, TipoFolio:="-1", Area:=-1, CveSubProyecto:=-1) Then + DdlFolioGarantia.DataSource = objAcum.DtResultados.FiltraParametros("", "FechaIng DESC") + DdlFolioGarantia.DataBind() + End If + End Using + End If '**************************************************************** 'If UsuarioActual.CveEmpresa = 72 Then ' LiRecepcion.Visible = True @@ -4643,6 +4654,9 @@ Partial Class Compras_Compras Exit Sub End If + If DdlFolioGarantia.Visible AndAlso DdlFolioGarantia.SelectedValue <> "-1" Then + If Not ValidaFolioGarantia() Then Exit Sub + End If '------------------TERMINA VALIDACIONES------------------ @@ -4927,7 +4941,7 @@ Partial Class Compras_Compras CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, IdPoliza, CveCajaChica:=CveCajaChica, CvePersonal:=CvePersonal, NumeroReembolso:=NumeroReembolso, CveProveedorSucursal:=DdlProveedorSucursal.SelectedValue.ToEntero, AplicoPromocion:=ChkOCPromocion.Checked, PorcentajeIVA:=PorcentajeIVA, CveMetodoPago:=CveMetodoPago, CveRetIVAConcepto:=If(DdlRetIVAConcepto.Items.Count > 0, DdlRetIVAConcepto.SelectedValue.ToEntero, -1), CveConceptoContableAlmacen:=CveConceptoContableAlmacen, CveRetISRConcepto:=If(DdlRetISRConcepto.Items.Count > 0, DdlRetISRConcepto.SelectedValue.ToEntero, -1), NoDeducible:=EsNoDeducible, CveTipoCompra:=DdlTipoCompra.SelectedValue.ToEntero, TotalOriginal:=TotalOriginal, CveTipoConcepto:=CveTipoConcepto, - EsImportacion:=EsImportacion, CveFactura:=CveFactura, CveSubProyecto:=CveSubProyectoPrincipal, DoctosRelacionados:=DoctosRelacionados) Then + EsImportacion:=EsImportacion, CveFactura:=CveFactura, CveSubProyecto:=CveSubProyectoPrincipal, DoctosRelacionados:=DoctosRelacionados, CveFolioGarantia:=DdlFolioGarantia.SelectedValue.ToEntero) Then ViewState("CveCompra") = ObjCompras.CveCompra If ObjCompras.DtResultados.Rows.Count > 0 Then ViewState("CompraFolio") = ObjCompras.DtResultados.Rows(0)("vFolio").ToString @@ -8899,6 +8913,9 @@ Partial Class Compras_Compras Alert("Falta asignar Proyecto a la compra", TipoMensaje.MsgAdvertencia) End If + If DdlFolioGarantia.Visible AndAlso DdlFolioGarantia.SelectedValue <> "-1" Then + If Not ValidaFolioGarantia() Then Exit Sub + End If If CveFactura > 0 Then If Not AjustaCombustibles() Then @@ -8982,7 +8999,7 @@ Partial Class Compras_Compras If ObjCompra.UpdateCompra(TxtDescripcion.Text.Trim, TxtFolioSecundario.Text.Trim, TxtFechaPago.Text.ToDate, ChkAplicaNotaCredito.Checked, TxtObsFact.Text.Trim, CveEstatusFactura, TxtDescuento.Text.ToDouble, TxtSubTotal.Text.ToDouble, TxtIVA.Text.ToDouble, TxtTotal.Text.ToDouble, UsuarioActual.CveUsuario, CveCompra, CveCajaChica:=DdlRembolsoCajaChica.SelectedValue.ToEntero, CvePersonal:=DdlRembolsoPersonal.SelectedValue.ToEntero, CveProveedorSucursal:=If(DdlProveedorSucursal.SelectedValue.ToEntero > 0, DdlProveedorSucursal.SelectedValue.ToEntero, -1), PorcentajeIVA:=PorcentajeIVA, NumeroReembolso:=TxtRembolsoNumero.Text, - CveTipoCompra:=DdlTipoCompra.SelectedValue.ToEntero, NoDeducible:=EsNoDeducible, CveRetIVAConcepto:=TmpCveRetIVAConcepto, CveRetISRConcepto:=TmpCveRetISRConcepto, CveSubProyecto:=CveSubProyectoPrincipal) Then + CveTipoCompra:=DdlTipoCompra.SelectedValue.ToEntero, NoDeducible:=EsNoDeducible, CveRetIVAConcepto:=TmpCveRetIVAConcepto, CveRetISRConcepto:=TmpCveRetISRConcepto, CveSubProyecto:=CveSubProyectoPrincipal, CveFolioGarantia:=DdlFolioGarantia.SelectedValue.ToEntero) Then If Not ComparaDatatables() Then @@ -19981,7 +19998,77 @@ Partial Class Compras_Compras #End Region +#Region "GARANTÍAS" + Protected Sub DdlFolioGarantia_SelectedIndexChanged(sender As Object, e As EventArgs) + If DdlFolioGarantia.SelectedValue.ToEntero <> -1 Then + ValidaFolioGarantia(True) + End If + + End Sub + + Private Function ValidaFolioGarantia(Optional MsgExito As Boolean = False) As Boolean + If TmpDT?.Rows.Count > 0 Then + Dim ExistenciasPSFactura As New Dictionary(Of Integer, Decimal) + Dim ExistenciasPSGarantia As New Dictionary(Of Integer, Decimal) + Dim PSFaltantes As New Dictionary(Of Integer, Decimal) + Dim DtGarantia As New DataTable + + 'Agrupa los CvePS iguales y suma sus cantidades + For Each row In TmpDT.AsEnumerable() + Dim cvePS As Integer = row.Field(Of Integer)("CvePS") + Dim cantidad As Decimal = row.Field(Of Decimal)("Cantidad") + If ExistenciasPSFactura.ContainsKey(cvePS) Then + ExistenciasPSFactura(cvePS) += cantidad + Else + ExistenciasPSFactura.Add(cvePS, cantidad) + End If + Next + + Using ObjAcum As New ClsAcumuladores + If ObjAcum.GetFoliosGarantiasDetalleDisponibles(DdlFolioGarantia.SelectedValue.ToEntero, CveEmpresa:=UsuarioActual.CveEmpresa) Then + DtGarantia = ObjAcum.DtResultados + ExistenciasPSGarantia = DtGarantia.AsEnumerable().ToDictionary(Function(row) row.Field(Of Integer)("CvePS"), Function(row) row.Field(Of Decimal)("CantidadDisponible")) + Else + Alert($"Ocurrió un error al obtener la información de la garantía.
CveUsuario={UsuarioActual.CveUsuario}
CveFolioGarantia={DdlFolioGarantia.SelectedValue}", TipoMensaje.MsgError) + Return False + End If + End Using + + For Each Producto In ExistenciasPSFactura + Dim cvePS As Integer = Producto.Key + Dim cantidadFactura As Decimal = Producto.Value + If ExistenciasPSGarantia.ContainsKey(cvePS) Then + Dim cantidadGarantia As Decimal = ExistenciasPSGarantia(cvePS) + If cantidadFactura > cantidadGarantia Then + PSFaltantes.Add(cvePS, cantidadFactura - cantidadGarantia) + End If + Else + PSFaltantes.Add(cvePS, cantidadFactura) + End If + Next + + Dim IEnumPSFaltantes = From row In TmpDT.AsEnumerable() + Join Producto In PSFaltantes On row.Field(Of Integer)("CvePS") Equals Producto.Key + Select New With {.CvePS = Producto.Key, .NombrePS = row.Field(Of String)("PS"), .CantidadFaltante = Producto.Value} + + If PSFaltantes.Count > 0 Then + Dim mensaje As String = "Los siguientes productos no tienen suficientes existencias en la garantía seleccionada:

" + For Each Producto In IEnumPSFaltantes + mensaje += $"Falta: × {Producto.CantidadFaltante:0.##} {Producto.NombrePS}
" + Next + If MsgExito Then Alert(mensaje, TipoMensaje.MsgAdvertencia) Else Alert(mensaje, TipoMensaje.MsgError) + Else + If MsgExito Then Alert("Todos los productos seleccionados están disponibles en el Folio de Garantía.") + Return True + End If + Else + Alert("Agregue todos los productos a la factura antes de fijar el Folio de Garantía.", TipoMensaje.MsgAdvertencia) + DdlFolioGarantia.SelectedValue = "-1" + End If + Return False + End Function +#End Region Protected Sub BtnFacturaNC_Click(sender As Object, e As EventArgs) If ChkNCInvNC.Checked Then CargaNCINV(ShowAllPendientes:=False) diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index 39c126845..4c5cdf47e 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -1006,7 +1006,7 @@ Partial Class Inventarios_TraspasoAlmacen Dim CveConceptoEntrada As Integer = 27 If Not ChkTransitorio.Checked Then CveConceptoEntrada = 27 Else CveConceptoEntrada = 9 - Dim CveFolioGarantia As Integer = Request.QueryString("CveFolioGarantia").ToEntero + Dim CveFolioGarantia As Integer = IfNull(Request("CveFolioGarantia"), -1).ToString.ToEntero 'AGREGAMOS LA SALIDA DEL ALMACEN ORIGEN CveMovimientoSalida = ObjInventario.AddMovimiento(DdlAlmacenOrigen.SelectedValue.ToEntero, TipoMovimientoSalida, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, @@ -1014,7 +1014,7 @@ Partial Class Inventarios_TraspasoAlmacen CveAlmacenDestino:=DdlAlmacenDestino.SelectedValue.ToEntero, GastoIndirecto:=If(ChkTransitorio.Checked And TxtGastoIndirecto.Text.ToDouble > 0, TxtGastoIndirecto.Text, "-1").ToDouble, CveChofer:=If(ChkTransitorio.Checked, DdlChofer.SelectedValue.ToEntero, -1), Placa:="", FechaEntrega:=If(ChkTransitorio.Checked, TxtFechaEntrega.Text.Trim.ToDateTime.ToString("dd/MM/yyyy"), "-1"), EspecifUnidad:="", ResponsableCarga:="", ResponsableRecibio:="", Identificacion:="", Domicilio:="", - Telefono:="", Ciudad:="", Licencia:="", Modulo:="TA/G2", CveFolioGarantia:=If(CveFolioGarantia > 0, CveFolioGarantia, -1)) + Telefono:="", Ciudad:="", Licencia:="", Modulo:="TA/G2", CveFolioGarantia:=CveFolioGarantia) FolioSalida = ObjInventario.Folio Folio = ObjInventario.Folio If CveMovimientoSalida <= 0 Then @@ -1035,7 +1035,7 @@ Partial Class Inventarios_TraspasoAlmacen 'ENTRADA CveMovimientoEntrada = ObjInventario.AddMovimiento(CveAlmacenEntrada, CveConceptoEntrada, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, Recibio:=If(ChkTransitorio.Checked, TxtResponsable.Text.Trim, "-1"), - CveAlmacenDestino:=If(ChkTransitorio.Checked, DdlAlmacenDestino.SelectedValue.ToEntero, -1), CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="TA/G3", CveFolioGarantia:=If(CveFolioGarantia > 0, CveFolioGarantia, -1)) + CveAlmacenDestino:=If(ChkTransitorio.Checked, DdlAlmacenDestino.SelectedValue.ToEntero, -1), CveMovimientoRelacionado:=CveMovimientoSalida, Modulo:="TA/G3", CveFolioGarantia:=CveFolioGarantia) FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada <= 0 Then TextoError = "Ocurrió un error al generar el movimiento de entrada"