diff --git a/App_Code/ClsContratos.vb b/App_Code/ClsContratos.vb
index 0caef9147..8ed9302c9 100644
--- a/App_Code/ClsContratos.vb
+++ b/App_Code/ClsContratos.vb
@@ -3201,13 +3201,14 @@ Public Class ClsContratos
End Function
- Public Function GetPresupuestosResumen(CveEmpresa As Integer, CveSubProyecto As Integer) As Boolean
+ Public Function GetPresupuestosResumen(CveEmpresa As Integer, CveSubProyecto As Integer, Optional Opcion As Integer = 1) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Con_PresupuestosResumenGet")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
.Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto
+ .Add("@Opcion", SqlDbType.Int).Value = Opcion
End With
Try
diff --git a/OC/OC.aspx.vb b/OC/OC.aspx.vb
index 38415f4f5..383d73349 100644
--- a/OC/OC.aspx.vb
+++ b/OC/OC.aspx.vb
@@ -2211,40 +2211,50 @@ Partial Class OC_OC
Exit Sub
End If
- If UsuarioActual.Empresa.Funcionalidad(532) = "1" Then
- Dim ObjCon As New ClsContratos
- Dim CvePresupuesto As Integer = 0
- Dim Autorizado As Decimal = 0
- Dim Ejercido As Decimal = 0
- If ObjCon.GetPresupuestos(-1, "-1", DdlSubProyecto.SelectedValue.ToEntero, 2, -1, UsuarioActual.CveEmpresa) Then
- If ObjCon.DtResultados.Rows.Count > 0 Then
- CvePresupuesto = ObjCon.DtResultados.Rows(0)("CvePresupuesto").ToString.ToEntero
- If CvePresupuesto > 0 Then
- If ObjCon.GetPresupuestosDetalle(CvePresupuesto, -1, UsuarioActual.CveEmpresa) Then
- If ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND Importe > 0").Rows.Count > 0 Then
- Autorizado = ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND Importe > 0").Rows(0)("Importe").ToString.ToDecimal
- End If
- End If
- If ObjCon.GetPresupuestosRep(CvePresupuesto, -1, 1, $"01/09/{NowADS().Year - 1}".ToDate, NowADS(), UsuarioActual.CveEmpresa, DdlProyecto.SelectedValue.ToEntero,
- DdlSubProyecto.SelectedValue.ToEntero, UsuarioActual.CveUsuario, DdlClasificacion.SelectedValue.ToEntero) Then
- If ObjCon.DtResultados.Rows.Count > 0 Then
- Ejercido = ObjCon.DtResultados.Rows(0)("Ejercido").ToString.ToDecimal
- End If
- End If
- End If
- End If
- End If
- ObjCon.Dispose()
- If CvePresupuesto > 0 And Autorizado > 0 Then
- Dim Diferencia As Decimal = (Ejercido + If(txtPrecioUnitario.Text.ToDecimal > 0, (txtPrecioUnitario.Text.ToDecimal * TxtCant.Text.ToDecimal) - TxtDescuentoAdd.Text.ToDecimal, 0)) - Autorizado
- If Diferencia > 0 Then
- Alert($"No hay presupuesto disponible en el subproyecto {DdlSubProyecto.SelectedItem.Text} y la clasificación {DdlClasificacion.SelectedItem.Text} se excede por {Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
- End If
+
+ Dim ValImporte As Decimal = (TxtCant.Text.ToDecimal * txtPrecioUnitario.Text.ToDecimal).RoundSQL(2)
+ If Not ValidaPresupuesto(1, DdlSubProyecto.SelectedValue.ToEntero, DdlSubProyecto.SelectedItem.Text, DdlClasificacion.SelectedValue.ToEntero, DdlClasificacion.SelectedItem.Text, ValImporte) Then
+ Exit Sub
End If
+ 'If UsuarioActual.Empresa.Funcionalidad(532) = "1" Then
+
+ 'Dim ObjCon As New ClsContratos
+ 'Dim CvePresupuesto As Integer = 0
+ 'Dim Autorizado As Decimal = 0
+ 'Dim Ejercido As Decimal = 0
+ 'If ObjCon.GetPresupuestos(-1, "-1", DdlSubProyecto.SelectedValue.ToEntero, 2, -1, UsuarioActual.CveEmpresa) Then
+ ' If ObjCon.DtResultados.Rows.Count > 0 Then
+ ' CvePresupuesto = ObjCon.DtResultados.Rows(0)("CvePresupuesto").ToString.ToEntero
+ ' If CvePresupuesto > 0 Then
+ ' If ObjCon.GetPresupuestosDetalle(CvePresupuesto, -1, UsuarioActual.CveEmpresa) Then
+ ' If ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND Importe > 0").Rows.Count > 0 Then
+ ' Autorizado = ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND Importe > 0").Rows(0)("Importe").ToString.ToDecimal
+ ' End If
+ ' End If
+ ' If ObjCon.GetPresupuestosRep(CvePresupuesto, -1, 1, $"01/09/{NowADS().Year - 1}".ToDate, NowADS(), UsuarioActual.CveEmpresa, DdlProyecto.SelectedValue.ToEntero,
+ ' DdlSubProyecto.SelectedValue.ToEntero, UsuarioActual.CveUsuario, DdlClasificacion.SelectedValue.ToEntero) Then
+ ' If ObjCon.DtResultados.Rows.Count > 0 Then
+ ' Ejercido = ObjCon.DtResultados.Rows(0)("Ejercido").ToString.ToDecimal
+ ' End If
+ ' End If
+ ' End If
+ ' End If
+ 'End If
+ 'ObjCon.Dispose()
+
+ 'If CvePresupuesto > 0 And Autorizado > 0 Then
+ ' Dim Diferencia As Decimal = (Ejercido + If(txtPrecioUnitario.Text.ToDecimal > 0, (txtPrecioUnitario.Text.ToDecimal * TxtCant.Text.ToDecimal) - TxtDescuentoAdd.Text.ToDecimal, 0)) - Autorizado
+ ' If Diferencia > 0 Then
+ ' Alert($"No hay presupuesto disponible en el subproyecto {DdlSubProyecto.SelectedItem.Text} y la clasificación {DdlClasificacion.SelectedItem.Text} se excede por {Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia)
+ ' Exit Sub
+ ' End If
+ 'End If
+ 'End If
+
+
+
Dim RetISR As Decimal = DrPS("RetISR").ToString.ToDecimal
Dim RetIVA As Decimal = DrPS("RetIVA").ToString.ToDecimal
@@ -2624,6 +2634,10 @@ Partial Class OC_OC
'VALIDACIONES PARA GUARDAR
If ValidaGuardar() Then Exit Sub
+ If Not ValidaPresupuesto(2) Then
+ Exit Sub
+ End If
+
Dim MsgError As String = "Hubo un error al registrar"
'VARIABLES
Dim CveProveedorSucursal As Integer = -1
@@ -8952,6 +8966,136 @@ Partial Class OC_OC
End Function
+#Region "PRESUPUESTOS"
+
+ '''
+ ''' Valida si hay presupuesto, Se valida con base en CveSubProyecto, CveClasificacion y CveTipoGasto
+ '''
+ ''' Int 1 Indica que es una valiadcion al agregar el Producto o servicio 2 Indica validacion General antes de guardae .
+ ''' Usado al validar Presupuesto cuando se agrega un producto o servicio
+ ''' Usado al validar Presupuesto cuando se agrega un producto o servicio
+ ''' Usado al validar Presupuesto cuando se agrega un producto o servicio
+ ''' Usado al validar Presupuesto cuando se agrega un producto o servicio
+ ''' Usado al validar Presupuesto cuando se agrega un producto o servicio
+ ''' Verdadero si hay presupuesto, Falso si no hay presupuesto.
+ Public Function ValidaPresupuesto(Opcion As Integer, Optional ValCveSubProyecto As Integer = -1, Optional ValSubProyecto As String = "", Optional ValCveClasificacion As Integer = -1, Optional ValClasificacion As String = "",
+ Optional ValImporte As Decimal = 0) As Boolean
+
+ Dim respuesta As Boolean = False
+
+ If UsuarioActual.Empresa.Funcionalidad(532) = "1" Then
+
+ Dim ObjCon As New ClsContratos
+ Dim CvePresupuesto As Integer = 0
+ Dim Autorizado As Double = 0
+ Dim Ejercido As Double = 0
+
+ If ObjCon.GetPresupuestosResumen(UsuarioActual.CveEmpresa, -1, 2) Then
+
+ Dim FechaCompra As Date = TxtFecha.Text.ToDate
+
+ Dim resultadosFiltrados = From row In ObjCon.DtResultados.AsEnumerable()
+ Where FechaCompra >= row.Field(Of Date)("FechaInicio") AndAlso
+ FechaCompra <= row.Field(Of Date)("FechaFin")
+ Select row
+
+
+ If resultadosFiltrados.Count > 0 Then
+
+ Dim EnumAgrupado = (From row In DtDetalle.AsEnumerable()
+ Group row By
+ SubProyecto = row.Field(Of String)("SubProyecto"),
+ CveSubProyecto = row.Field(Of Integer)("CveSubProyecto"),
+ Clasificacion = row.Field(Of String)("Clasificacion"),
+ CveClasificacion = row.Field(Of Integer)("CveClasificacion")
+ Into Group
+ Select New With {
+ .SubProyecto = SubProyecto,
+ .CveSubProyecto = CveSubProyecto,
+ .Clasificacion = Clasificacion,
+ .CveClasificacion = CveClasificacion,
+ .TotalSum = Group.Sum(Function(r) r.Field(Of Decimal)("Total"))
+ }).ToList()
+
+
+ If Opcion = 1 Then
+
+ Dim saldoTotal As Decimal = (From row In resultadosFiltrados
+ Where row.Field(Of Integer)("CveSubProyecto") = ValCveSubProyecto AndAlso
+ row.Field(Of Integer)("CveClasificacion") = ValCveClasificacion
+ Select row.Field(Of Decimal)("Saldo")).Sum()
+ If saldoTotal > 0 Then
+
+ Dim TotalAcumuladoTabla As Decimal = (DtDetalle.SUM("Total", $" CveSubProyecto = {ValCveSubProyecto} AND CveClasificacion = {ValCveClasificacion} "))
+ Dim Diferencia As Decimal = saldoTotal - TotalAcumuladoTabla - ValImporte
+
+ If (Diferencia) < 0 Then
+ Alert($"No hay presupuesto disponible en el subproyecto {ValSubProyecto} con la clasificación {ValClasificacion}. Se excede por {Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+
+ Else
+ respuesta = True
+ End If
+
+ Else
+ Alert($"No hay presupuesto disponible en el subproyecto {ValSubProyecto} con la clasificación {ValClasificacion}.", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ End If
+
+ Else
+ For Each item In EnumAgrupado
+
+ Dim saldoTotal As Decimal = (From row In resultadosFiltrados
+ Where row.Field(Of Integer)("CveSubProyecto") = item.CveSubProyecto AndAlso
+ row.Field(Of Integer)("CveClasificacion") = item.CveClasificacion
+ Select row.Field(Of Decimal)("Saldo")).Sum()
+ If saldoTotal > 0 Then
+
+ Dim Diferencia As Decimal = saldoTotal - item.TotalSum
+
+ If (Diferencia) < 0 Then
+ Alert($"No hay presupuesto disponible en el subproyecto {item.SubProyecto} con la clasificación {item.Clasificacion}. Se excede por {Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ Exit For
+ Else
+ respuesta = True
+ End If
+
+ Else
+ Alert($"No hay presupuesto disponible en el subproyecto {item.SubProyecto} con la clasificación {item.Clasificacion}.", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ Exit For
+ End If
+
+ Next
+ End If
+
+
+
+
+ Else
+ Alert("No hay presupuestos.", TipoMensaje.MsgAdvertencia)
+ End If
+ Else
+ Alert("No hay presupuestos.", TipoMensaje.MsgAdvertencia)
+ End If
+
+ ObjCon.Dispose()
+
+
+
+ Else
+ respuesta = True
+ End If
+
+
+ Return respuesta
+
+ End Function
+
+
+#End Region
+