Public Class FormulasBonoCE


    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 Operaciones As New Operaciones
    Dim V_ListaCasasCorredoras = ElementosConsulta.ListaCasasCorredoras
    Public Function DiasVencimiento(ByVal fecha1 As DateTime, ByVal fecha2 As DateTime, ByVal Base As Integer)
        fecha1 = Format(fecha1, "dd/MM/yyyy")
        fecha2 = Format(fecha2, "dd/MM/yyyy")
        Dim Total As Integer

        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 InteresAcumulado(ByVal ValorNominal As Double, ByVal Cupon As Double, ByVal Fecha1 As Date, ByVal Fecha2 As Date, ByVal DiasAcumulados As Double, ByVal IndexBase As Integer)
        Dim Valor As Double = 0



        If (IndexBase = 0) Then
            Valor = ValorNominal * Cupon * DiasAcumulados / 360
            Return Valor
        ElseIf (IndexBase = 1) Then
            Dim PrOpc1 = 0.0, PrOpc2 = 0.0
            Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0
            DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha366Varios(Fecha1, Fecha2)
            DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha365Varios(Fecha1, Fecha2)



            If (DiasPrimeraFecha > 0 And DiasSegundaFecha > 0) Then
                PrOpc1 = ValorNominal * Cupon * DiasPrimeraFecha / 366
                PrOpc2 = ValorNominal * Cupon * DiasSegundaFecha / 365
                Valor = PrOpc1 + PrOpc2
            ElseIf (Not DiasPrimeraFecha > 0 And DiasSegundaFecha > 0) Then
                Valor = ValorNominal * Cupon * DiasSegundaFecha / 365
            ElseIf (DiasPrimeraFecha > 0 And Not DiasSegundaFecha > 0) Then
                Valor = ValorNominal * Cupon * DiasPrimeraFecha / 366
            Else
                Valor = 0
            End If
            Return Valor



        ElseIf (IndexBase = 2) Then
            Dim PrOpc1 = 0.0, PrOpc2 = 0.0
            Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0
            DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha360Bi(Fecha1, Fecha2)
            DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha360(Fecha1, Fecha2)
            If (DiasPrimeraFecha > 0 And DiasSegundaFecha > 0) Then
                PrOpc1 = ValorNominal * Cupon * DiasPrimeraFecha / 366
                PrOpc2 = ValorNominal * Cupon * DiasSegundaFecha / 365
                Valor = PrOpc1 + PrOpc2
            ElseIf (Not DiasPrimeraFecha > 0 And DiasSegundaFecha > 0) Then
                Valor = ValorNominal * Cupon * DiasSegundaFecha / 365
            ElseIf (DiasPrimeraFecha > 0 And Not DiasSegundaFecha > 0) Then
                Valor = ValorNominal * Cupon * DiasPrimeraFecha / 366
            Else
                Valor = 0
            End If
            Return Valor






        Else
            Dim PrOpc1 = 0.0, PrOpc2 = 0.0
            Dim DiasPrimeraFecha = 0, DiasSegundaFecha = 0
            DiasPrimeraFecha = Operaciones.DiasDespuesCambioPrimeraFecha366Varios(Fecha1, Fecha2)
            DiasSegundaFecha = Operaciones.DiasDespuesCambioPrimeraFecha365Varios(Fecha1, Fecha2)
            If (DiasPrimeraFecha > 0 And DiasSegundaFecha > 0) Then
                PrOpc1 = ValorNominal * Cupon * DiasPrimeraFecha / 360
                PrOpc2 = ValorNominal * Cupon * DiasSegundaFecha / 360
                Valor = PrOpc1 + PrOpc2
            ElseIf (Not DiasPrimeraFecha > 0 And DiasSegundaFecha > 0) Then
                Valor = ValorNominal * Cupon * DiasSegundaFecha / 360
            ElseIf (DiasPrimeraFecha > 0 And Not DiasSegundaFecha > 0) Then
                Valor = ValorNominal * Cupon * DiasPrimeraFecha / 360
            Else
                Valor = 0
            End If
            Return Valor

        End If
    End Function
    Public Function InteresAcumuladoPor(ByVal InteresAcumulado As Double, ByVal ValorNominal As Double, ByVal Periodicidad As Double, ByVal IndexBase As Integer)
        Dim Valor As Double = 0

        If (IndexBase = 0 Or IndexBase = 2) Then


            Valor = ((InteresAcumulado / ValorNominal) * 360) / (Periodicidad * 30)


            Return Valor


        ElseIf (IndexBase = 1 Or IndexBase = 3) Then


            Valor = ((InteresAcumulado / ValorNominal) * 365) / (Periodicidad * 30)
            Return Valor

        End If







        Return Valor
    End Function


    Public Function PrecioSucio(ByVal PrecioCompra As Double, ByVal InteresAcumulado As Double)
        Dim Proceso = (PrecioCompra * 0.01 + InteresAcumulado) * 100
        Return Proceso
    End Function
    Public Function ValorTrasado(ByVal PrecioCompra As Double, ByVal ValorNominal As Double)
        Dim Proceso = (PrecioCompra / 100) * ValorNominal
        Return Proceso
    End Function

    Public Function MontoPagar(ByVal ValorTrasado As Double, ByVal ComisionBolsa As Double, ByVal ComisionCasa As Double, ByVal InteresAcumulado As Double, ByVal CostoTransferencias As Double)
        Dim Valor = ValorTrasado + ComisionBolsa + ComisionCasa + InteresAcumulado + CostoTransferencias

        Return Valor

    End Function

    Public Function MontoRecibir(ByVal ValorTrasado As Double, ByVal ComisionBolsa As Double, ByVal ComisionCasa As Double, ByVal InteresAcumulado As Double)
        Dim Valor = ValorTrasado - ComisionBolsa - ComisionCasa + InteresAcumulado
        Return Valor

    End Function


    Public Function Base360(ByVal Fecha1 As Date, ByVal Fecha2 As Date)
        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

        Dim Total = dia - dias31 + febreros - bisiesto
        Return Total
    End Function
    Public Function Base365(ByVal Fecha1 As Date, ByVal Fecha2 As Date)

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


        Return dias
    End Function

End Class
