Agregar selección de Folio Garantía para Funcionalidad 531

CAMBIOS EN BD VENTAS:
+ Nuevo PA: PA_Acum_GarantiasDetalleFolioDisponibleGet (Thx Rene)
PA_Comp_Compra Add/Update: + @CveFolioGarantia INT = -1

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
This commit is contained in:
MLopez
2023-02-23 01:32:38 -07:00
parent 784a90f626
commit 6ce3d4c872
5 changed files with 127 additions and 27 deletions

View File

@@ -534,6 +534,14 @@
<asp:CheckBox runat="server" ID="chkImportacion"> </asp:CheckBox>
</div>
</div>
<div class="form-group proveedoreespes" runat="server" id="divFolioGarantia" visible="false">
<span class="whitoutcol linewhitsize proveedoreespes">Folio Garantía </span>
<div class="whitoutcol whitoutcol">
<asp:DropDownList ID="DdlFolioGarantia" runat="server" AutoPostBack="true" AppendDataBoundItems="true" DataTextField="FolioGarantia" DataValueField="CveFolioGarantia" OnSelectedIndexChanged="DdlFolioGarantia_SelectedIndexChanged" CssClass="form-control input-sm input-small select2me">
<asp:ListItem Selected="True" Text="Seleccione" Value="-1"></asp:ListItem>
</asp:DropDownList>
</div>
</div>
</div>
</div>
</ContentTemplate>
@@ -655,20 +663,8 @@
<th style="width: 70px">Unidad</th>
<th style="width: 299px">Clasificación
<asp:HyperLink ID="HplAddClasificacion" data-toggle="tooltip" data-placement="top" NavigateUrl="/Ventas/CatClasificaciones.aspx" CssClass="btn btn-default btn-circle btn-xs " ToolTip="Agregar Clasificacion" runat="server"><i class="fa fa-plus" style="color:black" aria-hidden="true"></i></asp:HyperLink>&nbsp;&nbsp;&nbsp;
<span data-toggle="collapse" data-target="#DivReclasifica">
<div class="btn btn-default btn-circle btn-xs " data-toggle="tooltip" data-placement="top" title="Reclasificar productos"><i class="fa fa-arrow-circle-down" style="color: green" aria-hidden="true"></i></div>
<asp:LinkButton ID="ImgClasificacion" CssClass="btn btn-default btn-circle btn-xs " data-toggle="tooltip" data-placement="top" ToolTip="Aplicar Clasificación a Productos" runat="server" Style="display: none;"><i class="fa fa-arrow-circle-down" style="color:green" aria-hidden="true"></i></asp:LinkButton>
@@ -680,8 +676,6 @@
<asp:Label ID="LitHProyecto" runat="server" Text=""></asp:Label>
<asp:Label runat="server" ID="LblSubProyectoHeader" Text=""></asp:Label>&nbsp;
<asp:LinkButton ID="ImgActualizarProyecto" CssClass="btn btn-default btn-circle" data-toggle="tooltip" data-placement="top" ToolTip="Actualizar Cambios" runat="server" Visible="False"><i class="fa fa-arrow-circle-down" aria-hidden="true"></i></asp:LinkButton>
<span data-toggle="collapse" data-target="#DivReclasifica">
<div class="btn btn-default btn-circle btn-xs " data-toggle="tooltip" data-placement="top" title="Cambiar sucursal"><i class="fa fa-arrow-circle-down" style="color: green" aria-hidden="true"></i></div>
@@ -1238,7 +1232,7 @@
<HeaderStyle CssClass="Titulos" />
</asp:TemplateField>
<asp:BoundField HeaderText="Unidad" DataField="UM" ItemStyle-Width="5%" />
<asp:BoundField ItemStyle-Width="20%" ItemStyle-HorizontalAlign="Left" HeaderText="Producto o Servicio" DataField="PS" />
<asp:BoundField ItemStyle-Width="20%" ItemStyle-HorizontalAlign="Left" HeaderText=" Servicio" DataField="PS" />
<asp:BoundField ItemStyle-Width="7.5%" HeaderText="P.U." DataField="PU" DataFormatString="{0:#,##0.00####}" ItemStyle-HorizontalAlign="Right" />
<asp:TemplateField ItemStyle-Width="10%">
<ItemTemplate>

View File

@@ -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.</br> CveUsuario={UsuarioActual.CveUsuario}</br> 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:</br></br>"
For Each Producto In IEnumPSFaltantes
mensaje += $"Falta: &times;&hairsp;<b>{Producto.CantidadFaltante:0.##}</b>&emsp;{Producto.NombrePS}</br>"
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)