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 @@
+
@@ -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"
|