From 9e62c2d2a37ea6e513c723f04a96557bc529a8da Mon Sep 17 00:00:00 2001 From: rakcsle Date: Wed, 13 Mar 2024 17:06:34 -0700 Subject: [PATCH 1/4] EMD - Activar prespuesto en compras/oc Compras --- App_Code/ClsContratos.vb | 20 ++ Compras/Compras.aspx.vb | 219 ++++++++++++--- General/SaldosIniciales.aspx.vb | 478 ++++++++++++++++++-------------- 3 files changed, 482 insertions(+), 235 deletions(-) diff --git a/App_Code/ClsContratos.vb b/App_Code/ClsContratos.vb index 6a8fe4e01..0caef9147 100644 --- a/App_Code/ClsContratos.vb +++ b/App_Code/ClsContratos.vb @@ -3197,6 +3197,26 @@ Public Class ClsContratos OnError("Ocurrió un error al obtener el reporte de presupuestos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End Try + Return Retorno + End Function + + + Public Function GetPresupuestosResumen(CveEmpresa As Integer, CveSubProyecto As Integer) 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 + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener el resumen de presupuestos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + Return Retorno End Function Public Function GetPresupuestosMensualRep(CvePresupuesto As Integer, CveTipoGasto As Integer, Agrupador As Integer, FechaI As Date, FechaF As Date, CveEmpresa As Integer, CveProyecto As Integer, CveSubProyecto As Integer, CveUsuarioConsulta As Integer, CveAgrupador As Integer) As Boolean diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 127565246..853505bdf 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -11,6 +11,9 @@ Imports Newtonsoft.Json Imports Extensiones Imports MoreLinq + + + Partial Class Compras_Compras Inherits ClsPaginas @@ -3990,6 +3993,10 @@ Partial Class Compras_Compras + If Not ValidaPresupuesto(2) Then + Exit Sub + End If + '------------------ INICIA VALIDACIONES ------------------ If MetodoPagoOC = 0 AndAlso RBLPago.SelectedValue.ToEntero <> 2 Then @@ -16596,6 +16603,12 @@ Partial Class Compras_Compras End Sub Protected Sub LbAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LbAgregar.Click + + Dim ValImporte As Decimal = (TxtCantidad.Text.ToDecimal * TxtPrecio.Text.ToDecimal).RoundSQL(2) + If Not ValidaPresupuesto(1, DdlSubProyecto.SelectedValue.ToEntero, DdlSubProyecto.SelectedItem.Text, DdlClasificacion.SelectedValue.ToEntero, DdlClasificacion.SelectedItem.Text, DdlTipoGasto.SelectedValue.ToEntero, DdlTipoGasto.SelectedItem.Text, ValImporte) Then + Exit Sub + End If + 'VALIDACIONES If Not DdlPS.SelectedValue.ToEntero > 0 Then Alert("Es necesario seleccionar un Producto o Servicio registrado en el sistema.", TipoMensaje.MsgAdvertencia) @@ -16642,39 +16655,43 @@ Partial Class Compras_Compras Dim Total As Decimal = (TxtCantidad.Text.ToDecimal * TxtPrecio.Text.ToDecimal) - TxtDescuentoModal.Text.ToDecimal - 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.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 CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows.Count > 0 Then - Autorizado = ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows(0)("Importe").ToString.ToDouble - End If - End If - If ObjCon.GetPresupuestosRep(CvePresupuesto, DdlTipoGasto.SelectedValue.ToEntero, 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.ToDouble - End If - End If - End If - End If - End If - ObjCon.Dispose() + '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.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 CvePresupuesto > 0 And Autorizado > 0 Then - Dim Diferencia As Double = (Ejercido + Total) - Autorizado - If Diferencia > 0 Then - Alert($"No hay presupuesto disponible en el subproyecto {DdlSubProyecto.SelectedItem.Text} con la clasificación {DdlClasificacion.SelectedItem.Text} y el tipo de gasto {DdlTipoGasto.SelectedItem.Text}. Se excede por {Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End If - End If + ' If ObjCon.GetPresupuestosDetalle(CvePresupuesto, -1, UsuarioActual.CveEmpresa) Then + ' If ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows.Count > 0 Then + ' Autorizado = ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows(0)("Importe").ToString.ToDouble + ' End If + ' End If + + ' If ObjCon.GetPresupuestosRep(CvePresupuesto, DdlTipoGasto.SelectedValue.ToEntero, 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.ToDouble + ' End If + ' End If + + ' End If + ' End If + ' End If + ' ObjCon.Dispose() + + ' If CvePresupuesto > 0 And Autorizado > 0 Then + ' Dim Diferencia As Double = (Ejercido + Total) - Autorizado + ' If Diferencia > 0 Then + ' Alert($"No hay presupuesto disponible en el subproyecto {DdlSubProyecto.SelectedItem.Text} con la clasificación {DdlClasificacion.SelectedItem.Text} y el tipo de gasto {DdlTipoGasto.SelectedItem.Text}. Se excede por {Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + ' End If + + 'End If ActualizaTotales = True @@ -20234,6 +20251,144 @@ Partial Class Compras_Compras Protected Sub BtnRecolecciónAplicar_Click(sender As Object, e As EventArgs) End Sub + +#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 + ''' 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 ValCveTipoGasto As Integer = -1, Optional ValTipoGasto 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) 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 TmpDT.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"), + TipoGasto = row.Field(Of String)("TipoGasto"), + CveTipoGasto = row.Field(Of Integer)("CveTipoGasto") + Into Group + Select New With { + .SubProyecto = SubProyecto, + .CveSubProyecto = CveSubProyecto, + .Clasificacion = Clasificacion, + .CveClasificacion = CveClasificacion, + .CveTipoGasto = CveTipoGasto, + .TipoGasto = TipoGasto, + .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 AndAlso + row.Field(Of Integer)("CveTipoGasto") = ValCveTipoGasto + Select row.Field(Of Decimal)("Saldo")).Sum() + If saldoTotal > 0 Then + + Dim TotalAcumuladoTabla As Decimal = (TmpDT.SUM("Total", $" CveSubProyecto = {ValCveSubProyecto} AND CveClasificacion = {ValCveClasificacion} AND CveTipoGasto = {ValCveTipoGasto} ")) + 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}, Tipo de gasto {ValTipoGasto}. 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}, Tipo de gasto {ValTipoGasto} ", 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}, Tipo de gasto {item.TipoGasto}. 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}, Tipo de gasto {item.TipoGasto}", 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 + End Class diff --git a/General/SaldosIniciales.aspx.vb b/General/SaldosIniciales.aspx.vb index 0954bbc05..dd3da1c97 100644 --- a/General/SaldosIniciales.aspx.vb +++ b/General/SaldosIniciales.aspx.vb @@ -448,264 +448,336 @@ Partial Class General_SaldosIniciales If Not validaRHPersonal(dt) Then Exit Sub End If - End If - ElseIf RblFormato.SelectedValue = "7" Then - If Not dt.Columns(0).ColumnName = "Código" Then - Alert("El nombre de la primera columna debe ser 'Código'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - - If Not dt.Columns(1).ColumnName = "Descripcion" Then - Alert("El nombre de la segunda columna debe ser 'Descripción'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - - If Not dt.Columns(2).ColumnName = "Tipo" Then - Alert("El nombre de la tercera columna debe ser 'Tipo'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - - If Not dt.Columns(3).ColumnName = "Linea" Then - Alert("El nombre de la cuarta columna debe ser 'Linea'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(4).ColumnName = "Codigo Barras" Then - Alert("El nombre de la sexta columna debe ser 'Codigo Barras'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + ElseIf RblFormato.SelectedValue = "7" Then + If Not dt.Columns(0).ColumnName = "Código" Then + Alert("El nombre de la primera columna debe ser 'Código'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(5).ColumnName = "Clasificacion" Then - Alert("El nombre de la séptima columna debe ser 'Clasificacion'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(1).ColumnName = "Descripción" Then + Alert("El nombre de la segunda columna debe ser 'Descripción'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(6).ColumnName = "Marca" Then - Alert("El nombre de la octava columna debe ser 'Marca'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(2).ColumnName = "Tipo" Then + Alert("El nombre de la tercera columna debe ser 'Tipo'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(7).ColumnName = "Modelo" Then - Alert("El nombre de la novena columna debe ser 'Modelo'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(3).ColumnName = "SubTipo" Then + Alert("El nombre de la tercera columna debe ser 'SubTipo'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(8).ColumnName = "Medida" Then - Alert("El nombre de la décima columna debe ser 'Medida'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(4).ColumnName = "Valor" Then + Alert("El nombre de la tercera columna debe ser 'Valor'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(9).ColumnName = "Tamaño de Rin" Then - Alert("El nombre de la onceava columna debe ser 'Tamaño de Rin'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(10).ColumnName = "CODIGO SAT" Then - Alert("El nombre de la diesciseisava columna debe ser 'CODIGO SAT'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(5).ColumnName = "Fecha" Then + Alert("El nombre de la tercera columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(11).ColumnName = "Clave Unidad" Then - Alert("El nombre de la diescisieteava columna debe ser 'Clave Unidad'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(6).ColumnName = "No. Serie" Then + Alert("El nombre de la tercera columna debe ser 'No. Serie'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - ElseIf RblFormato.SelectedValue = "9" Then + If Not dt.Columns(7).ColumnName = "Año" Then + Alert("El nombre de la tercera columna debe ser 'Año'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(0).ColumnName = "Cuenta" Then - Alert("El nombre de la primera columna debe ser 'Cuenta'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(8).ColumnName = "Cuenta Contable" Then + Alert("El nombre de la tercera columna debe ser 'Cuenta Contable'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(1).ColumnName = "NombreCuenta" Then - Alert("El nombre de la segunda columna debe ser 'NombreCuenta'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(9).ColumnName = "Estado" Then + Alert("El nombre de la tercera columna debe ser 'Estado'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(2).ColumnName = "TipoCuenta" Then - Alert("El nombre de la tercera columna debe ser 'TipoCuenta'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(10).ColumnName = "Proyecto" Then + Alert("El nombre de la tercera columna debe ser 'Proyecto'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(3).ColumnName = "CuentaPadre" Then - Alert("El nombre de la cuarta columna debe ser 'CuentaPadre'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(11).ColumnName = "SubProyecto" Then + Alert("El nombre de la tercera columna debe ser 'SubProyecto'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(5).ColumnName = "AgrupadorSAT" Then - Alert("El nombre de la quinta columna debe ser 'AgrupadorSAT'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(12).ColumnName = "Cliente" Then + Alert("El nombre de la tercera columna debe ser 'Cliente'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - ElseIf RblFormato.SelectedValue = "12" Then - If Not dt.Columns(0).ColumnName = "CodigoPS" Then - Alert("El nombre de la primera columna debe ser 'CodigoPS'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(13).ColumnName = "Observaciones" Then + Alert("El nombre de la tercera columna debe ser 'Observaciones'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(1).ColumnName = "Almacen" Then - Alert("El nombre de la segunda columna debe ser 'Almacen'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(14).ColumnName = "Cuenta Depreciación" Then + Alert("El nombre de la tercera columna debe ser 'Cuenta Depreciación'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(2).ColumnName = "Existencia" Then - Alert("El nombre de la tercera columna debe ser 'Existencia'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(15).ColumnName = "% Depreciación" Then + Alert("El nombre de la tercera columna debe ser '% Depreciación'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(3).ColumnName = "Valor" Then - Alert("El nombre de la cuarta columna debe ser 'Valor'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(16).ColumnName = "Cuenta Depreciación Acumulada" Then + Alert("El nombre de la tercera columna debe ser 'Cuenta Depreciación Acumulada'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + 'If Not dt.Columns(3).ColumnName = "Linea" Then + ' Alert("El nombre de la cuarta columna debe ser 'Linea'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - ElseIf RblFormato.SelectedValue = "13" Then 'ANTICIPO PROVEEDORES - If Not dt.Columns(0).ColumnName = "RFC" Then - Alert("El nombre de la primera columna debe ser 'RFC'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(4).ColumnName = "Codigo Barras" Then + ' Alert("El nombre de la sexta columna debe ser 'Codigo Barras'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(1).ColumnName = "Descripcion" Then - Alert("El nombre de la segunda columna debe ser 'Descripcion'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(5).ColumnName = "Clasificacion" Then + ' Alert("El nombre de la séptima columna debe ser 'Clasificacion'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(2).ColumnName = "Fecha" Then - Alert("El nombre de la tercera columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(6).ColumnName = "Marca" Then + ' Alert("El nombre de la octava columna debe ser 'Marca'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(3).ColumnName = "Importe" Then - Alert("El nombre de la cuarta columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(7).ColumnName = "Modelo" Then + ' Alert("El nombre de la novena columna debe ser 'Modelo'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(4).ColumnName = "Moneda" Then - Alert("El nombre de la cuarta columna debe ser 'Moneda'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(8).ColumnName = "Medida" Then + ' Alert("El nombre de la décima columna debe ser 'Medida'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(5).ColumnName = "TipoCambio" Then - Alert("El nombre de la cuarta columna debe ser 'TipoCambio'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(9).ColumnName = "Tamaño de Rin" Then + ' Alert("El nombre de la onceava columna debe ser 'Tamaño de Rin'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(6).ColumnName = "CuentaContable" Then - Alert("El nombre de la cuarta columna debe ser 'CuentaContable'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + 'If Not dt.Columns(10).ColumnName = "CODIGO SAT" Then + ' Alert("El nombre de la diesciseisava columna debe ser 'CODIGO SAT'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - ElseIf RblFormato.SelectedValue = "14" Then 'ANTICIPO CLIENTES + 'If Not dt.Columns(11).ColumnName = "Clave Unidad" Then + ' Alert("El nombre de la diescisieteava columna debe ser 'Clave Unidad'. Favor de corregirlo", TipoMensaje.MsgError) + ' Exit Sub + 'End If - If Not dt.Columns(0).ColumnName = "RFC" Then - Alert("El nombre de la primera columna debe ser 'RFC'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + ElseIf RblFormato.SelectedValue = "9" Then - If Not dt.Columns(1).ColumnName = "Descripcion" Then - Alert("El nombre de la segunda columna debe ser 'Descripcion'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(0).ColumnName = "Cuenta" Then + Alert("El nombre de la primera columna debe ser 'Cuenta'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(2).ColumnName = "Fecha" Then - Alert("El nombre de la tercera columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(1).ColumnName = "NombreCuenta" Then + Alert("El nombre de la segunda columna debe ser 'NombreCuenta'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(3).ColumnName = "Importe" Then - Alert("El nombre de la cuarta columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(2).ColumnName = "TipoCuenta" Then + Alert("El nombre de la tercera columna debe ser 'TipoCuenta'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(4).ColumnName = "Moneda" Then - Alert("El nombre de la cuarta columna debe ser 'Moneda'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(3).ColumnName = "CuentaPadre" Then + Alert("El nombre de la cuarta columna debe ser 'CuentaPadre'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(5).ColumnName = "TipoCambio" Then - Alert("El nombre de la cuarta columna debe ser 'TipoCambio'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(5).ColumnName = "AgrupadorSAT" Then + Alert("El nombre de la quinta columna debe ser 'AgrupadorSAT'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(6).ColumnName = "CuentaContable" Then - Alert("El nombre de la cuarta columna debe ser 'CuentaContable'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + ElseIf RblFormato.SelectedValue = "12" Then + If Not dt.Columns(0).ColumnName = "CodigoPS" Then + Alert("El nombre de la primera columna debe ser 'CodigoPS'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - ElseIf RblFormato.SelectedValue = "15" Then 'BANCOS + If Not dt.Columns(1).ColumnName = "Almacen" Then + Alert("El nombre de la segunda columna debe ser 'Almacen'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(0).ColumnName = "CuentaBancaria" Then - Alert("El nombre de la primera columna debe ser 'CuentaBancaria'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(1).ColumnName = "Banco" Then - Alert("El nombre de la primera columna debe ser 'Banco'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If - If Not dt.Columns(2).ColumnName = "Importe" Then - Alert("El nombre de la segunda columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(2).ColumnName = "Existencia" Then + Alert("El nombre de la tercera columna debe ser 'Existencia'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(3).ColumnName = "Moneda" Then - Alert("El nombre de la segunda columna debe ser 'Moneda'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(3).ColumnName = "Valor" Then + Alert("El nombre de la cuarta columna debe ser 'Valor'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(4).ColumnName = "TipoCambio" Then - Alert("El nombre de la segunda columna debe ser 'TipoCambio'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + ElseIf RblFormato.SelectedValue = "13" Then 'ANTICIPO PROVEEDORES - If Not dt.Columns(5).ColumnName = "Fecha" Then - Alert("El nombre de la cuarta columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(0).ColumnName = "RFC" Then + Alert("El nombre de la primera columna debe ser 'RFC'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(6).ColumnName = "Descripcion" Then - Alert("El nombre de la cuarta columna debe ser 'Descripcion'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(1).ColumnName = "Descripcion" Then + Alert("El nombre de la segunda columna debe ser 'Descripcion'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(7).ColumnName = "CuentaContable" Then - Alert("El nombre de la tercera columna debe ser 'CuentaContable'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(2).ColumnName = "Fecha" Then + Alert("El nombre de la tercera columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - ElseIf RblFormato.SelectedValue = "16" Then 'CLASIFICACIONES + If Not dt.Columns(3).ColumnName = "Importe" Then + Alert("El nombre de la cuarta columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(0).ColumnName = "Clasificacion" Then - Alert("El nombre de la primera columna debe ser 'Clasificacion'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(4).ColumnName = "Moneda" Then + Alert("El nombre de la cuarta columna debe ser 'Moneda'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(1).ColumnName = "Categoria" Then - Alert("El nombre de la segunda columna debe ser 'Categoria'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(5).ColumnName = "TipoCambio" Then + Alert("El nombre de la cuarta columna debe ser 'TipoCambio'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(2).ColumnName = "UsoClasificacion" Then - Alert("El nombre de la segunda columna debe ser 'UsoClasificacion'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + If Not dt.Columns(6).ColumnName = "CuentaContable" Then + Alert("El nombre de la cuarta columna debe ser 'CuentaContable'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(3).ColumnName = "CuentaContableIngreso" Then - Alert("El nombre de la segunda columna debe ser 'CuentaContableIngreso'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub - End If + ElseIf RblFormato.SelectedValue = "14" Then 'ANTICIPO CLIENTES + + If Not dt.Columns(0).ColumnName = "RFC" Then + Alert("El nombre de la primera columna debe ser 'RFC'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(1).ColumnName = "Descripcion" Then + Alert("El nombre de la segunda columna debe ser 'Descripcion'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(2).ColumnName = "Fecha" Then + Alert("El nombre de la tercera columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(3).ColumnName = "Importe" Then + Alert("El nombre de la cuarta columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(4).ColumnName = "Moneda" Then + Alert("El nombre de la cuarta columna debe ser 'Moneda'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(5).ColumnName = "TipoCambio" Then + Alert("El nombre de la cuarta columna debe ser 'TipoCambio'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(6).ColumnName = "CuentaContable" Then + Alert("El nombre de la cuarta columna debe ser 'CuentaContable'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + ElseIf RblFormato.SelectedValue = "15" Then 'BANCOS + + If Not dt.Columns(0).ColumnName = "CuentaBancaria" Then + Alert("El nombre de la primera columna debe ser 'CuentaBancaria'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(1).ColumnName = "Banco" Then + Alert("El nombre de la primera columna debe ser 'Banco'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + If Not dt.Columns(2).ColumnName = "Importe" Then + Alert("El nombre de la segunda columna debe ser 'Importe'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(3).ColumnName = "Moneda" Then + Alert("El nombre de la segunda columna debe ser 'Moneda'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(4).ColumnName = "TipoCambio" Then + Alert("El nombre de la segunda columna debe ser 'TipoCambio'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(5).ColumnName = "Fecha" Then + Alert("El nombre de la cuarta columna debe ser 'Fecha'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(6).ColumnName = "Descripcion" Then + Alert("El nombre de la cuarta columna debe ser 'Descripcion'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(7).ColumnName = "CuentaContable" Then + Alert("El nombre de la tercera columna debe ser 'CuentaContable'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + ElseIf RblFormato.SelectedValue = "16" Then 'CLASIFICACIONES + + If Not dt.Columns(0).ColumnName = "Clasificacion" Then + Alert("El nombre de la primera columna debe ser 'Clasificacion'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(1).ColumnName = "Categoria" Then + Alert("El nombre de la segunda columna debe ser 'Categoria'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(2).ColumnName = "UsoClasificacion" Then + Alert("El nombre de la segunda columna debe ser 'UsoClasificacion'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(3).ColumnName = "CuentaContableIngreso" Then + Alert("El nombre de la segunda columna debe ser 'CuentaContableIngreso'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If + + If Not dt.Columns(4).ColumnName = "CuentaContableGasto" Then + Alert("El nombre de la cuarta columna debe ser 'CuentaContableGasto'. Favor de corregirlo", TipoMensaje.MsgError) + Exit Sub + End If - If Not dt.Columns(4).ColumnName = "CuentaContableGasto" Then - Alert("El nombre de la cuarta columna debe ser 'CuentaContableGasto'. Favor de corregirlo", TipoMensaje.MsgError) - Exit Sub End If End If - dt.TableName = "Datos" Dim NumRows As Integer = dt.Rows.Count From 711899ffe4b70f6092b4c3c54491b212602e5adf Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 13 Mar 2024 18:07:19 -0700 Subject: [PATCH 2/4] --Aplicacion de RNC a remisiones, movimientos de almacen --- Inventarios/EntregaAlmacen.aspx.vb | 16 ++++++++++++---- Ventas/Ventas.aspx.vb | 11 +++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index b2012351d..56cf378a4 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -520,11 +520,11 @@ Partial Class Inventarios_EntregaAlmacen If UsuarioActual.TienePermisoProceso(266) AndAlso UsuarioActual.TienePermisoProceso(267) Then - DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ped','PDev','DPe','Ant')") + DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ped','PDev','DPe','Ant','RNC')") ElseIf UsuarioActual.TienePermisoProceso(266) AndAlso Not UsuarioActual.TienePermisoProceso(267) Then - DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ant')") + DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Dev','Rem','Traspaso','Ant','RNC')") ElseIf UsuarioActual.TienePermisoProceso(267) AndAlso Not UsuarioActual.TienePermisoProceso(266) Then - DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ped','PDev','DPe')") + DtPendientes = ObjInventarios.DtResultados.FiltraParametros("TipoDocto IN ('Ped','PDev','DPe','RNC')") Else DtPendientes = ObjInventarios.DtResultados End If @@ -1817,7 +1817,7 @@ Partial Class Inventarios_EntregaAlmacen If Gvr.DataKey("CantidadF").ToDecimal - TxtCantidad.Text.ToDecimal - 1 >= 0 Then ''VALIDA EXISTENCIA - If Not TipoDocto.Contiene("Dev") Then + If Not TipoDocto.Contiene("Dev", "RNC") Then If TipoMovimiento = 1 Then Dim ObjInventario As New ClsInventarios Dim Existencia As Decimal = ObjInventario.GetExistenciasPS(Gvr.DataKey("CvePS").ToString().ToEntero(), Gvr.DataKey("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero(), FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=If(TipoEntrega = 2, 1, -1)) @@ -3058,6 +3058,14 @@ Partial Class Inventarios_EntregaAlmacen ErrorMovInv = True End If End If + + If Not ErrorMovInv And EsDevolucionVenta = 0 AndAlso TipoDocto = "RNC" Then + If Not ObjVentas.UpdateVentasDevolucionAlmacen(2, CveVentaSurtir) Then + TextoError.AppendFormat("Ocurrió un error al hacer la devolucion. Por favor vuelva a intentar.") + ErrorMovInv = True + End If + End If + Dim TotalVirtual As Decimal = 0 ' COMIENZA: VIRTUAL diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 121ef73c9..1196eebc9 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -13519,6 +13519,13 @@ Partial Class Ventas If CveAlmacenTraspasoDestino <= 0 And factura.TipoDocto = "Rem" Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de entrega por adelantado de la sucursal.") End If + + If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then + If factura.TipoDocto = "RNC" And CveVentaDevolucion > 0 Then + CveAlmacenTraspasoOrigen = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() + CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 1 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() + End If + End If End If 'ASIGNA EL VALOR DEL ALMACEN AL PEDIDO @@ -23816,7 +23823,7 @@ Partial Class Ventas #Region " INVENTARIO POR ENTREGA" Private Sub InventarioMov(Optional CveVentaPadre As Integer = -1) - If CveVentaPadre > 0 AndAlso DdlTipoComprobante.SelectedValue <> "Dev" Then + If CveVentaPadre > 0 AndAlso Not DdlTipoComprobante.SelectedValue.Contiene("Dev", "RNC") Then Dim RowVentas As DataRow = Nothing Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(CveVentaPadre, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then @@ -23826,7 +23833,7 @@ Partial Class Ventas 'SI TIENE UN ANTICIPO RELACIONADO O VIENE DE UNA REFACTURACION If RowVentas IsNot Nothing Then - If RowVentas("TipoDocto").ToString().Contiene("Ing", "Ant", "Ped") AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then + If RowVentas("TipoDocto").ToString().Contiene("Ing", "Ant", "Ped") AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing") Then CargaInventario(Me.CveVenta) End If End If From 16f58c37e26bb4ee17950352fdd2c625ce59cd8d Mon Sep 17 00:00:00 2001 From: rakcsle Date: Thu, 14 Mar 2024 10:49:03 -0700 Subject: [PATCH 3/4] EMD - Activar prespuesto en compras/oc Orden de Compra --- App_Code/ClsContratos.vb | 3 +- OC/OC.aspx.vb | 206 +++++++++++++++++++++++++++++++++------ 2 files changed, 177 insertions(+), 32 deletions(-) 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 + From c41d5bdff639cf6b93a9acafd5c5efca88a172fe Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 14 Mar 2024 17:27:29 -0700 Subject: [PATCH 4/4] --FIX. ajuste de 1 centavo en garantias totales --- Ventas/PV.aspx.vb | 61 ++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/Ventas/PV.aspx.vb b/Ventas/PV.aspx.vb index 1a66ff435..d22776991 100644 --- a/Ventas/PV.aspx.vb +++ b/Ventas/PV.aspx.vb @@ -7383,51 +7383,45 @@ Partial Class PV TxtImporteAjuste.Text = (TxtPorcentajeAjuste.Text.ToDecimal * TxtPUFactura.Text.ToDecimal).FormatoNumero ImportePagarCliente = TxtImporteAjuste.Text.ToDecimal - ''ajustar un centavo - If PorcentajeAjuste = 0 Then 'PONE UN PAGO DE UN CENTAVO, PARA EL TIMBRADO - ' TxtImporteAjuste.Text = (TxtImporteAjuste.Text.ToDecimal - 0.01D).FormatoNumero - TxtImporteAjuste.Text = "0.01" - End If - Dim CargoVendido As Decimal = 0 - Dim CargoGarantia As Decimal = 0 + Dim CargoGarantia As Decimal = 0 Dim CveTamaño As Integer = 0 If DdlPSAjuste.SelectedValue.ToEntero > 0 Then - Dim Dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, DdlPSAjuste.SelectedValue.ToEntero).FiltroPrimero("") - If Dr IsNot Nothing Then - CargoGarantia = Dr("Cargo").ToString.ToDecimal - End If + Dim Dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, DdlPSAjuste.SelectedValue.ToEntero).FiltroPrimero("") + If Dr IsNot Nothing Then + CargoGarantia = Dr("Cargo").ToString.ToDecimal End If + End If - If DdlPS.SelectedValue.ToEntero > 0 Then - Dim Dr As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=DdlPS.SelectedValue.ToEntero).FiltroPrimero("") - If Dr IsNot Nothing Then - CveTamaño = Dr("CveTamaño").ToString.ToEntero - End If + If DdlPS.SelectedValue.ToEntero > 0 Then + Dim Dr As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=DdlPS.SelectedValue.ToEntero).FiltroPrimero("") + If Dr IsNot Nothing Then + CveTamaño = Dr("CveTamaño").ToString.ToEntero End If + End If - Dim DrCargo As DataRow = GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($" CveTamaño = {CveTamaño}") - If DrCargo IsNot Nothing Then + Dim DrCargo As DataRow = GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($" CveTamaño = {CveTamaño}") + If DrCargo IsNot Nothing Then - CargoVendido = DrCargo("Cargo").ToString.ToDecimal + CargoVendido = DrCargo("Cargo").ToString.ToDecimal - End If + End If - 'el ajuste no puede ser mayor al precio de lo vendido de nuevo - If (TxtPrecio.Text.ToDouble - ((TxtPUFactura.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) - (CargoVendido - CargoGarantia))) < 0 Then + 'el ajuste no puede ser mayor al precio de lo vendido de nuevo + If (TxtPrecio.Text.ToDouble - ((TxtPUFactura.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) - (CargoVendido - CargoGarantia))) < 0 Then - TxtImporteAjuste.Text = "0.00" - CargoGarantia = CargoVendido - ImportePagarCliente = 0 - End If - ImportePagarCliente = (TxtPrecio.Text.ToDouble - ((TxtPUFactura.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) - (CargoVendido - CargoGarantia))).ToDecimal + TxtImporteAjuste.Text = "0.00" + CargoGarantia = CargoVendido + ImportePagarCliente = 0 + End If + ImportePagarCliente = (TxtPrecio.Text.ToDouble - ((TxtPUFactura.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) - (CargoVendido - CargoGarantia))).ToDecimal - TxtImporteAjuste.ToolTip = $"La diferencia de ajuste fue: {(TxtPrecio.Text.ToDouble - TxtImporteAjuste.Text.ToDouble).FormatoNumero()}. La diferencia de tamaños fue: {(CargoVendido - CargoGarantia).FormatoNumero}." - TxtImporteAjuste.Text = ((TxtPUFactura.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) - (CargoVendido - CargoGarantia)).FormatoNumero - 'TxtPagarCliente.Text = ImportePagarCliente.FormatoNumero - Else - Alert("El producto no tiene ajuste en ese periodo", TipoMensaje.MsgAdvertencia) + TxtImporteAjuste.ToolTip = $"La diferencia de ajuste fue: {(TxtPrecio.Text.ToDouble - TxtImporteAjuste.Text.ToDouble).FormatoNumero()}. La diferencia de tamaños fue: {(CargoVendido - CargoGarantia).FormatoNumero}." + TxtImporteAjuste.Text = ((TxtPUFactura.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) - (CargoVendido - CargoGarantia)).FormatoNumero + 'TxtPagarCliente.Text = ImportePagarCliente.FormatoNumero + Else + Alert("El producto no tiene ajuste en ese periodo", TipoMensaje.MsgAdvertencia) 'cuando no está registrada, no da ajuste TxtImporteAjuste.ToolTip = "El producto no tiene ajuste en ese periodo" TxtImporteAjuste.Text = "0.00" @@ -7447,6 +7441,7 @@ Partial Class PV Alert("Especificar el producto a recibir") End If End If + Catch ex As Exception OnError("Ocurrió un error al recalcular el costo", ex) End Try @@ -7551,7 +7546,7 @@ Partial Class PV Dr("Descuento") = Math.Round(TxtImporteAjuste.Text.ToDouble, NumeroDecimales) 'Dr("Descuento") = Math.Round((TxtPrecio.Text.ToDouble - TxtImporteAjuste.Text.ToDouble) + (CargoActual - CargoAnterior), NumeroDecimales) - If Dr("Descuento").ToString.ToDouble > TxtPrecio.Text.ToDouble Then Dr("Descuento") = TxtPrecio.Text.ToDouble + If Dr("Descuento").ToString.ToDouble >= TxtPrecio.Text.ToDouble Then Dr("Descuento") = TxtPrecio.Text.ToDouble - 0.01D Dim TotalCalculableImpuestos As Decimal = (Dr("Cantidad").ToString.ToDecimal * (Dr("PU").ToString.ToDecimal)) - Dr("Descuento").ToString.ToDecimal Dr("ImporteIVA") = Math.Round(Dr("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales)