Public Class Operaciones
    Private V_TipoOperacion As String
    Dim dia As Integer
    Dim dias31 As Integer
    Dim febreros As Integer
    Dim bisiesto As Integer
    Dim V_IngresoBruto As Double = 0.0
    Dim V_FechaInicial As Date
    Dim V_FechaCorte As Date
    Dim ElementosConsulta As New CargarElementosDAO
    Dim V_CodEmpr = ElementosConsulta.CodEmpr
    Dim V_CodEmis = ElementosConsulta.CodEmis
    Dim V_CodECalRi = ElementosConsulta.CodECalRi
    Dim V_CodPais = ElementosConsulta.CodPais
    Dim V_ListaPlazo = ElementosConsulta.ListaPlazosFactor
    Dim V_ListaTiposMercados = ElementosConsulta.ListaTiposMercado
    Dim V_ListaPeriodos = ElementosConsulta.ListaPeriodos
    Dim V_ListaTipoTasa = ElementosConsulta.ListaTipoTasa
    Dim V_ListaTipoRenta = ElementosConsulta.ListaTipoRenta
    Dim V_ListaEstado = ElementosConsulta.ListaEstado

    Dim V_ListaCasasCorredoras = ElementosConsulta.ListaCasasCorredoras
    Public Property TipoOperacion() As String
        Get
            Return V_TipoOperacion
        End Get
        Set(value As String)
            V_TipoOperacion = value
        End Set
    End Property


    Public Function DiasAcumulados(ByVal fecha1 As DateTime, ByVal fecha2 As DateTime, ByVal Base As Integer)
        Dim Total As Integer = 0
        fecha1 = Format(fecha1, "dd/MM/yyyy")
        fecha2 = Format(fecha2, "dd/MM/yyyy")
        If (Base = 0 Or Base = 2) Then

            Total = Base360(fecha1, fecha2)
        ElseIf (Base = 1 Or Base = 3) Then
            Total = Base365(fecha1, fecha2)
        Else
            Total = 0
        End If
        Return Total
    End Function

    Public Function Dias(ByVal fecha1 As DateTime, ByVal fecha2 As DateTime, ByVal Base As Integer)
        Dim Total As Integer = 0

        If (Base = 0 Or Base = 2) Then

            Total = Base360(fecha1, fecha2)
        ElseIf (Base = 1 Or Base = 3) Then
            Total = Base365(fecha1, fecha2)
        Else
            Total = 0
        End If
        Return Total
    End Function




    Public Function InteresAcumuladoPBUR(ByVal ValorNominal As Double, ByVal PorcCupon As Double, ByVal DiasAcumulados As Integer, ByVal IndexBase As Integer, ByVal FechaInicial As Date, FechaFinal As Date)
        Dim Proceso As Double = 0
        If (IndexBase = 0) Then
            Proceso = ValorNominal * PorcCupon * DiasAcumulados / 360
        ElseIf IndexBase = 1 Then


            Dim PrOpc1 = 0.0, PrOpc2 = 0.0

            Dim CambioDeFecha As Integer = CambioBase(FechaInicial, FechaFinal)

            Dim PrimeraFechaUltima = PrimeraFechaCambioBase(FechaInicial)
            Dim UltimaFechaPrimero = FinalFechaCambioBase(FechaFinal)
            Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0


            If (Not CambioDeFecha = 0) Then


                If CambioDeFecha = 1 Then
                    DiasPrimeraFecha = DiasDespuesCambioPrimeraFecha366(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
                    DiasSegundaFecha = DiasDespuesCambioPrimeraFecha365(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
                    PrOpc1 = ValorNominal * PorcCupon * DiasPrimeraFecha / 366
                    PrOpc2 = ValorNominal * PorcCupon * DiasSegundaFecha / 365
                ElseIf CambioDeFecha = 2 Then
                    DiasPrimeraFecha = DiasDespuesCambioPrimeraFecha365(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
                    DiasSegundaFecha = DiasDespuesCambioPrimeraFecha366(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
                    PrOpc1 = ValorNominal * PorcCupon * DiasPrimeraFecha / 365
                    PrOpc2 = ValorNominal * PorcCupon * DiasSegundaFecha / 366
                End If

                Proceso = PrOpc1 + PrOpc2

            Else

                If (AñoBisiesto(FechaInicial) = 364) Then

                    Proceso = ValorNominal * PorcCupon * DiasAcumulados / 365

                End If

                If (AñoBisiesto(FechaInicial) = 365) Then

                    Proceso = ValorNominal * PorcCupon * DiasAcumulados / 366
                End If

            End If









        ElseIf IndexBase = 2 Then
            Dim PrOpc1 = 0.0, PrOpc2 = 0.0

            Dim CambioDeFecha As Integer = CambioBase(FechaInicial, FechaFinal)

            Dim PrimeraFechaUltima = PrimeraFechaCambioBase360(FechaInicial)
            Dim UltimaFechaPrimero = FinalFechaCambioBase360(FechaFinal)
            Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0


            If (Not CambioDeFecha = 0) Then


                If CambioDeFecha = 1 Then
                    DiasPrimeraFecha = DiasDespuesCambioPrimeraFecha360(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
                    DiasSegundaFecha = DiasDespuesCambioPrimeraFecha360(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
                    PrOpc1 = ValorNominal * PorcCupon * DiasPrimeraFecha / 366
                    PrOpc2 = ValorNominal * PorcCupon * DiasSegundaFecha / 365
                ElseIf CambioDeFecha = 2 Then
                    DiasPrimeraFecha = DiasDespuesCambioPrimeraFecha360(FechaInicial, PrimeraFechaUltima, CambioDeFecha)
                    DiasSegundaFecha = DiasDespuesCambioPrimeraFecha360(UltimaFechaPrimero, FechaFinal, CambioDeFecha)
                    PrOpc1 = ValorNominal * PorcCupon * DiasPrimeraFecha / 365
                    PrOpc2 = ValorNominal * PorcCupon * DiasSegundaFecha / 366
                End If

                Proceso = PrOpc1 + PrOpc2

            Else

                If (AñoBisiesto(FechaInicial) = 364) Then

                    Proceso = ValorNominal * PorcCupon * DiasAcumulados / 365

                End If

                If (AñoBisiesto(FechaInicial) = 365) Then

                    Proceso = ValorNominal * PorcCupon * DiasAcumulados / 366
                End If

            End If

        ElseIf IndexBase = 3 Then
            Proceso = ValorNominal * PorcCupon * DiasAcumulados / 360
        End If



        Return Proceso
    End Function





    Public Function Comisiones(ByVal Comision As Double, ByVal ValorTrasado As Double)
        Dim Valor = CDec(Comision) * CDec(ValorTrasado)


        Return Valor
    End Function




    Public Function Base360(ByVal Fecha1 As Date, ByVal Fecha2 As Date)
        Dim Total As Integer = 0
        Dim dias = DateDiff(DateInterval.Day, Fecha1, Fecha2)
        Dim dia As Integer
        Dim dias31 As Integer
        Dim febreros As Integer
        Dim bisiesto As Integer
        While (Fecha1 < Fecha2)
            dia = dia + 1

            If (Fecha1.Day = 31) Then
                dias31 = dias31 + 1

            End If
            If (Fecha1.Month = 2 And Fecha1.Day = 28) Then
                febreros = febreros + 2

            End If
            If (Fecha1.Month = 2 And Fecha1.Day = 29) Then
                bisiesto = bisiesto + 1

            End If

            Fecha1 = Fecha1.AddDays(1)
        End While
        Total = dia - dias31 + febreros - bisiesto

        Return Total
    End Function

    Public Function FechaDias360(ByVal Fecha1 As Date, ByVal Day As Integer)
        Dim CorrelativoDias As Integer = 1
        Dim Dias As Integer = Day
        Dim Fecha As Date = Fecha1

        While CorrelativoDias <= Dias
            Dim Bisiesto As Integer = AñoBisiesto(Fecha)
            If Bisiesto = 365 Then
                If Fecha.Day = 31 Then
                    Fecha = Fecha.AddDays(2)
                    CorrelativoDias += 1

                ElseIf Fecha.Day = 29 And Fecha.Month = 2 Then
                    Fecha = Fecha.AddDays(1)
                    CorrelativoDias += 2

                Else

                    Fecha = Fecha.AddDays(1)
                    CorrelativoDias += 1

                End If
            Else
                If Fecha.Day = 31 Then
                    Fecha = Fecha.AddDays(2)
                    CorrelativoDias += 1

                ElseIf Fecha.Day = 28 And Fecha.Month = 2 Then
                    Fecha = Fecha.AddDays(1)
                    CorrelativoDias += 3


                Else

                    Fecha = Fecha.AddDays(1)
                    CorrelativoDias += 1

                End If
            End If





        End While


        Return Fecha
    End Function




    Public Function FechaDias3602829(ByVal Fecha1 As Date, ByVal Day As Integer,Byval DiaFijo As integer)
        Dim CorrelativoDias As Integer = 1
        Dim Dias As Integer = Day
        Dim Fecha As Date = Fecha1
        Dim Conteo As Integer = 0
        While CorrelativoDias <= Dias
            Conteo += 1
            Dim Bisiesto As Integer = AñoBisiesto(Fecha)
            If Bisiesto = 365 Then
                If Fecha.Day = 31 Then
                    Fecha = Fecha.AddDays(2)
                    CorrelativoDias += 1

                ElseIf Fecha.Day = 29 And Fecha.Month = 2 Then
                    If DiaFijo = 30 Then
                        If CorrelativoDias = Dias Then
                            CorrelativoDias += 2
                        Else
                            Fecha = Fecha.AddDays(1)
                            If Conteo = 1 Then
                                CorrelativoDias += 1
                            Else
                                CorrelativoDias += 2
                            End If


                        End If

                    Else
                        Fecha = Fecha.AddDays(1)
                        CorrelativoDias += 2
                    End If


                Else

                    Fecha = Fecha.AddDays(1)
                    CorrelativoDias += 1

                End If
            Else
                If Fecha.Day = 31 Then
                    Fecha = Fecha.AddDays(2)
                    CorrelativoDias += 1

                ElseIf Fecha.Day = 28 And Fecha.Month = 2 Then



                    If DiaFijo = 30 Then
                        If (CorrelativoDias + 1) = Dias Then
                            CorrelativoDias += 3
                        Else
                            Fecha = Fecha.AddDays(1)
                            If Conteo = 1 Then
                                CorrelativoDias += 1
                            Else
                                CorrelativoDias += 3
                            End If
                        End If



                    ElseIf DiaFijo = 29 Then
                        If CorrelativoDias = Dias Then
                            CorrelativoDias += 3
                        Else
                            Fecha = Fecha.AddDays(1)
                            If Conteo = 1 Then
                                CorrelativoDias += 2
                            Else
                                CorrelativoDias += 3
                            End If


                        End If





                    Else
                        Fecha = Fecha.AddDays(1)
                        CorrelativoDias += 3
                    End If

                Else

                    Fecha = Fecha.AddDays(1)
                    CorrelativoDias += 1

                End If
            End If





        End While


        Return Fecha
    End Function
    Public Function Base365(ByVal Fecha1 As Date, ByVal Fecha2 As Date)

        Dim dias = DateDiff(DateInterval.Day, Fecha1, Fecha2)


        Return dias
    End Function

    Function AñoBisiesto(ByVal Fecha As Date)
        Dim Año As String = Fecha.Year
        Dim Dias As Integer = 0
        Dim FechaPrimero As Date = "01/01/" + Año
        Dim FechaFinal As Date = "31/12/" + Año

        Dias = DateDiff(DateInterval.Day, FechaPrimero, FechaFinal)

        Return Dias
    End Function

    Function CambioBase(ByVal FechaInicial As Date, ByVal FechaFinal As Date)
        Dim AñoInicial = FechaInicial.Year
        Dim AñoFinal = FechaFinal.Year
        Dim CambioDeBase As Integer = 0

        If (Not AñoInicial = AñoFinal) Then
            If (AñoBisiesto(FechaInicial) = 365) Then
                CambioDeBase = 1
            ElseIf (AñoBisiesto(FechaFinal) = 365) Then
                CambioDeBase = 2
            End If
        End If
            Return CambioDeBase
    End Function
    Function PrimeraFechaCambioBase(ByVal FechaInicial As Date)
        Dim AñoInicial As String = FechaInicial.Year

        Dim FechaPrimerCorte As Date = "31/12/" + AñoInicial

        Return FechaPrimerCorte
    End Function




    Function PrimeraFechaCambioBase360(ByVal FechaInicial As Date)
        Dim AñoInicial As String = FechaInicial.Year

        Dim FechaPrimerCorte As Date = "30/12/" + AñoInicial

        Return FechaPrimerCorte
    End Function

    Function FinalFechaCambioBase(ByVal FechaFinal As Date)
        Dim AñoFinal As String = FechaFinal.Year
        Dim FechaInicialSegundoCorte As Date = "01/01/" + AñoFinal
        Return FechaInicialSegundoCorte

    End Function
    Function FinalFechaCambioBase360(ByVal FechaFinal As Date)
        Dim AñoFinal As String = FechaFinal.Year
        Dim FechaInicialSegundoCorte As Date = "01/01/" + AñoFinal
        Return FechaInicialSegundoCorte

    End Function

    Function DiasDespuesCambioPrimeraFecha365(ByVal FechaIncial As Date, ByVal FechaFinal As Date, ByVal CambioDeFecha As Integer)
        Dim Dias As Integer
        If (CambioDeFecha = 1) Then
            Dias = DateDiff(DateInterval.Day, FechaIncial, FechaFinal) + 1
        Else
            Dias = DateDiff(DateInterval.Day, FechaIncial, FechaFinal)
        End If

        Return Dias
    End Function

    Function DiasDespuesCambioPrimeraFecha366(ByVal FechaIncial As Date, ByVal FechaFinal As Date, ByVal CambioDeFecha As Integer)
        Dim Dias As Integer

        If (CambioDeFecha = 2) Then
            Dias = DateDiff(DateInterval.Day, FechaIncial, FechaFinal) + 1
        Else
            Dias = DateDiff(DateInterval.Day, FechaIncial, FechaFinal)
        End If


        Return Dias
    End Function

    Function DiasDespuesCambioPrimeraFecha366Varios(ByVal Fecha1 As Date, ByVal Fecha2 As Date)
        Dim Dias As Integer = 0

        While (Fecha1 < Fecha2)

            If AñoBisiesto(Fecha1) = 365 Then
                Dias += 1
            End If
            Fecha1 = Fecha1.AddDays(1)
        End While

        Return Dias
    End Function

    Function DiasDespuesCambioPrimeraFecha365Varios(ByVal Fecha1 As Date, ByVal Fecha2 As Date)
        Dim Dias As Integer = 0

        While (Fecha1 < Fecha2)
            If AñoBisiesto(Fecha1) = 364 Then
                Dias += 1
            End If
            Fecha1 = Fecha1.AddDays(1)

        End While

        Return Dias
    End Function

    Function DiasDespuesCambioPrimeraFecha360Bi(ByVal Fecha1 As Date, ByVal Fecha2 As Date)
        Dim Dias As Integer = 0

        While (Fecha1 < Fecha2)
            If AñoBisiesto(Fecha1) = 365 Then
                If (Not Fecha1.Day = 31) Then
                    If (Fecha1.Day = 29) Then
                        Dias += 1
                    End If

                    Dias += 1
                End If
            End If
            Fecha1 = Fecha1.AddDays(1)

        End While

        Return Dias
    End Function

    Function DiasDespuesCambioPrimeraFecha360(ByVal Fecha1 As Date, ByVal Fecha2 As Date)
        Dim Dias As Integer = 0

        While (Fecha1 < Fecha2)
            If AñoBisiesto(Fecha1) = 364 Then
                If (Not Fecha1.Day = 31) Then
                    If (Fecha1.Day = 28) Then
                        Dias += 2
                    End If

                    Dias += 1
                End If
            End If
            Fecha1 = Fecha1.AddDays(1)

        End While

        Return Dias
    End Function

    Function DiasDespuesCambioPrimeraFecha360(ByVal FechaIncial As Date, ByVal FechaFinal As Date, ByVal CambioDeFecha As Integer)
        Dim Dias As Integer

        Dias = Base360(FechaInicial, FechaFinal)


        Return Dias
    End Function

    Public Sub ValidarEntrada(sender As Object, e As KeyPressEventArgs, ByVal NoAgregar As Boolean)
        If (Char.IsNumber(e.KeyChar)) Then
            e.Handled = False

        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = True
        ElseIf Char.IsLetter(e.KeyChar) Then
            e.Handled = True

        ElseIf Char.IsPunctuation(e.KeyChar) Then
            If Not e.KeyChar = "." Then
                e.Handled = True
            End If



        ElseIf Char.IsSymbol(e.KeyChar) Then
            e.Handled = True

        ElseIf Char.IsWhiteSpace(e.KeyChar) Then
            e.Handled = True
        End If

        If NoAgregar Then

            e.Handled = True
        End If
    End Sub










    Function Meses(ByVal CantidadMeses As Integer, ByVal Fecha As Date, ByVal MesFijo As Date)
        Dim i As Integer = 0
        Dim DiaInicial As Integer = 0
        Dim Dia = MesFijo.Day

        DiaInicial = Dia


        Fecha = Fecha.AddMonths(CantidadMeses)

        Dim Mes = Fecha.Month

        Mes = Fecha.Month

        If (DiaInicial = 31) Then
            If ((Mes = 1 Or Mes = 3 Or Mes = 5 Or Mes = 7 Or Mes = 8 Or Mes = 10 Or Mes = 12)) Then


                Dim Año = Fecha.Year
                Fecha = CDate(("31/" + Mes.ToString + "/" + Año.ToString))

            ElseIf (Mes = 2) Then

                Dim Año = Fecha.Year
                If (AñoBisiesto(Fecha) = 364) Then

                    Fecha = CDate(("28/" + Mes.ToString + "/" + Año.ToString))

                End If

                If (AñoBisiesto(Fecha) = 365) Then

                    Fecha = CDate(("29/" + Mes.ToString + "/" + Año.ToString))
                End If






            Else

                Dim Año = Fecha.Year
                Fecha = CDate(("30/" + Mes.ToString + "/" + Año.ToString))


            End If

        ElseIf (DiaInicial = 30) Then
            If (Mes = 2) Then
                Dim Año = Fecha.Year
                Fecha = CDate(("28/" + Mes.ToString + "/" + Año.ToString))
            Else

                Dim Año = Fecha.Year
                Fecha = CDate(("30/" + Mes.ToString + "/" + Año.ToString))
            End If
        ElseIf (DiaInicial = 29) Then
            If (Mes = 2) Then
                Dim Año = Fecha.Year
                Fecha = CDate(("28/" + Mes.ToString + "/" + Año.ToString))
            Else

                Dim Año = Fecha.Year
                Fecha = CDate(("29/" + Mes.ToString + "/" + Año.ToString))
            End If


        End If


        Return Fecha
    End Function







    Function FechaFinMes(ByVal FechaPri As Date, ByVal Periodicidad As String, ByVal Base As Integer)

        Dim Dias As Integer = 0

        Dim Meses 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
        If Base = 365 Then



            Dim FechaAnterior As Date = Format(FechaPri, "dd/MM/yyyy")
            Dim FechaCreada As Date = Format(FechaPri, "dd/MM/yyyy")
            Dim DiaAnterior As Integer = FechaAnterior.Day
            Dim MesAnterior As Integer = FechaAnterior.Month
            Dim DiaDiferenciaAnterior31 As Integer = 31 - DiaAnterior
            Dim FechaTemporal31 As Date = FechaAnterior.AddDays(DiaDiferenciaAnterior31)
            Dim DiaDiferenciaAnterior30 As Integer = 30 - DiaAnterior
            Dim FechaTemporal30 As Date = FechaAnterior.AddDays(DiaDiferenciaAnterior30)
            Dim DiaDiferenciaAnterior29 As Integer = 29 - DiaAnterior
            Dim FechaTemporal29 As Date = FechaAnterior.AddDays(DiaDiferenciaAnterior29)
            Dim DiaDiferenciaAnterior28 As Integer = 28 - DiaAnterior
            Dim FechaTemporal28 As Date = FechaAnterior.AddDays(DiaDiferenciaAnterior28)
            ''''''''
            If FechaTemporal31.Month = MesAnterior Then

                If Periodicidad = "M" Then
                    If DiaDiferenciaAnterior31 > 0 Then
                        FechaCreada = FechaTemporal31

                    Else

                        FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior31, 0, Base)
                    End If

                Else
                    FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior31, 0, Base)
                End If


            ElseIf FechaTemporal30.Month = MesAnterior Then
                If Periodicidad = "M" Then
                    If DiaDiferenciaAnterior30 > 0 Then
                        FechaCreada = FechaTemporal30

                    Else
                        FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior30, 0, Base)
                    End If

                Else
                    FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior30, 0, Base)
                End If


            ElseIf FechaTemporal29.Month = MesAnterior Then

                If Periodicidad = "M" Then
                    If DiaDiferenciaAnterior29 > 0 Then
                        FechaCreada = FechaTemporal29

                    Else
                        FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior29, 0, Base)
                    End If

                Else
                    FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior29, 0, Base)

                End If

            ElseIf FechaTemporal28.Month = MesAnterior Then

                If Periodicidad = "M" Then
                    If DiaDiferenciaAnterior28 > 0 Then
                        FechaCreada = FechaTemporal28

                    Else
                        FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior28, 0, Base)
                    End If

                Else
                    FechaCreada = FechaMensual(FechaAnterior, Periodicidad, "FinMes", DiaDiferenciaAnterior28, 0, Base)
                End If


            End If



            Return FechaCreada
        ElseIf Base = 360 Then
            Dim FechaAnterior As Date = FechaPri
            Dim FechaCreada As Date = FechaPri
            Dim DiasAnterior As Integer = FechaAnterior.Day
            Dim DiasFaltantes As Integer = 30 - FechaAnterior.Day
            Dim FechaTemporalValidarDiasMes As Date = Date.Today.Date
            Dim CantidadDiasMes As Integer = 0
            Dim MesAnterior As Integer = FechaAnterior.Month
            If Periodicidad = "M" Then
                If DiasFaltantes > 0 Then
                    FechaTemporalValidarDiasMes = Format(CDate("01/" + MesAnterior.ToString + "/" + FechaAnterior.Year.ToString), "dd/MM/yyyy")

                    If FechaTemporalValidarDiasMes.AddDays(30).Month = MesAnterior Then
                        'Tiene 31 Dias
                        CantidadDiasMes = 31
                    ElseIf FechaTemporalValidarDiasMes.AddDays(29).Month = MesAnterior Then
                        'Tiene 30 Dias
                        CantidadDiasMes = 30
                    ElseIf FechaTemporalValidarDiasMes.AddDays(28).Month = MesAnterior Then
                        'Tiene 29 Dias
                        CantidadDiasMes = 29
                    ElseIf FechaTemporalValidarDiasMes.AddDays(27).Month = MesAnterior Then
                        'Tiene 28 Dias
                        CantidadDiasMes = 28
                    End If

                    If CantidadDiasMes = 31 Or CantidadDiasMes = 30 Then
                        FechaCreada = FechaCreada.AddDays(DiasFaltantes)

                    ElseIf CantidadDiasMes = 29 Then
                        If DiasFaltantes = 1 Then
                            FechaCreada = FechaCreada.AddDays(30)
                        Else
                            FechaCreada = FechaCreada.AddDays(DiasFaltantes - 1)
                        End If


                    ElseIf CantidadDiasMes = 28 Then
                        If DiasFaltantes = 2 Then
                            FechaCreada = FechaCreada.AddDays(30)
                        Else
                            FechaCreada = FechaCreada.AddDays(DiasFaltantes - 2)
                        End If
                    End If




                Else


                    FechaCreada = FechaCreada.AddMonths(Meses)



                End If

            Else


                Dim DiasCreada As Integer = 0
                Dim MesCreada As Integer = 0


                If DiasFaltantes > 0 Then

                    FechaCreada = FechaAnterior.AddMonths(Meses - 1)
                    DiasCreada = FechaCreada.Day
                    DiasFaltantes = 30 - FechaCreada.Day
                    MesCreada = FechaCreada.Month

                    FechaTemporalValidarDiasMes = Format(CDate("01/" + MesCreada.ToString + "/" + FechaCreada.Year.ToString), "dd/MM/yyyy")

                    If FechaTemporalValidarDiasMes.AddDays(30).Month = MesCreada Then
                        'Tiene 31 Dias
                        CantidadDiasMes = 31
                    ElseIf FechaTemporalValidarDiasMes.AddDays(29).Month = MesCreada Then
                        'Tiene 30 Dias
                        CantidadDiasMes = 30
                    ElseIf FechaTemporalValidarDiasMes.AddDays(28).Month = MesCreada Then
                        'Tiene 29 Dias
                        CantidadDiasMes = 29
                    ElseIf FechaTemporalValidarDiasMes.AddDays(27).Month = MesCreada Then
                        'Tiene 28 Dias
                        CantidadDiasMes = 28
                    End If

                    If CantidadDiasMes = 31 Or CantidadDiasMes = 30 Then
                        FechaCreada = FechaCreada.AddDays(DiasFaltantes)

                    ElseIf CantidadDiasMes = 29 Then


                        If DiasFaltantes = 1 Then
                            FechaCreada = FechaCreada.AddDays(30)
                        Else
                            FechaCreada = FechaCreada.AddDays(DiasFaltantes - 1)
                        End If
                    ElseIf CantidadDiasMes = 28 Then
                        If DiasFaltantes = 2 Then
                            FechaCreada = FechaCreada.AddDays(30)
                        Else
                            FechaCreada = FechaCreada.AddDays(DiasFaltantes - 2)
                        End If
                    End If


                Else
                    FechaCreada = FechaAnterior.AddMonths(Meses)

                End If



            End If


            Return FechaCreada


        End If
    End Function


    Function FechaMensual(ByRef Fecha As Date, ByRef Periodicidad As String, ByVal TipoCalculo As String, ByVal DiasSobrantes As Integer, ByVal DiaFijo As Integer, ByVal Base As Integer)

        Dim Meses 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


        If Base = 365 Then


            'TipoCalculo: FinMes,Mensual'
            Dim FechaAnterior As Date = Format(Fecha, "dd/MM/yyyy")
            Dim FechaCreada As Date = Format(Fecha, "dd/MM/yyyy")



            If DiasSobrantes > 0 Then
                FechaCreada = FechaCreada.AddMonths(Meses - 1)
            Else
                FechaCreada = FechaCreada.AddMonths(Meses)
            End If
            Dim DiaCreada As Integer = FechaCreada.Day
            Dim MesCreada As Integer = FechaCreada.Month


            Dim DiaDiferenciaAnterior31 As Integer = 31 - DiaCreada
            Dim FechaTemporal31 As Date = FechaCreada.AddDays(DiaDiferenciaAnterior31)
            Dim DiaDiferenciaAnterior30 As Integer = 30 - DiaCreada
            Dim FechaTemporal30 As Date = FechaCreada.AddDays(DiaDiferenciaAnterior30)
            Dim DiaDiferenciaAnterior29 As Integer = 29 - DiaCreada
            Dim FechaTemporal29 As Date = FechaCreada.AddDays(DiaDiferenciaAnterior29)
            Dim DiaDiferenciaAnterior28 As Integer = 28 - DiaCreada
            Dim FechaTemporal28 As Date = FechaCreada.AddDays(DiaDiferenciaAnterior28)


            If TipoCalculo = "FinMes" Then


                If FechaTemporal31.Month = MesCreada Then
                    If DiaDiferenciaAnterior31 > 0 Then
                        FechaCreada = FechaTemporal31


                    End If

                ElseIf FechaTemporal30.Month = MesCreada Then

                    If DiaDiferenciaAnterior30 > 0 Then
                        FechaCreada = FechaTemporal30

                    End If

                ElseIf FechaTemporal29.Month = MesCreada Then


                    If DiaDiferenciaAnterior29 > 0 Then
                        FechaCreada = FechaTemporal29


                    End If
                ElseIf FechaTemporal28.Month = MesCreada Then


                    If DiaDiferenciaAnterior28 > 0 Then
                        FechaCreada = FechaTemporal28



                    End If



                End If
                Return FechaCreada
            ElseIf TipoCalculo = "Mensual" Then
                FechaAnterior = Fecha
                FechaCreada = Fecha.AddMonths(Meses)
                MesCreada = FechaCreada.Month
                DiaCreada = FechaCreada.Day




                DiaDiferenciaAnterior31 = 31 - DiaCreada
                FechaTemporal31 = FechaCreada.AddDays(DiaDiferenciaAnterior31)
                DiaDiferenciaAnterior30 = 30 - DiaCreada
                FechaTemporal30 = FechaCreada.AddDays(DiaDiferenciaAnterior30)
                DiaDiferenciaAnterior29 = 29 - DiaCreada
                FechaTemporal29 = FechaCreada.AddDays(DiaDiferenciaAnterior29)



                If DiaFijo = 31 Then
                    If MesCreada = FechaTemporal31.Month Then
                        FechaCreada = FechaTemporal31
                    ElseIf MesCreada = FechaTemporal30.Month Then

                        FechaCreada = FechaTemporal30

                    ElseIf MesCreada = FechaTemporal29.Month Then
                        FechaCreada = FechaTemporal29

                    Else

                        FechaCreada = FechaTemporal28

                    End If

                ElseIf DiaFijo = 30 Then


                    If MesCreada = FechaTemporal30.Month Then

                        FechaCreada = FechaTemporal30

                    ElseIf MesCreada = FechaTemporal29.Month Then
                        FechaCreada = FechaTemporal29

                    Else

                        FechaCreada = FechaTemporal28

                    End If

                ElseIf DiaFijo = 29 Then



                    If MesCreada = FechaTemporal29.Month Then
                        FechaCreada = FechaTemporal29

                    Else

                        FechaCreada = FechaTemporal28

                    End If
                Else
                    Dim DiaAgregar As Integer = DiaFijo - FechaCreada.Day
                    FechaCreada = FechaCreada.AddDays(DiaAgregar)


                End If




                Return FechaCreada


            End If
        ElseIf Base = 360 Then

            Dim Dias As Integer = Meses * 30
            Dim FechaAnterior As Date = Fecha

            FechaAnterior = FechaDias3602829(FechaAnterior, Dias, DiaFijo)


            Return FechaAnterior
        End If

    End Function


    Function ConvertirDecimal(ByVal Dec As String)
        Dim value As Double = 0
        If Dec Is Nothing Then
            Dec = 0
        End If

        Dec = Dec.ToString.Trim("%")
        If (Decimal.TryParse(Dec, value)) Then Return value Else Return 0
    End Function


    Function ConvertirEntero(ByVal Int As String)
        Dim value As Integer = 0
        If Int Is Nothing Then
            Int = 0
        End If


        Int = Int.ToString.Trim("%")
        If (Integer.TryParse(Int, value)) Then Return value Else Return 0
    End Function

    Function ConvertirFecha(ByVal Fecha As String)
        Dim value As Date = Date.Today.Date

        If (Date.TryParse(Fecha, value)) Then Return value Else Return Date.Today.Date
    End Function



    Function ConvertirFechaBaseDatos(ByVal Fecha As String)
        Dim value As Date = Date.Today.Date
        If (Date.TryParse(Fecha, value)) Then Return value Else Return DBNull.Value
    End Function
    Sub TraspasarDatos(ByVal CodigoExiste As String, ByVal CodigoInstrumentoExiste As String,
 ByVal IsNueva As String, ByVal TipoTransaccionCompraVenta As String,
 ByVal FamiliaTitulo As String, ByVal Monto As Double,
 ByVal Precio As Double, ByVal RendimientoEsperado As Double,
 ByVal IngresosEsperados As Double)
        If IsNueva = "N" Then
            Dim General As New DAOGeneral
            Dim Tabla As String = String.Empty

            If CodigoInstrumentoExiste = "ACCI" Or CodigoInstrumentoExiste = "ACCNC" Or
               CodigoInstrumentoExiste = "ACCNP" Then
                Tabla = "ACC0"
            ElseIf CodigoInstrumentoExiste = "PPER" Then
                Tabla = "PPER0"
            ElseIf CodigoInstrumentoExiste = "DAP" Then
                Tabla = "DAP0"
            ElseIf CodigoInstrumentoExiste = "NEST" Then
                Tabla = "NETS0"
            ElseIf CodigoInstrumentoExiste = "FUTU" Then
                Tabla = "FUT0"
            ElseIf CodigoInstrumentoExiste = "OPC" Then
                Tabla = "OPC0"
            ElseIf CodigoInstrumentoExiste = "PEMP" Then
                Tabla = "PEMP0"
            ElseIf CodigoInstrumentoExiste = "LETE" Then
                Tabla = "LET0"
            ElseIf CodigoInstrumentoExiste = "CETE" Then
                Tabla = "CET0"
            ElseIf CodigoInstrumentoExiste = "PBUR" Then
                Tabla = "PBUR"
            ElseIf CodigoInstrumentoExiste = "VCN" Then
                Tabla = "VCN"

            ElseIf CodigoInstrumentoExiste = "BONO" Then
                Tabla = "BON0"
            ElseIf CodigoInstrumentoExiste = "CINV" Then
                Tabla = "CIN0"

            ElseIf CodigoInstrumentoExiste = "EURB" Then
                Tabla = "EURB0"

            ElseIf CodigoInstrumentoExiste = "TIT" Then
                Tabla = "TIT"
            ElseIf CodigoInstrumentoExiste = "FINV" Then
                Tabla = "FINV"
            ElseIf CodigoInstrumentoExiste = "REPO" Then
                Tabla = "REP0"
            ElseIf CodigoInstrumentoExiste = "REPOVENTA" Then
                Tabla = "REPOVENTA"
            End If



            Dim RetCodigoInversionExiste As Boolean = General.ExisteTitulo(CodigoExiste, Tabla)
            If Not RetCodigoInversionExiste Then


                Dim RetMonto As Double = 0
                Dim RetPrecio As Double = 0
                Dim RetRendimiento As Double = 0
                Dim RetIngresosEsp As Double = 0


                Dim RetUnidadesAcciones As Integer = 0
                Dim RetUnidadesContratosFuturos As Integer = 0
                Dim RetCantidadContratosFuturos As Integer = 0
                Dim RetCuotaParticipacionFINV As Integer = 0
                Dim RetValorParticipacionFINV As Integer = 0

                If FamiliaTitulo = "FamiliaAcciones" Then
                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = ConvertirDecimal(Precio.ToString)
                    RetRendimiento = 0
                    RetIngresosEsp = 0
                    RetUnidadesAcciones = ConvertirDecimal((RetMonto / RetPrecio).ToString)
                    Variables.RetMonto = RetMonto
                    Variables.RetPrecio = RetPrecio
                    Variables.RetUnidadesAcciones = RetUnidadesAcciones

                ElseIf FamiliaTitulo = "FamiliaPrestamoPersonal" Then
                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = 0
                    RetRendimiento = ConvertirDecimal(RendimientoEsperado.ToString)
                    RetIngresosEsp = 0
                    Variables.RetMonto = RetMonto
                    Variables.RetRendimiento = RetRendimiento
                ElseIf FamiliaTitulo = "FamiliaDAP" Then
                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = 0
                    RetRendimiento = ConvertirDecimal(RendimientoEsperado.ToString)
                    RetIngresosEsp = 0
                    Variables.RetMonto = RetMonto
                    Variables.RetRendimiento = RetRendimiento

                ElseIf FamiliaTitulo = "FamiliaFuturos" Then

                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = ConvertirDecimal(Precio.ToString)
                    RetRendimiento = 0
                    RetIngresosEsp = 0
                    RetUnidadesContratosFuturos = 1
                    RetCantidadContratosFuturos = ConvertirDecimal((RetMonto / (RetUnidadesContratosFuturos * RetPrecio)))
                    Variables.RetMonto = RetMonto
                    Variables.RetPrecio = RetPrecio
                    Variables.RetUnidadesContratosFuturos = RetUnidadesContratosFuturos
                    Variables.RetCantidadContratosFuturos = RetCantidadContratosFuturos

                ElseIf FamiliaTitulo = "FamiliaEmpresas" Then
                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = 0
                    RetRendimiento = ConvertirDecimal(RendimientoEsperado.ToString)
                    RetIngresosEsp = 0
                    Variables.RetMonto = RetMonto
                    Variables.RetRendimiento = RetRendimiento


                ElseIf FamiliaTitulo = "FamiliaLetes" Then

                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = 0
                    RetRendimiento = ConvertirDecimal(RendimientoEsperado.ToString)
                    RetIngresosEsp = 0
                    Variables.RetMonto = RetMonto
                    Variables.RetRendimiento = RetRendimiento
                ElseIf FamiliaTitulo = "FamiliaCINV" Then

                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = ConvertirDecimal(Precio.ToString)
                    RetRendimiento = ConvertirDecimal(RendimientoEsperado.ToString)
                    RetIngresosEsp = 0
                    Variables.RetMonto = RetMonto
                    Variables.RetRendimiento = RetRendimiento
                    Variables.RetPrecio = RetPrecio

                ElseIf FamiliaTitulo = "FamiliaFINV" Then
                    RetMonto = ConvertirDecimal(Monto.ToString)
                    RetPrecio = 0
                    RetRendimiento = ConvertirDecimal(RendimientoEsperado.ToString)
                    RetIngresosEsp = 0
                    Variables.RetMonto = RetMonto
                    Variables.RetRendimiento = RetRendimiento
                    RetValorParticipacionFINV = 1
                    RetCuotaParticipacionFINV = ConvertirDecimal(RetMonto / RetValorParticipacionFINV)
                    Variables.RetValorParticipacionFINV = RetValorParticipacionFINV
                    Variables.RetCuotaParticipacionFINV = RetCuotaParticipacionFINV
                ElseIf FamiliaTitulo = "FamiliaReporto" Then
                    RetMonto = ConvertirDecimal(Monto.ToString)
                    Variables.RetMonto = RetMonto
                End If


                Variables.TipoTransaccionCompraVenta = TipoTransaccionCompraVenta
            End If







        Else
            RetCodigoInversionExiste = True

        End If
        Variables.RetCodigoInversionExiste = RetCodigoInversionExiste
    End Sub


End Class
