Public Class frmRegistroLetes


    Dim RegistroConsulta As New RegistrosDAO
    Dim Operaciones As New Operaciones
    Dim CodEmpr = Operaciones.CodEmpr
    Dim CodEmis = Operaciones.CodEmis
    Dim CodECalRi = Operaciones.CodECalRi
    Dim ListaPlazo = Operaciones.ListaPlazo
    Dim ListaTiposMercado = Operaciones.ListaTiposMercados
    Dim ListaPeriodos = Operaciones.ListaPeriodos
    Dim ListaTipoTasa = Operaciones.ListaTipoTasa
    Dim ListaTipoRenta = Operaciones.ListaTipoRenta
    Dim ListaEstado = Operaciones.ListaEstado
    Dim ListaCasasCorredoras = Operaciones.ListaCasasCorredoras
    Dim CodPais = Operaciones.CodPais
    Dim ValorCambiado As Boolean = False
    Dim Direccion As String = String.Empty
    Dim CodigoInstrumento As String = Variables.CodigoInstrumento
    Dim tablas As String
    Private Sub frmRegistroLetes_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        If (CodigoInstrumento = "LETE") Then
            tablas = "LET0"
        ElseIf (CodigoInstrumento = "PBUR") Then
            tablas = "PBUR"
        ElseIf (CodigoInstrumento = "VCN") Then
            tablas = "VCN"
        End If
        AgregarColumnasInv()
        AgregarColumnasIns()
        txtPosicion.Text = "1"
        txtConta.Text = RegistroConsulta.Contador(tablas)
        ValorCambiado = False
        Cargar(CodigoInstrumento, 1, 100)

    End Sub

    Sub AgregarColumnasInv()
        Dim Empresa, Instrumento, Emisor, CalRiesgo, Calif, Pais, TipoMercado, Nombre, Periodicidad, Plazo As New DataGridViewTextBoxColumn
        Dim CantidadPlazo, TipoRenta, TipoTasa, Numero, Fecha, Codigo, Estado As New DataGridViewTextBoxColumn
        Codigo.Name = "Codigo de Inversion"
        Empresa.Name = "Empresa"
        Instrumento.Name = "Instrumento"
        Emisor.Name = "Emisor"
        CalRiesgo.Name = "Calificadora Riesgo"
        Calif.Name = "Calificadora"
        Pais.Name = "Pais"
        TipoMercado.Name = "Tipo Mercado"
        Nombre.Name = "Nombre"
        Periodicidad.Name = "Periodicidad"
        CantidadPlazo.Name = "Cantidad Plazo"
        Plazo.Name = "Plazo"
        TipoRenta.Name = "Tipo de Renta"
        TipoTasa.Name = "Tipo de Tasa"
        Numero.Name = "Numero"
        Fecha.Name = "Fecha"
        Estado.Name = "Estado"



        dgvLETES.Columns.Add(Codigo)
        dgvLETES.Columns.Add(Estado)
        dgvLETES.Columns.Add(Empresa)
        dgvLETES.Columns.Add(Instrumento)
        dgvLETES.Columns.Add(Emisor)
        dgvLETES.Columns.Add(CalRiesgo)
        dgvLETES.Columns.Add(Calif)
        dgvLETES.Columns.Add(CantidadPlazo)
        dgvLETES.Columns.Add(Plazo)
        dgvLETES.Columns.Add(Fecha)
        dgvLETES.Columns.Add(TipoMercado)
        dgvLETES.Columns.Add(Pais)
        dgvLETES.Columns.Add(Nombre)
        dgvLETES.Columns.Add(Periodicidad)
        dgvLETES.Columns.Add(TipoTasa)
        dgvLETES.Columns.Add(TipoRenta)
        dgvLETES.Columns.Add(Numero)



    End Sub

    Sub AgregarColumnasIns()
        Dim ValorNo, FechaOpe, FechaLiq, FechaVenc, PlazoInv, Casa, ComCasa, PorComCasa, ComBolsa, PorComBolsa, Periodicidad As New DataGridViewTextBoxColumn
        Dim Base, RendBruto, RendNeto, IngBruto, IngNeto, ValorTra, Precio, TotPagar As New DataGridViewTextBoxColumn
        ValorNo.Name = "Valor Nominal"
        FechaOpe.Name = "Fecha de Operacion"
        FechaLiq.Name = "Fecha de Liquidación"
        FechaVenc.Name = "Fecha de Vencimiento"
        PlazoInv.Name = "Plazo de Inversión"
        Casa.Name = "Casa Corredora"
        ComCasa.Name = "Comisión Casa"
        PorComCasa.Name = "Porcentaje Comisión Casa"
        ComBolsa.Name = "Comision Bolsa"
        PorComBolsa.Name = "Porcentaje Comisión Bolsa"
        Periodicidad.Name = "Periodicidad"
        Base.Name = "Dias Base"
        RendBruto.Name = "Rendimiento Bruto"
        RendNeto.Name = "Rendimiento Neto"
        IngBruto.Name = "Ingreso Bruto"
        IngNeto.Name = "Ingreso Neto"
        ValorTra.Name = "Valor Trasado"
        Precio.Name = "Precio"
        TotPagar.Name = "Total a Pagar"


        dgvLETES.Columns.Add(ValorNo)
        dgvLETES.Columns.Add(FechaOpe)
        dgvLETES.Columns.Add(FechaLiq)
        dgvLETES.Columns.Add(FechaVenc)
        dgvLETES.Columns.Add(PlazoInv)
        dgvLETES.Columns.Add(Casa)
        dgvLETES.Columns.Add(ComCasa)
        dgvLETES.Columns.Add(PorComCasa)
        dgvLETES.Columns.Add(ComBolsa)
        dgvLETES.Columns.Add(PorComBolsa)
        dgvLETES.Columns.Add(Periodicidad)
        dgvLETES.Columns.Add(Base)
        dgvLETES.Columns.Add(RendBruto)
        dgvLETES.Columns.Add(RendNeto)
        dgvLETES.Columns.Add(IngBruto)
        dgvLETES.Columns.Add(IngNeto)
        dgvLETES.Columns.Add(ValorTra)
        dgvLETES.Columns.Add(Precio)
        dgvLETES.Columns.Add(TotPagar)




    End Sub




    Sub Cargar(ByVal Cod As String, ByVal Inicio As Integer, ByVal Final As Integer)


        Dim CodigoEmpresa As String = " "
        Dim CodigoEmisor As String = " "
        Dim CodigoECal As String = " "
        Dim PlazoF As String = " "
        Dim TiposMercado As String = " "
        Dim Pais As String = " "
        Dim Periodos As String = " "
        Dim Periodos2 As String = " "
        Dim TipoTasa As String = " "
        Dim TipoRenta As String = " "
        Dim Estado As String = " "
        Dim CasasCorredoras As String = " "
        Dim codigo As String = Variables.Codigo
        Dim RendNeto As String = ""
        Dim Prec As String = ""
        Dim ValTrasado As String = ""
        Dim CCasa As String = ""
        Dim CBolsa As String = ""
        Dim IngBruto As String = ""
        Dim TotPagar As String = ""
        Dim IngNeto As String = ""
        Dim Instrumento As String = ""
        Dim dr
        If (CodigoInstrumento = "LETE") Then
            Instrumento = "LETES"
        ElseIf (CodigoInstrumento = "PBUR") Then
            Instrumento = "PAPEL BURSATIL"
        ElseIf ((CodigoInstrumento = "VCN")) Then
            Instrumento = "Valores Comerciales"
        End If



        If (CodigoInstrumento = "LETE") Then
            dr = RegistroConsulta.CargarInvLETE(Cod, Inicio, Final)
        ElseIf (CodigoInstrumento = "PBUR") Then

            dr = RegistroConsulta.CargarInvPBUR(Cod, Inicio, Final)

        ElseIf (CodigoInstrumento = "VCN") Then

            dr = RegistroConsulta.CargarInvVCN(Cod, Inicio, Final)

        End If






        While dr.Read

            Dim VRenBruto, VPlazo, VAnioBase, VValNom, VComisionCasa, VComisionBolsa
            VRenBruto = dr("RendBruto").ToString

            VPlazo = dr("Plazo").ToString
            VAnioBase = dr("AnioBase").ToString
            VValNom = dr("ValNom").ToString

            VComisionCasa = dr("ComisionCasa").ToString
            VComisionBolsa = dr("ComisionBolsa").ToString

            If (String.IsNullOrEmpty(VRenBruto)) Then
                VRenBruto = 0
            End If
            If (String.IsNullOrEmpty(VPlazo)) Then
                VPlazo = 0
            End If
            If (String.IsNullOrEmpty(VAnioBase)) Then
                VAnioBase = 365
            End If
            If (String.IsNullOrEmpty(VValNom)) Then
                VValNom = 0
            End If
            If (String.IsNullOrEmpty(VComisionCasa)) Then
                VComisionCasa = 0
            End If
            If (String.IsNullOrEmpty(VComisionBolsa)) Then
                VComisionBolsa = 0
            End If



            Prec = Precio(VRenBruto, VPlazo, VAnioBase)
            ValTrasado = ValorTrasado(VValNom, Prec)
            CCasa = ComisionCalculo(ValTrasado, VComisionCasa, VPlazo, VAnioBase)
            CBolsa = ComisionCalculo(ValTrasado, VComisionBolsa, VPlazo, VAnioBase)


            IngBruto = IngresoBruto(VValNom, ValTrasado)
            TotPagar = TotalPagar(ValTrasado, CCasa, CBolsa)


            IngNeto = IngresoNeto(VValNom, TotPagar)


            RendNeto = RendimientoNeto(VValNom, TotPagar, VPlazo, VAnioBase)




            For Each pair In CodEmpr

                If (pair.Key.ToString = dr("CodEmpr").ToString) Then
                    CodigoEmpresa = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("CodEmpr").ToString)) Then
                    CodigoEmpresa = "    ----  ----  ----  ---- "
                    Exit For
                End If

            Next

            For Each pair In CodEmis

                If (pair.Key.ToString = dr("CodEmis").ToString) Then
                    CodigoEmisor = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("CodEmis").ToString)) Then
                    CodigoEmisor = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next

            For Each pair In CodECalRi


                If (pair.Key.ToString = dr("CodECalRi").ToString) Then
                    CodigoECal = pair.Value

                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("CodECalRi").ToString)) Then
                    CodigoECal = "    ----  ----  ----  ---- "

                    Exit For
                End If
            Next

            For Each pair In ListaPlazo
                If (pair.Key.ToString = dr("PlazoFact").ToString) Then
                    PlazoF = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("PlazoFact").ToString)) Then
                    PlazoF = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next

            For Each pair In ListaTiposMercado
                If (pair.Key.ToString = dr("TipoMerc").ToString) Then
                    TiposMercado = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("TipoMerc").ToString)) Then
                    TiposMercado = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next

            For Each pair In CodPais
                If (pair.Key.ToString = dr("CodPais").ToString) Then
                    Pais = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("CodPais").ToString)) Then
                    Pais = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next

            For Each pair In ListaPeriodos
                If (pair.Key.ToString = dr("Periodicidad").ToString) Then
                    Periodos = pair.Value

                ElseIf (String.IsNullOrEmpty(dr("Periodicidad").ToString)) Then
                    Periodos = "    ----  ----  ----  ---- "

                End If

                If (pair.Key.ToString = dr("Periodic").ToString) Then
                    Periodos2 = pair.Value

                ElseIf (String.IsNullOrEmpty(dr("Periodic").ToString)) Then
                    Periodos2 = "    ----  ----  ----  ---- "

                End If
            Next



            For Each pair In ListaTipoTasa
                If (pair.Key.ToString = dr("TipTasa").ToString) Then
                    TipoTasa = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("TipTasa").ToString)) Then
                    TipoTasa = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next


            For Each pair In ListaTipoRenta
                If (pair.Key.ToString = dr("TipRenta").ToString) Then
                    TipoRenta = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("TipRenta").ToString)) Then
                    TipoRenta = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next



            For Each pair In ListaEstado
                If (pair.Key.ToString = dr("DocEst").ToString) Then
                    Estado = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("DocEst").ToString)) Then
                    Estado = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next


            For Each pair In ListaCasasCorredoras
                If (pair.Key.ToString = dr("CasasCorredoras").ToString) Then
                    CasasCorredoras = pair.Value
                    Exit For
                ElseIf (String.IsNullOrEmpty(dr("CasasCorredoras").ToString)) Then
                    CasasCorredoras = "    ----  ----  ----  ---- "
                    Exit For
                End If
            Next

            'dgvReportes.Rows.Add(dr("CodInv"), Estado, CodigoEmpresa, "Reportos", CodigoEmisor, dr("CodCalRi"), CodigoECal, dr("Plazo"), PlazoF, dr("FechaDoc"), TiposMercado, Pais, dr("NombreManIF"), Periodos, TipoTasa, TipoRenta, dr("NumManInv"), "", dr("Nombre"), dr("FCompra"), dr("ValTrans"), dr("Dias"), dr("FVenc"), dr("Rend"), ComisionCasa, ComisionBolsa, IOF, 0, TotalCostos, MontoLiq, InteresGenerar, dr("CostoTransfr"), RendimientoAntes, ValorRecompra, Renta, IngresoNeto, ValorNeto, RendimientoDespues, "", PorcentajeComisionCasa, PorcentajeComisionBolsa, PorcentajeComisionIOF)
            dgvLETES.Rows.Add(dr("CodInv"), Estado, CodigoEmpresa, Instrumento, CodigoEmisor, dr("CodCalRi"), CodigoECal, dr("Plazo"), PlazoF, dr("FechaDoc"), TiposMercado, Pais, dr("NombreManIF"), Periodos, TipoTasa, TipoRenta, dr("NumManInv"), dr("ValNom"), dr("FOper"), dr("FLiq"), dr("FVenc"), dr("Plazo"), CasasCorredoras, dr("ComisionCasa"), CCasa, dr("ComisionBolsa"), CBolsa, Periodos2, dr("AnioBase"), dr("RendBruto"), RendNeto, IngBruto, IngNeto, ValTrasado, Prec, TotPagar)

        End While
    End Sub



    Function ValorTrasado(ByVal ValorNominal As Double, ByVal Precio As Double)
        If (Double.TryParse(ValorNominal, Nothing) And Double.TryParse(Precio, Nothing)) Then

            Return CDec(ValorNominal) * CDec(Precio)

        End If
        Return Nothing
    End Function


    Function Precio(ByVal RendimientoBruto As Double, ByVal PlazoInversion As Double, ByVal AnioBase As Integer)
        If (Double.TryParse(RendimientoBruto, Nothing) And Double.TryParse(PlazoInversion, Nothing)) Then
            Dim DatosOperacion As Double
            If (AnioBase = 0) Then
                AnioBase = 365
            End If
            Dim Rendimiento = CDec(RendimientoBruto)
            Dim Plazo = CDec((PlazoInversion))
            DatosOperacion = (1 - (Rendimiento / (1 + Rendimiento * Plazo / AnioBase)) * Plazo / AnioBase)
            Return DatosOperacion
        End If

        Return Nothing

    End Function


    Function ComisionCalculo(ByVal ValorTras As Double, ByVal ComisionDeCasa As Double, ByVal PlazoInversion As Double, ByVal AnioBase As Integer)
        If (Double.TryParse(ValorTras, Nothing) And Double.TryParse(ComisionDeCasa, Nothing) And Double.TryParse(PlazoInversion, Nothing)) Then
            Dim comision = (CDec(ValorTras) * CDec(ComisionDeCasa)) * (CDec(PlazoInversion) / AnioBase)
            Return comision
        End If
        Return Nothing

    End Function

    Function RendimientoNeto(ByVal ValorNominal As Double, ByVal TotalPagar As Double, ByVal PlazoInversion As Integer, ByVal AnioBase As Integer)
        If (Double.TryParse(ValorNominal, Nothing) And Double.TryParse(TotalPagar, Nothing) And Double.TryParse(PlazoInversion, Nothing)) Then
            If CDec(TotalPagar) = 0 Or CDec(PlazoInversion) = 0 Then
                Return 0
            End If

            Dim RendimientoNet = ((CDec(ValorNominal) - CDec(TotalPagar)) / CDec(TotalPagar)) * (AnioBase / CDec(PlazoInversion))
            Return RendimientoNet
        End If
        Return Nothing
    End Function


    Function IngresoBruto(ByVal ValorNominal As Double, ByVal ValorTrasado As Double)
        If (Double.TryParse(ValorNominal, Nothing) And Double.TryParse(ValorTrasado, Nothing)) Then
            Dim Bruto = CDec(ValorNominal) - CDec(ValorTrasado)
            Return Bruto
        End If
        Return Nothing
    End Function



    Function IngresoNeto(ByVal ValorNominal As Double, ByVal TotalPagar As Double)
        If (Double.TryParse(ValorNominal, Nothing) And Double.TryParse(TotalPagar, Nothing)) Then
            Dim Neto = CDec(ValorNominal) - CDec(TotalPagar)
            Return Neto
        End If
        Return Nothing
    End Function


    Function TotalPagar(ByVal ValorTrasado As Double, ByVal ComisionCasa As Double, ByVal ComisionBolsa As Double)
        If (Double.TryParse(ValorTrasado, Nothing) And Double.TryParse(ComisionCasa, Nothing) And Double.TryParse(ComisionBolsa, Nothing)) Then
            Dim Total = CDec(ValorTrasado) + CDec(ComisionCasa) + CDec(ComisionBolsa)

            Return Total
        End If
        Return Nothing
    End Function



    Private Sub navSiguienteRegistro_Click(sender As Object, e As EventArgs)
        Direccion = "D"
        Mover(Direccion)
        ValorCambiado = False
    End Sub










    Sub Mover(ByVal Direccion As String)
        Dim ReferenciaD = txtPosicion.Text + 1
        Dim ReferenciaI = txtPosicion.Text - 1
        Dim Cantidad = txtConta.Text
        Dim ValorExacto = txtPosicion.Text
        Dim Inicio, Final As Integer
        If (Direccion = "D") Then
            If (Cantidad >= ValorExacto) Then
                dgvLETES.Rows.Clear()
                If (Not ValorCambiado) Then
                    txtPosicion.Text = ReferenciaD
                    ValorCambiado = False
                End If

                Inicio = txtPosicion.Text - 1
                Inicio = Inicio * 100
                Final = Inicio + 100
                Cargar(CodigoInstrumento, Inicio, Final)

            Else
                MsgBox("Rango Fuera de Valor")
            End If
        ElseIf (Direccion = "I") Then
            If (ReferenciaI >= 1) Then
                dgvLETES.Rows.Clear()
                If (Not ValorCambiado) Then
                    If (Not ValorExacto = 1) Then
                        txtPosicion.Text = ReferenciaI

                    End If
                Else
                    ValorCambiado = False
                End If


                Inicio = txtPosicion.Text - 1
                Inicio = Inicio * 100
                Final = Inicio + 100
                Cargar(CodigoInstrumento, Inicio, Final)
            Else
                MsgBox("Rango Fuera de Valor")
            End If


        ElseIf (Direccion = "SD") Then
            Final = txtConta.Text * 100
            Inicio = Final - 100

            dgvLETES.Rows.Clear()
            Cargar(CodigoInstrumento, Inicio, Final)
            txtPosicion.Text = Cantidad
        ElseIf (Direccion = "SI") Then
            Final = 100
            Inicio = Final - 100

            dgvLETES.Rows.Clear()
            Cargar(CodigoInstrumento, Inicio, Final)
            txtPosicion.Text = 1
        End If




    End Sub

    Private Sub navRegistroAnterior_Click(sender As Object, e As EventArgs) Handles navRegistroAnterior.Click
        Direccion = "I"
        Mover(Direccion)
        ValorCambiado = False
    End Sub

    Private Sub txtPosicion_TextChanged(sender As Object, e As EventArgs) Handles txtPosicion.TextChanged
        ValorCambiado = True
    End Sub

    Private Sub navUltimoRegistro_Click(sender As Object, e As EventArgs) Handles navUltimoRegistro.Click
        Direccion = "SD"
        Mover(Direccion)
        ValorCambiado = False
    End Sub

    Private Sub navPrimerRegistro_Click(sender As Object, e As EventArgs) Handles navPrimerRegistro.Click
        Direccion = "SI"
        Mover(Direccion)
        ValorCambiado = False
    End Sub

    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs)

    End Sub
End Class