Public Class CalculosTablaDiasFecha Private Operaciones As New Operaciones function AgregarFechaIngresos(ByRef dgvIngresos As DataGridView, ByRef dtpFechaLiquidacion As DateTimePicker, ByRef NombreCampoFecha As String, ByRef TipoBase As Integer, ByRef Periodicidad As String, ByRef TipoCalculoFecha As String, ByRef Index As Integer) Dim Fecha As Date = Date.Now.Date Dim IndexAnterior As Integer = Index - 1 Dim FechaAnterior As Date = Date.Today.Date Dim FechaActual As Date = Date.Today.Date Dim FechaLiquidacion As Date = dtpFechaLiquidacion.Value Dim DiaFijo As Integer = FechaLiquidacion.Day If Index > 0 Then FechaAnterior = Operaciones.ConvertirFecha(dgvIngresos.Rows(IndexAnterior).Cells(NombreCampoFecha).Value) FechaActual = CalcularFecha(FechaAnterior, DiaFijo, TipoCalculoFecha, Periodicidad, TipoBase) Fecha = Format((FechaActual), "dd/MM/yyyy").ToString Else FechaActual = CalcularFecha(Operaciones.ConvertirFecha(FechaLiquidacion), DiaFijo, TipoCalculoFecha, Periodicidad, TipoBase) Fecha = Format(FechaActual, "dd/MM/yyyy").ToString End If Return Fecha End function Private Function CalcularFecha(ByVal FechaInicial As Date, ByVal DiaFijo As Integer, ByRef FormaCalcularFechas As String, ByRef Periodicidad As String, ByRef TipoBase As Integer) 'Declaracion de Variables' Dim BaseDias As Integer = 0 Dim FechaFinal As Date = Date.Today.Date If (TipoBase = 0 Or TipoBase = 2) Then BaseDias = 360 If FormaCalcularFechas = "FinMes" Then FechaFinal = Operaciones.FechaFinMes(FechaInicial, Periodicidad, BaseDias) ElseIf FormaCalcularFechas = "Mensual" Then FechaFinal = Operaciones.FechaMensual(FechaInicial, Periodicidad, FormaCalcularFechas, 0, DiaFijo, BaseDias) End If ElseIf TipoBase = 1 Or TipoBase = 3 Then BaseDias = 365 If FormaCalcularFechas = "FinMes" Then FechaFinal = Operaciones.FechaFinMes(FechaInicial, Periodicidad, BaseDias) ElseIf FormaCalcularFechas = "Mensual" Then FechaFinal = Operaciones.FechaMensual(FechaInicial, Periodicidad, FormaCalcularFechas, 0, DiaFijo, BaseDias) End If End If Return FechaFinal End Function Function AgregarCorrelativo(ByRef dgvTabla As DataGridView, ByRef PosicionIndex As Integer) Dim Cantidad As Integer = PosicionIndex Dim Index As Integer = 0 Dim Correlativo As Integer = 0 While Index <= Cantidad Correlativo = Index + 1 Index += 1 End While Return Correlativo End Function Function AgregarDias(ByRef dgvTabla As DataGridView, ByRef dtpFechaLiquidacion As DateTimePicker, ByRef TipoBase As Integer, ByRef Periodicidad As String, ByRef FormaCalcularFechas As String, ByRef NombreCampoFecha As String, ByRef NombreCampoDias As String, ByRef Index As Integer) Dim IndexAnterior As Integer = Index - 1 Dim FechaAnterior As String = String.Empty Dim FechaActual As String = String.Empty Dim FechaLiquidacion As Date = Format(dtpFechaLiquidacion.Value, "dd/MM/yyyy") Dim BaseCalculo As Integer = 0 Dim Meses As Integer = 0 Dim DiasFinales As Integer = 0 Dim CantidadDiasNormal360 As Integer = 0 Dim CantidadDias360 As Integer = 0 If Periodicidad = "M" Then Meses = 1 ElseIf Periodicidad = "T" Then Meses = 3 ElseIf Periodicidad = "S" Then Meses = 6 ElseIf Periodicidad = "A" Then Meses = 12 End If CantidadDiasNormal360 = Meses * 30 If TipoBase = 0 Or TipoBase = 2 Then BaseCalculo = 360 ElseIf TipoBase = 1 Or TipoBase = 3 Then BaseCalculo = 365 End If If Index > 0 Then FechaAnterior = Operaciones.ConvertirFecha(dgvTabla.Rows(IndexAnterior).Cells(NombreCampoFecha).Value) FechaActual = Operaciones.ConvertirFecha(dgvTabla.Rows(Index).Cells(NombreCampoFecha).Value) If BaseCalculo = 360 Then If FormaCalcularFechas = "FinMes" Then DiasFinales = Operaciones.Base360(FechaAnterior, FechaActual) ElseIf FormaCalcularFechas = "Mensual" Then DiasFinales = CantidadDiasNormal360 End If ElseIf BaseCalculo = 365 Then DiasFinales = Operaciones.Base365(FechaAnterior, FechaActual) End If Else 'Primera Fecha' FechaActual = Operaciones.ConvertirFecha(dgvTabla.Rows(Index).Cells(NombreCampoFecha).Value) If BaseCalculo = 360 Then If FormaCalcularFechas = "FinMes" Then DiasFinales = Operaciones.Base360(FechaLiquidacion, FechaActual) ElseIf FormaCalcularFechas = "Mensual" Then DiasFinales = CantidadDiasNormal360 End If ElseIf BaseCalculo = 365 Then DiasFinales = Operaciones.Base365(FechaLiquidacion, FechaActual) End If End If Return DiasFinales End Function Function CalcularFormulasDiasBase(ByVal dtpFechaLiquidacion As Date, ByVal dtpFechaVencimiento As Date, ByRef TipoBase As Integer) Dim ListaDiasBase As New Dictionary(Of String, String) Dim Dias1 As Double = 0 Dim Dias2 As Double = 0 Dim Dias360 As Double = Operaciones.Base360(dtpFechaLiquidacion, dtpFechaVencimiento) Dim Dias365 As Double = Operaciones.Base365(dtpFechaLiquidacion, dtpFechaVencimiento) If (TipoBase = 0) Then ListaDiasBase.Add("DiasNormales", Dias360) ListaDiasBase.Add("DiasEspeciales", 0) ListaDiasBase.Add("TipoBase", "360") ElseIf (TipoBase = 1) Then Dim FechaInicial = dtpFechaLiquidacion Dim FechaFinal = dtpFechaVencimiento Dim CambioDeFecha As Integer = Operaciones.CambioBase(FechaInicial, FechaFinal) Dim PrimeraFechaUltima = Operaciones.PrimeraFechaCambioBase(FechaInicial) Dim UltimaFechaPrimero = Operaciones.FinalFechaCambioBase(FechaFinal) Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0 If (Not CambioDeFecha = 0) Then If CambioDeFecha = 1 Then DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(FechaInicial, PrimeraFechaUltima, CambioDeFecha) DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(UltimaFechaPrimero, FechaFinal, CambioDeFecha) Dias1 = DiasSegundaFecha Dias2 = DiasPrimeraFecha ElseIf CambioDeFecha = 2 Then DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(FechaInicial, PrimeraFechaUltima, CambioDeFecha) DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(UltimaFechaPrimero, FechaFinal, CambioDeFecha) Dias1 = DiasPrimeraFecha Dias2 = DiasSegundaFecha End If ListaDiasBase.Add("DiasNormales", Dias1) ListaDiasBase.Add("DiasEspeciales", Dias2) ListaDiasBase.Add("TipoBase", "365") Else If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 365) Then ListaDiasBase.Add("DiasNormales", Dias365) ListaDiasBase.Add("DiasEspeciales", 0) ListaDiasBase.Add("TipoBase", "365") End If If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 366) Then ListaDiasBase.Add("DiasNormales", 0) ListaDiasBase.Add("DiasEspeciales", Dias365) ListaDiasBase.Add("TipoBase", "365") End If End If ElseIf (TipoBase = 2) Then '''''''''''''''' Dim FechaInicial = dtpFechaLiquidacion Dim FechaFinal = dtpFechaVencimiento Dim CambioDeFecha As Integer = Operaciones.CambioBase(FechaInicial, FechaFinal) Dim PrimeraFechaUltima = Operaciones.PrimeraFechaCambioBase360(FechaInicial) Dim UltimaFechaPrimero = Operaciones.FinalFechaCambioBase360(FechaFinal) Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0 If (Not CambioDeFecha = 0) Then If CambioDeFecha = 1 Then DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(FechaInicial, PrimeraFechaUltima, CambioDeFecha) DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(UltimaFechaPrimero, FechaFinal, CambioDeFecha) Dias1 = DiasSegundaFecha Dias2 = DiasPrimeraFecha ElseIf CambioDeFecha = 2 Then DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(FechaInicial, PrimeraFechaUltima, CambioDeFecha) DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(UltimaFechaPrimero, FechaFinal, CambioDeFecha) Dias1 = DiasPrimeraFecha Dias2 = DiasSegundaFecha End If ListaDiasBase.Add("DiasNormales", Dias1) ListaDiasBase.Add("DiasEspeciales", Dias2) ListaDiasBase.Add("TipoBase", "360/365") Else If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 365) Then ListaDiasBase.Add("DiasNormales", Dias360) ListaDiasBase.Add("DiasEspeciales", 0) ListaDiasBase.Add("TipoBase", "360/365") End If If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 366) Then ListaDiasBase.Add("DiasNormales", 0) ListaDiasBase.Add("DiasEspeciales", Dias360) ListaDiasBase.Add("TipoBase", "360/365") End If End If Else Dim FechaInicial = dtpFechaLiquidacion Dim FechaFinal = dtpFechaVencimiento Dim CambioDeFecha As Integer = Operaciones.CambioBase(FechaInicial, FechaFinal) Dim PrimeraFechaUltima = Operaciones.PrimeraFechaCambioBase(FechaInicial) Dim UltimaFechaPrimero = Operaciones.FinalFechaCambioBase(FechaFinal) Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0 If (Not CambioDeFecha = 0) Then If CambioDeFecha = 1 Then DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(FechaInicial, PrimeraFechaUltima, CambioDeFecha) DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(UltimaFechaPrimero, FechaFinal, CambioDeFecha) Dias1 = DiasSegundaFecha Dias2 = DiasPrimeraFecha ElseIf CambioDeFecha = 2 Then DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(FechaInicial, PrimeraFechaUltima, CambioDeFecha) DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(UltimaFechaPrimero, FechaFinal, CambioDeFecha) Dias1 = DiasPrimeraFecha Dias2 = DiasSegundaFecha End If ListaDiasBase.Add("DiasNormales", Dias1) ListaDiasBase.Add("DiasEspeciales", Dias2) ListaDiasBase.Add("TipoBase", "365/360") Else ListaDiasBase.Add("DiasNormales", Dias365) ListaDiasBase.Add("DiasEspeciales", 0) ListaDiasBase.Add("TipoBase", "365/360") End If End If Return ListaDiasBase End Function Sub AgregarValoresCamposdgvVacios(ByRef dgvTabla As DataGridView, ByVal index As Integer, ByVal NombreCampo As String, ByVal ValorAgregar As String) Dim value As String = dgvTabla.Rows(index).Cells(NombreCampo).Value If String.IsNullOrEmpty(value) Then dgvTabla.Rows(index).Cells(NombreCampo).Value = ValorAgregar End If End Sub Function EmpaquetarTablaBaseDatos(ByRef dgvTabla As DataGridView) Dim ColumnasRegistro As New Dictionary(Of Integer, Collection) Dim IndexFilas As Integer = dgvTabla.Rows.Count - 1 Dim IndexColumnas As Integer = dgvTabla.Columns.GetColumnCount(DataGridViewElementStates.Visible) - 1 Dim IndexVertical As Integer = 0 Dim IndexHorizontal As Integer = 0 While IndexFilas >= IndexVertical Dim FilasRegistros As New Collection IndexHorizontal = 0 While IndexColumnas >= IndexHorizontal FilasRegistros.Add(dgvTabla.Rows(IndexVertical).Cells(IndexHorizontal).Value) IndexHorizontal += 1 End While ColumnasRegistro.Add(IndexVertical, FilasRegistros) IndexVertical += 1 End While Return ColumnasRegistro End Function End Class