From 377d6a048b33a8c03d5567f8a53f2ff31923b4bb Mon Sep 17 00:00:00 2001 From: HECTOR RODRIGUEZ Date: Fri, 23 Jul 2021 21:20:02 -0700 Subject: [PATCH] Validacion Contrato prodctos --- Compras/Compras.aspx.vb | 136 ++++++++++++++++++++++++++++------------ 1 file changed, 96 insertions(+), 40 deletions(-) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 7550600b4..ba7dc5e84 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -10,6 +10,7 @@ Imports System.Text.RegularExpressions Imports System.Threading.Tasks Imports System.Xml Imports Extensiones +Imports Newtonsoft.Json Partial Class Compras_Compras Inherits ClsPaginas @@ -4280,7 +4281,11 @@ Partial Class Compras_Compras Next If ErrorValidacion Then Exit Sub - + Dim dtPSInvalidos As String = ValidarPSContrato(TmpDT.FiltraParametros("", "", {"CveSubProyecto", "CvePS", "Cantidad", "PU"})) + If dtPSInvalidos <> "" Then + Alert(dtPSInvalidos, TipoMensaje.MsgAdvertencia) + Exit Sub + End If 'RECORRO LOS PRODUCTOS O SERVICIOS PARA REGISTRARLOS LOS QUE NO EXISTEN EN EL CATÁLOGO Dim tCve As Integer @@ -4586,7 +4591,7 @@ Partial Class Compras_Compras Else CveConceptoContableAlmacen = 205 End If - If OCVinculada AndAlso DdlOCVinculaInv.visible AndAlso Not (CveImportacion > 0 Or CveFlete > 0) Then + If OCVinculada AndAlso DdlOCVinculaInv.Visible AndAlso Not (CveImportacion > 0 Or CveFlete > 0) Then CveConceptoContableAlmacen = DdlOCVinculaInv.SelectedValue.ToEntero End If If UsuarioActual.CveEmpresa.Contiene(72, 80, 140, 141) And Not (CveImportacion > 0 Or CveFlete > 0) Then 'se comento, RMF. 2020.08.19, no le hallo sentido @@ -9056,7 +9061,7 @@ Partial Class Compras_Compras PorcentajeImpuesto = TmpDT.MAX("IVAPorcentaje").ToDecimal IdCtaContable = If(IdCtaIVAXAcreditar > 0, IdCtaIVAXAcreditar, 0) - If chkImportacion.checked Then + If chkImportacion.Checked Then ConceptoContable = 287 End If @@ -9109,7 +9114,7 @@ Partial Class Compras_Compras PorcentajeImpuesto = TmpDT.MAX("IVAPorcentaje").ToDecimal IdCtaContable = If(IdCtaIVAAcreditable > 0, IdCtaIVAAcreditable, 0) - If chkImportacion.checked Then + If chkImportacion.Checked Then ConceptoContable = 288 End If If ObjConta.GetRetCuenta(ConceptoContable, UsuarioActual.CveEmpresa) And Not IdCtaContable > 0 Then @@ -11200,7 +11205,7 @@ Partial Class Compras_Compras Dim subproyectos As New List(Of Integer) For Each Row As DataRow In TmpDT.FiltraParametros("", "", {"CveSubProyecto", "SubProyecto"}).Rows - Dim RowCon As DataRow = GlobalDTContratos.FiltroPrimero(String.Format("CveSubProyecto={0}", Row("CveSubProyecto"))) + Dim RowCon As DataRow = GlobalDTContratos(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveSubProyecto={0}", Row("CveSubProyecto"))) If Not IsNothing(RowCon) Then filtro.AppendFormat(",{0}", Row("CveSubProyecto")) subproyectos.Add(Row("CveSubProyecto").ToString.ToEntero) @@ -15043,7 +15048,7 @@ Partial Class Compras_Compras dt = ObjContabilidad.DtResultados For Each dr As DataRow In dt.Rows - If Not ObjContabilidad.UpdatePrepolizasDetalle(dr("CvePrePolizaDetalle").ToString.ToEntero, dr("Concepto").ToString, dr("CveSubProyecto").ToString.ToEntero, dr("IdCtaContable").ToString.ToEntero, CBool(dr("TipoMovto").ToString), 0, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + If Not ObjContabilidad.UpdatePrePolizasDetalle(dr("CvePrePolizaDetalle").ToString.ToEntero, dr("Concepto").ToString, dr("CveSubProyecto").ToString.ToEntero, dr("IdCtaContable").ToString.ToEntero, CBool(dr("TipoMovto").ToString), 0, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorCancelar = True : Exit For End If Next @@ -18103,40 +18108,55 @@ Partial Class Compras_Compras ActualizaTotales = True Dim ObjContratos As New ClsContratos Dim TieneError As Boolean = False - Dim Mensaje As String = "" - Dim dttemp As DataTable = GlobalDTContratos(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveSubProyecto = {0}", DdlSubProyecto.SelectedValue.ToString)) - If dttemp IsNot Nothing AndAlso dttemp.Rows.Count > 0 Then - Dim drContrato As DataRow = dttemp.Rows(0) - If ObjContratos.GetContratosDetalle(drContrato("CveContrato").ToString.ToEntero) Then - Dim dtContratodetalle As DataTable = ObjContratos.DtResultados.FiltraParametros(String.Format("CvePS = {0}", DdlPS.SelectedValue.ToString)) - If dtContratodetalle IsNot Nothing AndAlso dtContratodetalle.Rows.Count > 0 Then - Dim drContratoDetalle As DataRow = dtContratodetalle(0) - If Convert.ToBoolean(drContratoDetalle("LimitarCantidad")) Then - If ObjContratos.GetReporteContratosAvancesDetalleControl(drContrato("CveContrato").ToString.ToEntero, UsuarioActual.CveEmpresa) Then - Dim dtContratodetalleControl As DataTable = ObjContratos.DtResultados.FiltraParametros(String.Format("CvePS = {0}", DdlPS.SelectedValue.ToString)) - If dtContratodetalleControl IsNot Nothing AndAlso dtContratodetalleControl.Rows.Count > 0 Then - Dim drContratoDetalleControl As DataRow = dtContratodetalleControl(0) - If TxtCantidad.Text.Trim.ToDouble > drContratoDetalleControl("FaltanteCantidad").ToString.ToDouble Then - Mensaje = String.Format("La cantidad del Producto/Servicio debe ser menor o igual a {0}", drContratoDetalleControl("FaltanteCantidad").ToString) - TieneError = True - End If - Else - Mensaje = "Este producto no pertenece al contrato seleccionado." - TieneError = True - End If - Else - Mensaje = "Error al consultar el contrato." - End If - End If - Else - Mensaje = "Este producto no pertenece al contrato seleccionado." - TieneError = True - End If - Else - Mensaje = "Error al consultar el contrato." + Dim dttemp As New DataTable ' GlobalDTContratos().FiltraParametros(String.Format("CveSubProyecto = {0}", DdlSubProyecto.SelectedValue.ToString)) + dttemp.Columns.Add("CveSubProyecto", GetType(Integer)) + dttemp.Columns.Add("CvePS", GetType(Integer)) + dttemp.Columns.Add("Cantidad", GetType(Decimal)) + dttemp.Columns.Add("PU", GetType(Decimal)) - End If + Dim DrPS = dttemp.NewRow + DrPS("CveSubProyecto") = DdlSubProyecto.SelectedValue.ToString.ToEntero + DrPS("CvePS") = DdlPS.SelectedValue.ToString.ToEntero + DrPS("Cantidad") = TxtCantidad.Text.Trim.ToDecimal + DrPS("PU") = TxtPrecio.Text.Trim.ToDecimal + dttemp.Rows.Add(DrPS) + + Dim dtPSInvalidos As String = ValidarPSContrato(dttemp) + If dtPSInvalidos <> "" Then + TieneError = True End If + 'If dttemp IsNot Nothing AndAlso dttemp.Rows.Count > 0 Then + ' Dim drContrato As DataRow = dttemp.Rows(0) + ' If ObjContratos.GetContratosDetalle(drContrato("CveContrato").ToString.ToEntero) Then + ' Dim dtContratodetalle As DataTable = ObjContratos.DtResultados.FiltraParametros(String.Format("CvePS = {0}", DdlPS.SelectedValue.ToString)) + ' If dtContratodetalle IsNot Nothing AndAlso dtContratodetalle.Rows.Count > 0 Then + ' Dim drContratoDetalle As DataRow = dtContratodetalle(0) + ' If Convert.ToBoolean(drContratoDetalle("LimitarCantidad")) Then + ' If ObjContratos.GetReporteContratosAvancesDetalleControl(drContrato("CveContrato").ToString.ToEntero, UsuarioActual.CveEmpresa) Then + ' Dim dtContratodetalleControl As DataTable = ObjContratos.DtResultados.FiltraParametros(String.Format("CvePS = {0}", DdlPS.SelectedValue.ToString)) + ' If dtContratodetalleControl IsNot Nothing AndAlso dtContratodetalleControl.Rows.Count > 0 Then + ' Dim drContratoDetalleControl As DataRow = dtContratodetalleControl(0) + ' If TxtCantidad.Text.Trim.ToDouble > drContratoDetalleControl("FaltanteCantidad").ToString.ToDouble Then + ' Mensaje = String.Format("La cantidad del Producto/Servicio debe ser menor o igual a {0}", drContratoDetalleControl("FaltanteCantidad").ToString) + ' TieneError = True + ' End If + ' Else + ' Mensaje = "Este producto no pertenece al contrato seleccionado." + ' TieneError = True + ' End If + ' Else + ' Mensaje = "Error al consultar el contrato." + ' End If + ' End If + ' Else + ' Mensaje = "Este producto no pertenece al contrato seleccionado." + ' TieneError = True + ' End If + ' Else + ' Mensaje = "Error al consultar el contrato." + + ' End If + 'End If ObjContratos.Dispose() If Not TieneError Then Select Case Modalidad @@ -18181,9 +18201,10 @@ Partial Class Compras_Compras GuardaAC() End If Else - Alert(Mensaje, TipoMensaje.MsgAdvertencia) + Alert(dtPSInvalidos, TipoMensaje.MsgAdvertencia) End If + 'If UsuarioActual.Empresa.Funcionalidad(577).ToString = "1" Then ' 'If UsuarioActual.CveRol = 1 Then @@ -20777,7 +20798,7 @@ Partial Class Compras_Compras DdlContratosObra.Items.Clear() - DdlContratosObra.DataSource = GlobalDTContratos.FiltraParametros(String.Format($"CveContratoTipo in (30,31) AND CveEmpresa = {UsuarioActual.CveEmpresa}")) + DdlContratosObra.DataSource = GlobalDTContratos(UsuarioActual.CveEmpresa).FiltraParametros(String.Format($"CveContratoTipo in (30,31) AND CveEmpresa = {UsuarioActual.CveEmpresa}")) DdlContratosObra.DataBind() DdlContratosObra.Items.Insert(0, New ListItem("Seleccione", "-1")) @@ -20894,6 +20915,41 @@ Partial Class Compras_Compras End If End Sub + Private Function ValidarPSContrato(DtPS As DataTable) As String + Dim Retorno As String = "" + Dim objContratos As New ClsContratos + Dim TempPS As String = JsonConvert.SerializeObject(DtPS).ToString + Dim MensajeProducto As String = "" + Dim MensajeCantidad As String = "" + Dim MensajeImporte As String = "" + If objContratos.ValidaPSContrato(TempPS) Then + If objContratos.DtResultados.Rows.Count > 0 Then + MensajeProducto = "Los siguientes productos no pertenece al contrato seleccionado: " + MensajeCantidad = "Los siguientes productos sobrepasan la cantidad faltante del contrato seleccionado: " + MensajeImporte = "Los siguientes productos sobrepasan los importes faltantes del contrato seleccionado: " + For Each dr As DataRow In objContratos.DtResultados.Rows + If dr("ProductoNoContratado").ToString.ToEntero = 1 Then + MensajeProducto += String.Format("
{0}", dr("PS")) + ElseIf dr("CantidadSobrePasada").ToString.ToEntero = 1 Then + MensajeCantidad += String.Format("
{0} - Cantidad maxima: {1}", dr("PS"), dr("FaltanteCantidad")) + ElseIf dr("ImporteSobrePasado").ToString.ToEntero = 1 Then + MensajeImporte += String.Format("
{0} - Importe maximo: {1}", dr("PS"), dr("FaltanteImporte")) + End If + Next + End If + End If + + If MensajeProducto.Length <> 64 Then + Retorno = MensajeProducto + ElseIf MensajeCantidad.Length <> 84 Then + Retorno = MensajeCantidad + ElseIf MensajeImporte.Length <> 86 Then + Retorno = MensajeImporte + End If + + Return Retorno + + End Function #End Region