CalculosTablaDiasFecha.vb 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. Public Class CalculosTablaDiasFecha
  2. Private Operaciones As New Operaciones
  3. function AgregarFechaIngresos(ByRef dgvIngresos As DataGridView, ByRef dtpFechaLiquidacion As DateTimePicker,
  4. ByRef NombreCampoFecha As String, ByRef TipoBase As Integer, ByRef Periodicidad As String,
  5. ByRef TipoCalculoFecha As String, ByRef Index As Integer)
  6. Dim Fecha As Date = Date.Now.Date
  7. Dim IndexAnterior As Integer = Index - 1
  8. Dim FechaAnterior As Date = Date.Today.Date
  9. Dim FechaActual As Date = Date.Today.Date
  10. Dim FechaLiquidacion As Date = dtpFechaLiquidacion.Value
  11. Dim DiaFijo As Integer = FechaLiquidacion.Day
  12. If Index > 0 Then
  13. FechaAnterior = Operaciones.ConvertirFecha(dgvIngresos.Rows(IndexAnterior).Cells(NombreCampoFecha).Value)
  14. FechaActual = CalcularFecha(FechaAnterior, DiaFijo, TipoCalculoFecha, Periodicidad, TipoBase)
  15. Fecha = Format((FechaActual), "dd/MM/yyyy").ToString
  16. Else
  17. FechaActual = CalcularFecha(Operaciones.ConvertirFecha(FechaLiquidacion), DiaFijo, TipoCalculoFecha, Periodicidad, TipoBase)
  18. Fecha = Format(FechaActual, "dd/MM/yyyy").ToString
  19. End If
  20. Return Fecha
  21. End function
  22. Private Function CalcularFecha(ByVal FechaInicial As Date, ByVal DiaFijo As Integer, ByRef FormaCalcularFechas As String,
  23. ByRef Periodicidad As String, ByRef TipoBase As Integer)
  24. 'Declaracion de Variables'
  25. Dim BaseDias As Integer = 0
  26. Dim FechaFinal As Date = Date.Today.Date
  27. If (TipoBase = 0 Or TipoBase = 2) Then
  28. BaseDias = 360
  29. If FormaCalcularFechas = "FinMes" Then
  30. FechaFinal = Operaciones.FechaFinMes(FechaInicial, Periodicidad, BaseDias)
  31. ElseIf FormaCalcularFechas = "Mensual" Then
  32. FechaFinal = Operaciones.FechaMensual(FechaInicial, Periodicidad, FormaCalcularFechas, 0, DiaFijo, BaseDias)
  33. End If
  34. ElseIf TipoBase = 1 Or TipoBase = 3 Then
  35. BaseDias = 365
  36. If FormaCalcularFechas = "FinMes" Then
  37. FechaFinal = Operaciones.FechaFinMes(FechaInicial, Periodicidad, BaseDias)
  38. ElseIf FormaCalcularFechas = "Mensual" Then
  39. FechaFinal = Operaciones.FechaMensual(FechaInicial, Periodicidad, FormaCalcularFechas, 0, DiaFijo, BaseDias)
  40. End If
  41. End If
  42. Return FechaFinal
  43. End Function
  44. Function AgregarCorrelativo(ByRef dgvTabla As DataGridView, ByRef PosicionIndex As Integer)
  45. Dim Cantidad As Integer = PosicionIndex
  46. Dim Index As Integer = 0
  47. Dim Correlativo As Integer = 0
  48. While Index <= Cantidad
  49. Correlativo = Index + 1
  50. Index += 1
  51. End While
  52. Return Correlativo
  53. End Function
  54. Function AgregarDias(ByRef dgvTabla As DataGridView, ByRef dtpFechaLiquidacion As DateTimePicker, ByRef TipoBase As Integer,
  55. ByRef Periodicidad As String, ByRef FormaCalcularFechas As String, ByRef NombreCampoFecha As String,
  56. ByRef NombreCampoDias As String, ByRef Index As Integer)
  57. Dim IndexAnterior As Integer = Index - 1
  58. Dim FechaAnterior As String = String.Empty
  59. Dim FechaActual As String = String.Empty
  60. Dim FechaLiquidacion As Date = Format(dtpFechaLiquidacion.Value, "dd/MM/yyyy")
  61. Dim BaseCalculo As Integer = 0
  62. Dim Meses As Integer = 0
  63. Dim DiasFinales As Integer = 0
  64. Dim CantidadDiasNormal360 As Integer = 0
  65. Dim CantidadDias360 As Integer = 0
  66. If Periodicidad = "M" Then
  67. Meses = 1
  68. ElseIf Periodicidad = "T" Then
  69. Meses = 3
  70. ElseIf Periodicidad = "S" Then
  71. Meses = 6
  72. ElseIf Periodicidad = "A" Then
  73. Meses = 12
  74. End If
  75. CantidadDiasNormal360 = Meses * 30
  76. If TipoBase = 0 Or TipoBase = 2 Then
  77. BaseCalculo = 360
  78. ElseIf TipoBase = 1 Or TipoBase = 3 Then
  79. BaseCalculo = 365
  80. End If
  81. If Index > 0 Then
  82. FechaAnterior = Operaciones.ConvertirFecha(dgvTabla.Rows(IndexAnterior).Cells(NombreCampoFecha).Value)
  83. FechaActual = Operaciones.ConvertirFecha(dgvTabla.Rows(Index).Cells(NombreCampoFecha).Value)
  84. If BaseCalculo = 360 Then
  85. If FormaCalcularFechas = "FinMes" Then
  86. DiasFinales = Operaciones.Base360(FechaAnterior, FechaActual)
  87. ElseIf FormaCalcularFechas = "Mensual" Then
  88. DiasFinales = CantidadDiasNormal360
  89. End If
  90. ElseIf BaseCalculo = 365 Then
  91. DiasFinales = Operaciones.Base365(FechaAnterior, FechaActual)
  92. End If
  93. Else
  94. 'Primera Fecha'
  95. FechaActual = Operaciones.ConvertirFecha(dgvTabla.Rows(Index).Cells(NombreCampoFecha).Value)
  96. If BaseCalculo = 360 Then
  97. If FormaCalcularFechas = "FinMes" Then
  98. DiasFinales = Operaciones.Base360(FechaLiquidacion, FechaActual)
  99. ElseIf FormaCalcularFechas = "Mensual" Then
  100. DiasFinales = CantidadDiasNormal360
  101. End If
  102. ElseIf BaseCalculo = 365 Then
  103. DiasFinales = Operaciones.Base365(FechaLiquidacion, FechaActual)
  104. End If
  105. End If
  106. Return DiasFinales
  107. End Function
  108. Function CalcularFormulasDiasBase(ByVal dtpFechaLiquidacion As Date, ByVal dtpFechaVencimiento As Date,
  109. ByRef TipoBase As Integer)
  110. Dim ListaDiasBase As New Dictionary(Of String, String)
  111. Dim Dias1 As Double = 0
  112. Dim Dias2 As Double = 0
  113. Dim Dias360 As Double = Operaciones.Base360(dtpFechaLiquidacion, dtpFechaVencimiento)
  114. Dim Dias365 As Double = Operaciones.Base365(dtpFechaLiquidacion, dtpFechaVencimiento)
  115. If (TipoBase = 0) Then
  116. ListaDiasBase.Add("DiasNormales", Dias360)
  117. ListaDiasBase.Add("DiasEspeciales", 0)
  118. ListaDiasBase.Add("TipoBase", "360")
  119. ElseIf (TipoBase = 1) Then
  120. Dim FechaInicial = dtpFechaLiquidacion
  121. Dim FechaFinal = dtpFechaVencimiento
  122. Dim CambioDeFecha As Integer = Operaciones.CambioBase(FechaInicial, FechaFinal)
  123. Dim PrimeraFechaUltima = Operaciones.PrimeraFechaCambioBase(FechaInicial)
  124. Dim UltimaFechaPrimero = Operaciones.FinalFechaCambioBase(FechaFinal)
  125. Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0
  126. If (Not CambioDeFecha = 0) Then
  127. If CambioDeFecha = 1 Then
  128. DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
  129. DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
  130. Dias1 = DiasSegundaFecha
  131. Dias2 = DiasPrimeraFecha
  132. ElseIf CambioDeFecha = 2 Then
  133. DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
  134. DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
  135. Dias1 = DiasPrimeraFecha
  136. Dias2 = DiasSegundaFecha
  137. End If
  138. ListaDiasBase.Add("DiasNormales", Dias1)
  139. ListaDiasBase.Add("DiasEspeciales", Dias2)
  140. ListaDiasBase.Add("TipoBase", "365")
  141. Else
  142. If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 365) Then
  143. ListaDiasBase.Add("DiasNormales", Dias365)
  144. ListaDiasBase.Add("DiasEspeciales", 0)
  145. ListaDiasBase.Add("TipoBase", "365")
  146. End If
  147. If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 366) Then
  148. ListaDiasBase.Add("DiasNormales", 0)
  149. ListaDiasBase.Add("DiasEspeciales", Dias365)
  150. ListaDiasBase.Add("TipoBase", "365")
  151. End If
  152. End If
  153. ElseIf (TipoBase = 2) Then
  154. ''''''''''''''''
  155. Dim FechaInicial = dtpFechaLiquidacion
  156. Dim FechaFinal = dtpFechaVencimiento
  157. Dim CambioDeFecha As Integer = Operaciones.CambioBase(FechaInicial, FechaFinal)
  158. Dim PrimeraFechaUltima = Operaciones.PrimeraFechaCambioBase360(FechaInicial)
  159. Dim UltimaFechaPrimero = Operaciones.FinalFechaCambioBase360(FechaFinal)
  160. Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0
  161. If (Not CambioDeFecha = 0) Then
  162. If CambioDeFecha = 1 Then
  163. DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
  164. DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
  165. Dias1 = DiasSegundaFecha
  166. Dias2 = DiasPrimeraFecha
  167. ElseIf CambioDeFecha = 2 Then
  168. DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
  169. DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
  170. Dias1 = DiasPrimeraFecha
  171. Dias2 = DiasSegundaFecha
  172. End If
  173. ListaDiasBase.Add("DiasNormales", Dias1)
  174. ListaDiasBase.Add("DiasEspeciales", Dias2)
  175. ListaDiasBase.Add("TipoBase", "360/365")
  176. Else
  177. If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 365) Then
  178. ListaDiasBase.Add("DiasNormales", Dias360)
  179. ListaDiasBase.Add("DiasEspeciales", 0)
  180. ListaDiasBase.Add("TipoBase", "360/365")
  181. End If
  182. If (Operaciones.AñoBisiesto(FechaInicial) + 1 = 366) Then
  183. ListaDiasBase.Add("DiasNormales", 0)
  184. ListaDiasBase.Add("DiasEspeciales", Dias360)
  185. ListaDiasBase.Add("TipoBase", "360/365")
  186. End If
  187. End If
  188. Else
  189. Dim FechaInicial = dtpFechaLiquidacion
  190. Dim FechaFinal = dtpFechaVencimiento
  191. Dim CambioDeFecha As Integer = Operaciones.CambioBase(FechaInicial, FechaFinal)
  192. Dim PrimeraFechaUltima = Operaciones.PrimeraFechaCambioBase(FechaInicial)
  193. Dim UltimaFechaPrimero = Operaciones.FinalFechaCambioBase(FechaFinal)
  194. Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0
  195. If (Not CambioDeFecha = 0) Then
  196. If CambioDeFecha = 1 Then
  197. DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
  198. DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
  199. Dias1 = DiasSegundaFecha
  200. Dias2 = DiasPrimeraFecha
  201. ElseIf CambioDeFecha = 2 Then
  202. DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha365(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
  203. DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha366(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
  204. Dias1 = DiasPrimeraFecha
  205. Dias2 = DiasSegundaFecha
  206. End If
  207. ListaDiasBase.Add("DiasNormales", Dias1)
  208. ListaDiasBase.Add("DiasEspeciales", Dias2)
  209. ListaDiasBase.Add("TipoBase", "365/360")
  210. Else
  211. ListaDiasBase.Add("DiasNormales", Dias365)
  212. ListaDiasBase.Add("DiasEspeciales", 0)
  213. ListaDiasBase.Add("TipoBase", "365/360")
  214. End If
  215. End If
  216. Return ListaDiasBase
  217. End Function
  218. Sub AgregarValoresCamposdgvVacios(ByRef dgvTabla As DataGridView, ByVal index As Integer, ByVal NombreCampo As String, ByVal ValorAgregar As String)
  219. Dim value As String = dgvTabla.Rows(index).Cells(NombreCampo).Value
  220. If String.IsNullOrEmpty(value) Then
  221. dgvTabla.Rows(index).Cells(NombreCampo).Value = ValorAgregar
  222. End If
  223. End Sub
  224. Function EmpaquetarTablaBaseDatos(ByRef dgvTabla As DataGridView)
  225. Dim ColumnasRegistro As New Dictionary(Of Integer, Collection)
  226. Dim IndexFilas As Integer = dgvTabla.Rows.Count - 1
  227. Dim IndexColumnas As Integer = dgvTabla.Columns.GetColumnCount(DataGridViewElementStates.Visible) - 1
  228. Dim IndexVertical As Integer = 0
  229. Dim IndexHorizontal As Integer = 0
  230. While IndexFilas >= IndexVertical
  231. Dim FilasRegistros As New Collection
  232. IndexHorizontal = 0
  233. While IndexColumnas >= IndexHorizontal
  234. FilasRegistros.Add(dgvTabla.Rows(IndexVertical).Cells(IndexHorizontal).Value)
  235. IndexHorizontal += 1
  236. End While
  237. ColumnasRegistro.Add(IndexVertical, FilasRegistros)
  238. IndexVertical += 1
  239. End While
  240. Return ColumnasRegistro
  241. End Function
  242. End Class